payneteasy-payneteasyapi 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. data/.gemtest +0 -0
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +18 -0
  4. data/README.md +54 -0
  5. data/Rakefile +8 -0
  6. data/doc/00-basic-tutorial.md +254 -0
  7. data/doc/01-library-internals.md +6 -0
  8. data/doc/02-payment-scenarios.md +9 -0
  9. data/doc/library-internals/00-payment-data.md +162 -0
  10. data/doc/library-internals/01-payment-processor.md +163 -0
  11. data/doc/library-internals/02-validator.md +55 -0
  12. data/doc/library-internals/03-property-accessor.md +76 -0
  13. data/doc/payment-scenarios/00-sale-transactions.md +90 -0
  14. data/doc/payment-scenarios/01-preauth-capture-transactions.md +105 -0
  15. data/doc/payment-scenarios/02-transfer-transactions.md +89 -0
  16. data/doc/payment-scenarios/03-return-transactions.md +52 -0
  17. data/doc/payment-scenarios/04-recurrent-transactions.md +110 -0
  18. data/doc/payment-scenarios/05-payment-form-integration.md +59 -0
  19. data/doc/payment-scenarios/06-merchant-callbacks.md +29 -0
  20. data/example/capture.rb +12 -0
  21. data/example/common/functions.rb +56 -0
  22. data/lib/paynet_easy/paynet_easy_api/callback/callback_factory.rb +47 -0
  23. data/lib/paynet_easy/paynet_easy_api/callback/callback_prototype.rb +186 -0
  24. data/lib/paynet_easy/paynet_easy_api/callback/customer_return_callback.rb +28 -0
  25. data/lib/paynet_easy/paynet_easy_api/callback/paynet_easy_callback.rb +44 -0
  26. data/lib/paynet_easy/paynet_easy_api/error/paynet_error.rb +4 -0
  27. data/lib/paynet_easy/paynet_easy_api/error/request_error.rb +6 -0
  28. data/lib/paynet_easy/paynet_easy_api/error/response_error.rb +6 -0
  29. data/lib/paynet_easy/paynet_easy_api/error/validation_error.rb +6 -0
  30. data/lib/paynet_easy/paynet_easy_api/payment_data/billing_address.rb +41 -0
  31. data/lib/paynet_easy/paynet_easy_api/payment_data/credit_card.rb +32 -0
  32. data/lib/paynet_easy/paynet_easy_api/payment_data/customer.rb +35 -0
  33. data/lib/paynet_easy/paynet_easy_api/payment_data/data.rb +13 -0
  34. data/lib/paynet_easy/paynet_easy_api/payment_data/payment.rb +190 -0
  35. data/lib/paynet_easy/paynet_easy_api/payment_data/payment_transaction.rb +188 -0
  36. data/lib/paynet_easy/paynet_easy_api/payment_data/query_config.rb +95 -0
  37. data/lib/paynet_easy/paynet_easy_api/payment_data/recurrent_card.rb +40 -0
  38. data/lib/paynet_easy/paynet_easy_api/payment_processor.rb +251 -0
  39. data/lib/paynet_easy/paynet_easy_api/paynet_easy_api.rb +26 -0
  40. data/lib/paynet_easy/paynet_easy_api/query/capture_query.rb +30 -0
  41. data/lib/paynet_easy/paynet_easy_api/query/create_card_ref_query.rb +78 -0
  42. data/lib/paynet_easy/paynet_easy_api/query/get_card_info_query.rb +49 -0
  43. data/lib/paynet_easy/paynet_easy_api/query/make_rebill_query.rb +37 -0
  44. data/lib/paynet_easy/paynet_easy_api/query/preauth_form_query.rb +10 -0
  45. data/lib/paynet_easy/paynet_easy_api/query/preauth_query.rb +10 -0
  46. data/lib/paynet_easy/paynet_easy_api/query/prototype/payment_form_query.rb +69 -0
  47. data/lib/paynet_easy/paynet_easy_api/query/prototype/payment_query.rb +71 -0
  48. data/lib/paynet_easy/paynet_easy_api/query/prototype/query.rb +302 -0
  49. data/lib/paynet_easy/paynet_easy_api/query/query_factory.rb +19 -0
  50. data/lib/paynet_easy/paynet_easy_api/query/return_query.rb +46 -0
  51. data/lib/paynet_easy/paynet_easy_api/query/sale_form_query.rb +10 -0
  52. data/lib/paynet_easy/paynet_easy_api/query/sale_query.rb +53 -0
  53. data/lib/paynet_easy/paynet_easy_api/query/status_query.rb +50 -0
  54. data/lib/paynet_easy/paynet_easy_api/query/transfer_by_ref_query.rb +41 -0
  55. data/lib/paynet_easy/paynet_easy_api/query/transfer_form_query.rb +10 -0
  56. data/lib/paynet_easy/paynet_easy_api/transport/callback_response.rb +21 -0
  57. data/lib/paynet_easy/paynet_easy_api/transport/gateway_client.rb +91 -0
  58. data/lib/paynet_easy/paynet_easy_api/transport/request.rb +20 -0
  59. data/lib/paynet_easy/paynet_easy_api/transport/response.rb +136 -0
  60. data/lib/paynet_easy/paynet_easy_api/util/property_accessor.rb +60 -0
  61. data/lib/paynet_easy/paynet_easy_api/util/string.rb +9 -0
  62. data/lib/paynet_easy/paynet_easy_api/util/validator.rb +110 -0
  63. data/payneteasy-payneteasyapi.gemspec +16 -0
  64. data/test/paynet_easy/paynet_easy_api/callback/callback_factory_test.rb +22 -0
  65. data/test/paynet_easy/paynet_easy_api/callback/callback_test_prototype.rb +168 -0
  66. data/test/paynet_easy/paynet_easy_api/callback/customer_return_callback_test.rb +95 -0
  67. data/test/paynet_easy/paynet_easy_api/callback/paynet_easy_callback_test.rb +101 -0
  68. data/test/paynet_easy/paynet_easy_api/fake.rb +71 -0
  69. data/test/paynet_easy/paynet_easy_api/payment_processor_test.rb +255 -0
  70. data/test/paynet_easy/paynet_easy_api/query/capture_query_test.rb +48 -0
  71. data/test/paynet_easy/paynet_easy_api/query/create_card_ref_query_test.rb +116 -0
  72. data/test/paynet_easy/paynet_easy_api/query/get_card_info_query_test.rb +116 -0
  73. data/test/paynet_easy/paynet_easy_api/query/make_rebill_query_test.rb +59 -0
  74. data/test/paynet_easy/paynet_easy_api/query/prototype/payment_query_test_prototype.rb +117 -0
  75. data/test/paynet_easy/paynet_easy_api/query/prototype/query_test_prototype.rb +190 -0
  76. data/test/paynet_easy/paynet_easy_api/query/prototype/sync_query_test_prototype.rb +88 -0
  77. data/test/paynet_easy/paynet_easy_api/query/query_factory_test.rb +21 -0
  78. data/test/paynet_easy/paynet_easy_api/query/return_query_test.rb +58 -0
  79. data/test/paynet_easy/paynet_easy_api/query/sale_form_query_test.rb +96 -0
  80. data/test/paynet_easy/paynet_easy_api/query/sale_query_test.rb +78 -0
  81. data/test/paynet_easy/paynet_easy_api/query/status_query_test.rb +81 -0
  82. data/test/paynet_easy/paynet_easy_api/query/transfer_by_ref_query_test.rb +63 -0
  83. data/test/paynet_easy/paynet_easy_api/transport/gateway_client_test.rb +22 -0
  84. data/test/paynet_easy/paynet_easy_api/transport/response_test.rb +26 -0
  85. data/test/paynet_easy/paynet_easy_api/util/property_accessor_test.rb +52 -0
  86. data/test/paynet_easy/paynet_easy_api/util/validator_test.rb +42 -0
  87. metadata +204 -0
