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.
- data/.gemtest +0 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +18 -0
- data/README.md +54 -0
- data/Rakefile +8 -0
- data/doc/00-basic-tutorial.md +254 -0
- data/doc/01-library-internals.md +6 -0
- data/doc/02-payment-scenarios.md +9 -0
- data/doc/library-internals/00-payment-data.md +162 -0
- data/doc/library-internals/01-payment-processor.md +163 -0
- data/doc/library-internals/02-validator.md +55 -0
- data/doc/library-internals/03-property-accessor.md +76 -0
- data/doc/payment-scenarios/00-sale-transactions.md +90 -0
- data/doc/payment-scenarios/01-preauth-capture-transactions.md +105 -0
- data/doc/payment-scenarios/02-transfer-transactions.md +89 -0
- data/doc/payment-scenarios/03-return-transactions.md +52 -0
- data/doc/payment-scenarios/04-recurrent-transactions.md +110 -0
- data/doc/payment-scenarios/05-payment-form-integration.md +59 -0
- data/doc/payment-scenarios/06-merchant-callbacks.md +29 -0
- data/example/capture.rb +12 -0
- data/example/common/functions.rb +56 -0
- data/lib/paynet_easy/paynet_easy_api/callback/callback_factory.rb +47 -0
- data/lib/paynet_easy/paynet_easy_api/callback/callback_prototype.rb +186 -0
- data/lib/paynet_easy/paynet_easy_api/callback/customer_return_callback.rb +28 -0
- data/lib/paynet_easy/paynet_easy_api/callback/paynet_easy_callback.rb +44 -0
- data/lib/paynet_easy/paynet_easy_api/error/paynet_error.rb +4 -0
- data/lib/paynet_easy/paynet_easy_api/error/request_error.rb +6 -0
- data/lib/paynet_easy/paynet_easy_api/error/response_error.rb +6 -0
- data/lib/paynet_easy/paynet_easy_api/error/validation_error.rb +6 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/billing_address.rb +41 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/credit_card.rb +32 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/customer.rb +35 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/data.rb +13 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/payment.rb +190 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/payment_transaction.rb +188 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/query_config.rb +95 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/recurrent_card.rb +40 -0
- data/lib/paynet_easy/paynet_easy_api/payment_processor.rb +251 -0
- data/lib/paynet_easy/paynet_easy_api/paynet_easy_api.rb +26 -0
- data/lib/paynet_easy/paynet_easy_api/query/capture_query.rb +30 -0
- data/lib/paynet_easy/paynet_easy_api/query/create_card_ref_query.rb +78 -0
- data/lib/paynet_easy/paynet_easy_api/query/get_card_info_query.rb +49 -0
- data/lib/paynet_easy/paynet_easy_api/query/make_rebill_query.rb +37 -0
- data/lib/paynet_easy/paynet_easy_api/query/preauth_form_query.rb +10 -0
- data/lib/paynet_easy/paynet_easy_api/query/preauth_query.rb +10 -0
- data/lib/paynet_easy/paynet_easy_api/query/prototype/payment_form_query.rb +69 -0
- data/lib/paynet_easy/paynet_easy_api/query/prototype/payment_query.rb +71 -0
- data/lib/paynet_easy/paynet_easy_api/query/prototype/query.rb +302 -0
- data/lib/paynet_easy/paynet_easy_api/query/query_factory.rb +19 -0
- data/lib/paynet_easy/paynet_easy_api/query/return_query.rb +46 -0
- data/lib/paynet_easy/paynet_easy_api/query/sale_form_query.rb +10 -0
- data/lib/paynet_easy/paynet_easy_api/query/sale_query.rb +53 -0
- data/lib/paynet_easy/paynet_easy_api/query/status_query.rb +50 -0
- data/lib/paynet_easy/paynet_easy_api/query/transfer_by_ref_query.rb +41 -0
- data/lib/paynet_easy/paynet_easy_api/query/transfer_form_query.rb +10 -0
- data/lib/paynet_easy/paynet_easy_api/transport/callback_response.rb +21 -0
- data/lib/paynet_easy/paynet_easy_api/transport/gateway_client.rb +91 -0
- data/lib/paynet_easy/paynet_easy_api/transport/request.rb +20 -0
- data/lib/paynet_easy/paynet_easy_api/transport/response.rb +136 -0
- data/lib/paynet_easy/paynet_easy_api/util/property_accessor.rb +60 -0
- data/lib/paynet_easy/paynet_easy_api/util/string.rb +9 -0
- data/lib/paynet_easy/paynet_easy_api/util/validator.rb +110 -0
- data/payneteasy-payneteasyapi.gemspec +16 -0
- data/test/paynet_easy/paynet_easy_api/callback/callback_factory_test.rb +22 -0
- data/test/paynet_easy/paynet_easy_api/callback/callback_test_prototype.rb +168 -0
- data/test/paynet_easy/paynet_easy_api/callback/customer_return_callback_test.rb +95 -0
- data/test/paynet_easy/paynet_easy_api/callback/paynet_easy_callback_test.rb +101 -0
- data/test/paynet_easy/paynet_easy_api/fake.rb +71 -0
- data/test/paynet_easy/paynet_easy_api/payment_processor_test.rb +255 -0
- data/test/paynet_easy/paynet_easy_api/query/capture_query_test.rb +48 -0
- data/test/paynet_easy/paynet_easy_api/query/create_card_ref_query_test.rb +116 -0
- data/test/paynet_easy/paynet_easy_api/query/get_card_info_query_test.rb +116 -0
- data/test/paynet_easy/paynet_easy_api/query/make_rebill_query_test.rb +59 -0
- data/test/paynet_easy/paynet_easy_api/query/prototype/payment_query_test_prototype.rb +117 -0
- data/test/paynet_easy/paynet_easy_api/query/prototype/query_test_prototype.rb +190 -0
- data/test/paynet_easy/paynet_easy_api/query/prototype/sync_query_test_prototype.rb +88 -0
- data/test/paynet_easy/paynet_easy_api/query/query_factory_test.rb +21 -0
- data/test/paynet_easy/paynet_easy_api/query/return_query_test.rb +58 -0
- data/test/paynet_easy/paynet_easy_api/query/sale_form_query_test.rb +96 -0
- data/test/paynet_easy/paynet_easy_api/query/sale_query_test.rb +78 -0
- data/test/paynet_easy/paynet_easy_api/query/status_query_test.rb +81 -0
- data/test/paynet_easy/paynet_easy_api/query/transfer_by_ref_query_test.rb +63 -0
- data/test/paynet_easy/paynet_easy_api/transport/gateway_client_test.rb +22 -0
- data/test/paynet_easy/paynet_easy_api/transport/response_test.rb +26 -0
- data/test/paynet_easy/paynet_easy_api/util/property_accessor_test.rb +52 -0
- data/test/paynet_easy/paynet_easy_api/util/validator_test.rb +42 -0
- metadata +204 -0
|
@@ -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
|