@@ -0,0 +1,6 @@
1
+ require 'error/paynet_error'
2
+
3
+ module PaynetEasy::PaynetEasyApi::Error
4
+ class ValidationError < PaynetError
5
+ end
6
+ end
@@ -0,0 +1,41 @@
1
+ require 'payment_data/data'
2
+
3
+ module PaynetEasy::PaynetEasyApi::PaymentData
4
+ class BillingAddress < Data
5
+ # Customer’s address line 1
6
+ #
7
+ # @var [String]
8
+ attr_accessor :first_line
9
+
10
+ # Customer’s city
11
+ #
12
+ # @var [String]
13
+ attr_accessor :city
14
+
15
+ # Customer’s state (two-letter US state code).
16
+ # Not applicable outside the US.
17
+ #
18
+ # @var [String]
19
+ attr_accessor :state
20
+
21
+ # Customer’s ZIP code
22
+ #
23
+ # @var [String]
24
+ attr_accessor :zip_code
25
+
26
+ # Customer’s country (two-letter country code)
27
+ #
28
+ # @var [String]
29
+ attr_accessor :country
30
+
31
+ # Customer’s full international phone number, including country code.
32
+ #
33
+ # @var [String]
34
+ attr_accessor :phone
35
+
36
+ # Customer’s full international cell phone number, including country code.
37
+ #
38
+ # @var [String]
39
+ attr_accessor :cell_phone
40
+ end
41
+ end
@@ -0,0 +1,32 @@
1
+ module PaynetEasy::PaynetEasyApi::PaymentData
2
+ class CreditCard < Data
3
+ # CreditCard CVV2
4
+ #
5
+ # @var [String]
6
+ attr_accessor :cvv2
7
+
8
+ # Card holder name
9
+ #
10
+ # @var [String]
11
+ attr_accessor :card_printed_name
12
+
13
+ # Credit card number
14
+ #
15
+ # @var [String]
16
+ attr_accessor :credit_card_number
17
+
18
+ # Card expiration year
19
+ #
20
+ # @var [String]
21
+ attr_accessor :expire_year
22
+
23
+ # Card expiration month
24
+ #
25
+ # @var [String]
26
+ attr_accessor :expire_month
27
+
28
+ def credit_card_number=(credit_card_number)
29
+ @credit_card_number = credit_card_number.gsub(/\s|-|_|\.|,/, '')
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,35 @@
1
+ require 'payment_data/data'
2
+
3
+ module PaynetEasy::PaynetEasyApi::PaymentData
4
+ class Customer < Data
5
+ # Customer’s first name
6
+ #
7
+ # @var [String]
8
+ attr_accessor :first_name
9
+
10
+ # Customer’s last name
11
+ #
12
+ # @var [String]
13
+ attr_accessor :last_name
14
+
15
+ # Customer’s email address
16
+ #
17
+ # @var [String]
18
+ attr_accessor :email
19
+
20
+ # Customer’s IP address
21
+ #
22
+ # @var [String]
23
+ attr_accessor :ip_address
24
+
25
+ # Customer’s date of birth, in the format MMDDYY
26
+ #
27
+ # @var [String]
28
+ attr_accessor :birthday
29
+
30
+ # Last four digits of the customer’s social security number
31
+ #
32
+ # @var [String]
33
+ attr_accessor :ssn
34
+ end
35
+ end
@@ -0,0 +1,13 @@
1
+ require 'util/property_accessor'
2
+
3
+ module PaynetEasy::PaynetEasyApi::PaymentData
4
+ class Data
5
+ include PaynetEasy::PaynetEasyApi::Util
6
+
7
+ def initialize(data_hash = {}, fail_on_unknown_field = true)
8
+ data_hash.each do |property_path, value|
9
+ PropertyAccessor.set_value self, property_path, value, fail_on_unknown_field
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,190 @@
1
+ require 'payment_data/data'
2
+ require 'payment_data/customer'
3
+ require 'payment_data/billing_address'
4
+ require 'payment_data/credit_card'
5
+ require 'payment_data/recurrent_card'
6
+ require 'payment_data/payment_transaction'
7
+
8
+ module PaynetEasy::PaynetEasyApi::PaymentData
9
+ class Payment < Data
10
+ # Payment is new, and not processing
11
+ STATUS_NEW = 'new'
12
+
13
+ # Payment is under preauth, or preauth is finished
14
+ STATUS_PREAUTH = 'preauth'
15
+
16
+ # Payment is under capture, or capture is finished
17
+ STATUS_CAPTURE = 'capture'
18
+
19
+ # Payment is under return, or return is finished
20
+ STATUS_RETURN = 'return'
21
+
22
+ # All allowed payment statuses
23
+ @@allowed_statuses =
24
+ [
25
+ STATUS_PREAUTH,
26
+ STATUS_CAPTURE,
27
+ STATUS_RETURN
28
+ ]
29
+
30
+ # Unique identifier of payment assigned by merchant
31
+ #
32
+ # @var [String]
33
+ attr_accessor :client_id
34
+
35
+ # Unique identifier of payment assigned by PaynetEasy
36
+ #
37
+ # @var [String]
38
+ attr_accessor :paynet_id
39
+
40
+ # Brief payment description
41
+ #
42
+ # @var [String]
43
+ attr_accessor :description
44
+
45
+ # Destination to where the payment goes
46
+ #
47
+ # @var [String]
48
+ attr_accessor :destination
49
+
50
+ # Amount to be charged
51
+ #
52
+ # @var [Float]
53
+ attr_accessor :amount
54
+
55
+ # Currency the transaction is charged in (three-letter currency code)
56
+ #
57
+ # @var [String]
58
+ attr_accessor :currency
59
+
60
+ # A short comment for payment
61
+ #
62
+ # @var [String]
63
+ attr_accessor :comment
64
+
65
+ # Payment status
66
+ #
67
+ # @var [String]
68
+ attr_accessor :status
69
+
70
+ # Payment customer
71
+ #
72
+ # @var [PaynetEasy::PaynetEasyApi::PaymentData::Customer]
73
+ attr_accessor :customer
74
+
75
+ # Payment billing address
76
+ #
77
+ # @var [PaynetEasy::PaynetEasyApi::PaymentData::BillingAddress]
78
+ attr_accessor :billing_address
79
+
80
+ # Payment credit card
81
+ #
82
+ # @var [PaynetEasy::PaynetEasyApi::PaymentData::CreditCard]
83
+ attr_accessor :credit_card
84
+
85
+ # Payment source recurrent card
86
+ #
87
+ # @var [PaynetEasy::PaynetEasyApi::PaymentData::RecurrentCard]
88
+ attr_accessor :recurrent_card_from
89
+
90
+ # Payment destination recurrent card
91
+ #
92
+ # @var [PaynetEasy::PaynetEasyApi::PaymentData::RecurrentCard]
93
+ attr_accessor :recurrent_card_to
94
+
95
+ # Payment transactions for payment
96
+ #
97
+ # @var [Array]
98
+ attr_accessor :payment_transactions
99
+
100
+ def amount_in_cents
101
+ (amount * 100).to_i if amount
102
+ end
103
+
104
+ def customer=(customer)
105
+ @customer = customer
106
+ end
107
+
108
+ def customer
109
+ @customer ||= Customer.new
110
+ end
111
+
112
+ def billing_address=(billing_address)
113
+ @billing_address = billing_address
114
+ end
115
+
116
+ def billing_address
117
+ @billing_address ||= BillingAddress.new
118
+ end
119
+
120
+ def credit_card=(credit_card)
121
+ @credit_card = credit_card
122
+ end
123
+
124
+ def credit_card
125
+ @credit_card ||= CreditCard.new
126
+ end
127
+
128
+ def recurrent_card_from=(recurrent_card)
129
+ @recurrent_card_from = recurrent_card
130
+ end
131
+
132
+ def recurrent_card_from
133
+ @recurrent_card_from ||= RecurrentCard.new
134
+ end
135
+
136
+ def recurrent_card_to=(recurrent_card)
137
+ @recurrent_card_to = recurrent_card
138
+ end
139
+
140
+ def recurrent_card_to
141
+ @recurrent_card_to ||= RecurrentCard.new
142
+ end
143
+
144
+ def payment_transactions
145
+ @payment_transactions ||= []
146
+ end
147
+
148
+ def add_payment_transaction(payment_transaction)
149
+ unless has_payment_transaction? payment_transaction
150
+ @payment_transactions << payment_transaction
151
+ end
152
+
153
+ unless payment_transaction.payment === self
154
+ payment_transaction.payment = self
155
+ end
156
+ end
157
+
158
+ def has_payment_transaction?(payment_transaction)
159
+ payment_transactions.include? payment_transaction
160
+ end
161
+
162
+ # True, if the payment has a transaction that is currently being processed
163
+ def has_processing_transaction?
164
+ payment_transactions.one? &:processing?
165
+ end
166
+
167
+ def status=(status)
168
+ unless @@allowed_statuses.include? status
169
+ raise ArgumentError, "Unknown payment status given: '#{status}'"
170
+ end
171
+
172
+ @status = status
173
+ end
174
+
175
+ # True, if payment is new
176
+ def new?
177
+ status == STATUS_NEW
178
+ end
179
+
180
+ # True, is payment is paid up
181
+ def paid?
182
+ [STATUS_PREAUTH, STATUS_CAPTURE].include? status
183
+ end
184
+
185
+ # True, if funds returned to customer
186
+ def returned?
187
+ status == STATUS_RETURN
188
+ end
189
+ end
190
+ end
@@ -0,0 +1,188 @@
1
+ require 'payment_data/data'
2
+
3
+ # :KLUDGE: Imenem 22.08.2013
4
+ #
5
+ # Prevent error "Uninitialized constant PaymentTransaction" in Payment
6
+ module PaynetEasy::PaynetEasyApi::PaymentData
7
+ class PaymentTransaction < Data
8
+ end
9
+ end
10
+
11
+ require 'payment_data/payment'
12
+ require 'payment_data/query_config'
13
+
14
+ module PaynetEasy::PaynetEasyApi::PaymentData
15
+ class PaymentTransaction < Data
16
+ # Payment transaction processed by payment query
17
+ PROCESSOR_QUERY = 'query'
18
+
19
+ # Payment transaction processed by PaynetEasy callback
20
+ PROCESSOR_CALLBACK = 'callback'
21
+
22
+ # Payment transaction is new
23
+ STATUS_NEW = 'new'
24
+
25
+ # Payment transaction is now processing
26
+ STATUS_PROCESSING = 'processing'
27
+
28
+ # Payment transaction approved
29
+ STATUS_APPROVED = 'approved'
30
+
31
+ # Payment transaction declined by bank
32
+ STATUS_DECLINED = 'declined'
33
+
34
+ # Payment transaction declined by PaynetEasy filters
35
+ STATUS_FILTERED = 'filtered'
36
+
37
+ #Payment transaction processed with error
38
+ STATUS_ERROR = 'error'
39
+
40
+ # All allowed callback types
41
+ @@allowed_processor_types =
42
+ [
43
+ PROCESSOR_QUERY,
44
+ PROCESSOR_CALLBACK
45
+ ]
46
+
47
+ # All allowed payment transaction statuses
48
+ @@allowed_statuses =
49
+ [
50
+ STATUS_NEW,
51
+ STATUS_PROCESSING,
52
+ STATUS_APPROVED,
53
+ STATUS_DECLINED,
54
+ STATUS_FILTERED,
55
+ STATUS_ERROR
56
+ ]
57
+
58
+ # Payment transaction processor type
59
+ #
60
+ # @var [String]
61
+ attr_accessor :processor_type
62
+
63
+ # Payment transaction processor name
64
+ #
65
+ # @var [String]
66
+ attr_accessor :processor_name
67
+
68
+ # Payment transaction status
69
+ #
70
+ # @var [String]
71
+ attr_accessor :status
72
+
73
+ # Payment transaction payment
74
+ #
75
+ # @var [PaynetEasy::PaynetEasyApi::PaymentData::Payment]
76
+ attr_accessor :payment
77
+
78
+ # Payment transaction query config
79
+ #
80
+ # @var [PaynetEasy::PaynetEasyApi::PaymentData::QueryConfig]
81
+ attr_accessor :query_config
82
+
83
+ # Payment transaction processing errors
84
+ #
85
+ # @var [Array]
86
+ attr_accessor :errors
87
+
88
+ def processor_type=(processor_type)
89
+ unless @@allowed_processor_types.include? processor_type
90
+ raise ArgumentError, "Unknown transaction processor type given: '#{processor_type}'"
91
+ end
92
+
93
+ if @processor_type
94
+ raise RuntimeError, 'You can set payment transaction processor type only once'
95
+ end
96
+
97
+ @processor_type = processor_type
98
+ end
99
+
100
+ def processor_name=(processor_name)
101
+ if @processor_name
102
+ raise RuntimeError, 'You can set payment transaction processor name only once'
103
+ end
104
+
105
+ @processor_name = processor_name
106
+ end
107
+
108
+ def status=(status)
109
+ unless @@allowed_statuses.include? status
110
+ raise ArgumentError, "Unknown transaction status given: '#{status}'"
111
+ end
112
+
113
+ @status = status
114
+ end
115
+
116
+ def status
117
+ @status ||= STATUS_NEW
118
+ end
119
+
120
+ # True, if payment transaction is new
121
+ def new?
122
+ status == STATUS_NEW
123
+ end
124
+
125
+ # True, if payment transaction is now processing
126
+ def processing?
127
+ status == STATUS_PROCESSING
128
+ end
129
+
130
+ # True, if payment transaction approved
131
+ def approved?
132
+ status == STATUS_APPROVED
133
+ end
134
+
135
+ # True, if payment transaction declined or filtered
136
+ def declined?
137
+ [STATUS_DECLINED, STATUS_FILTERED].include? status
138
+ end
139
+
140
+ # True, if error occurred when processing payment transaction by PaynetEasy gateway
141
+ def error?
142
+ status == STATUS_ERROR
143
+ end
144
+
145
+ # True, if payment transaction processing is finished
146
+ def finished?
147
+ !new? && !processing?
148
+ end
149
+
150
+ def payment=(payment)
151
+ @payment = payment
152
+
153
+ unless @payment.has_payment_transaction? self
154
+ @payment.add_payment_transaction self
155
+ end
156
+ end
157
+
158
+ def payment
159
+ @payment ||= Payment.new
160
+ end
161
+
162
+ def query_config=(query_config)
163
+ @query_config = query_config
164
+ end
165
+
166
+ def query_config
167
+ @query_config ||= QueryConfig.new
168
+ end
169
+
170
+ def errors
171
+ @errors ||= []
172
+ end
173
+
174
+ def add_error(error)
175
+ unless errors.include? error
176
+ errors << error
177
+ end
178
+ end
179
+
180
+ def has_errors?
181
+ errors.any?
182
+ end
183
+
184
+ def last_error
185
+ errors.last if has_errors?
186
+ end
187
+ end
188
+ end
@@ -0,0 +1,95 @@
1
+ require 'payment_data/data'
2
+
3
+ module PaynetEasy::PaynetEasyApi::PaymentData
4
+ class QueryConfig < Data
5
+ # Execute query to PaynetEasy sandbox gateway
6
+ GATEWAY_MODE_SANDBOX = 'sandbox'
7
+
8
+ # Execute query to PaynetEasy production gateway
9
+ GATEWAY_MODE_PRODUCTION = 'production'
10
+
11
+ # Allowed gateway modes
12
+ @@allowed_gateway_modes =
13
+ [
14
+ GATEWAY_MODE_SANDBOX,
15
+ GATEWAY_MODE_PRODUCTION
16
+ ]
17
+
18
+ # Merchant end point
19
+ #
20
+ # @var [String]
21
+ attr_accessor :end_point
22
+
23
+ # Merchant login
24
+ #
25
+ # @var [String]
26
+ attr_accessor :login
27
+
28
+ # Merchant key for payment signing
29
+ #
30
+ # @var [String]
31
+ attr_accessor :signing_key
32
+
33
+ # URL the original payment is made from
34
+ #
35
+ # @var [String]
36
+ attr_accessor :site_url
37
+
38
+ # URL the customer will be redirected to upon completion of the transaction
39
+ #
40
+ # @var [String]
41
+ attr_accessor :redirect_url
42
+
43
+ # URL the transaction result will be sent to
44
+ #
45
+ # @var [String]
46
+ attr_accessor :callback_url
47
+
48
+ # PaynetEasy gateway mode: sandbox or production
49
+ #
50
+ # @var [String]
51
+ attr_accessor :gateway_mode
52
+
53
+ # PaynetEasy sandbox gateway URL
54
+ #
55
+ # @var [String]
56
+ attr_accessor :gateway_url_sandbox
57
+
58
+ # PaynetEasy production gateway URL
59
+ #
60
+ # @var [String]
61
+ attr_accessor :gateway_url_production
62
+
63
+ def gateway_mode=(gateway_mode)
64
+ check_gateway_mode gateway_mode
65
+ @gateway_mode = gateway_mode
66
+ end
67
+
68
+ def gateway_mode
69
+ @gateway_mode ||= GATEWAY_MODE_SANDBOX
70
+ end
71
+
72
+ # Get gateway url for current gateway mode
73
+ #
74
+ # @return [String] Sandbox gateway url if gateway mode is sandbox,
75
+ # production gateway url if gateway mode is production
76
+ def gateway_url
77
+ case gateway_mode
78
+ when GATEWAY_MODE_SANDBOX then gateway_url_sandbox
79
+ when GATEWAY_MODE_PRODUCTION then gateway_url_production
80
+ else raise RuntimeError, 'You must set gateway_mode property first'
81
+ end
82
+ end
83
+
84
+ protected
85
+
86
+ # Checks, is gateway mode allowed or not
87
+ #
88
+ # @param gateway_mode [String] Gateway mode to check
89
+ def check_gateway_mode(gateway_mode)
90
+ unless @@allowed_gateway_modes.include? gateway_mode
91
+ raise ArgumentError, "Unknown gateway mode given: '#{gateway_mode}'"
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,40 @@
1
+ require 'payment_data/data'
2
+
3
+ module PaynetEasy::PaynetEasyApi::PaymentData
4
+ class RecurrentCard < Data
5
+ # RecurrentCard reference ID
6
+ #
7
+ # @var [String]
8
+ attr_accessor :paynet_id
9
+
10
+ # RecurrentCard CVV2
11
+ #
12
+ # @var [String]
13
+ attr_accessor :cvv2
14
+
15
+ # Card holder name
16
+ #
17
+ # @var [String]
18
+ attr_accessor :card_printed_name
19
+
20
+ # Card expiration year
21
+ #
22
+ # @var [String]
23
+ attr_accessor :expire_year
24
+
25
+ # Card expiration month
26
+ #
27
+ # @var [String]
28
+ attr_accessor :expire_month
29
+
30
+ # Bank Identification Number
31
+ #
32
+ # @var [String]
33
+ attr_accessor :bin
34
+
35
+ # The last four digits of PAN (card number)
36
+ #
37
+ # @var [String]
38
+ attr_accessor :last_four_digits
39
+ end
40
+ end