activemerchant 1.77.0 → 1.78.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.
- checksums.yaml +4 -4
- data/CHANGELOG +49 -0
- data/lib/active_merchant/billing/gateways/adyen.rb +75 -29
- data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +1 -1
- data/lib/active_merchant/billing/gateways/blue_snap.rb +3 -8
- data/lib/active_merchant/billing/gateways/card_stream.rb +22 -1
- data/lib/active_merchant/billing/gateways/cenpos.rb +1 -1
- data/lib/active_merchant/billing/gateways/checkout_v2.rb +8 -1
- data/lib/active_merchant/billing/gateways/citrus_pay.rb +0 -1
- data/lib/active_merchant/billing/gateways/dibs.rb +0 -1
- data/lib/active_merchant/billing/gateways/first_pay.rb +0 -1
- data/lib/active_merchant/billing/gateways/global_collect.rb +11 -5
- data/lib/active_merchant/billing/gateways/global_transport.rb +0 -1
- data/lib/active_merchant/billing/gateways/litle.rb +93 -17
- data/lib/active_merchant/billing/gateways/mercado_pago.rb +2 -2
- data/lib/active_merchant/billing/gateways/merchant_warrior.rb +4 -4
- data/lib/active_merchant/billing/gateways/migs.rb +12 -0
- data/lib/active_merchant/billing/gateways/netbilling.rb +0 -1
- data/lib/active_merchant/billing/gateways/ogone.rb +0 -1
- data/lib/active_merchant/billing/gateways/optimal_payment.rb +11 -0
- data/lib/active_merchant/billing/gateways/orbital.rb +5 -3
- data/lib/active_merchant/billing/gateways/payeezy.rb +14 -24
- data/lib/active_merchant/billing/gateways/payflow.rb +15 -1
- data/lib/active_merchant/billing/gateways/paymentez.rb +21 -11
- data/lib/active_merchant/billing/gateways/paystation.rb +4 -1
- data/lib/active_merchant/billing/gateways/payu_latam.rb +7 -7
- data/lib/active_merchant/billing/gateways/psigate.rb +1 -1
- data/lib/active_merchant/billing/gateways/redsys.rb +5 -0
- data/lib/active_merchant/billing/gateways/secure_net.rb +11 -1
- data/lib/active_merchant/billing/gateways/spreedly_core.rb +12 -1
- data/lib/active_merchant/billing/gateways/stripe.rb +17 -6
- data/lib/active_merchant/billing/gateways/tns.rb +0 -1
- data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +39 -21
- data/lib/active_merchant/billing/gateways/worldpay.rb +1 -1
- data/lib/active_merchant/billing/gateways/worldpay_us.rb +12 -0
- data/lib/active_merchant/version.rb +1 -1
- data/lib/certs/cacert.pem +25 -0
- metadata +2 -2
@@ -9,7 +9,6 @@ module ActiveMerchant #:nodoc:
|
|
9
9
|
self.supported_countries = %w(CA PR US)
|
10
10
|
self.default_currency = 'USD'
|
11
11
|
self.supported_cardtypes = [:visa, :master, :american_express, :discover, :diners_club, :jcb]
|
12
|
-
self.ssl_version = :TLSv1
|
13
12
|
|
14
13
|
self.homepage_url = 'https://www.globalpaymentsinc.com'
|
15
14
|
self.display_name = 'Global Transport'
|
@@ -23,23 +23,33 @@ module ActiveMerchant #:nodoc:
|
|
23
23
|
def purchase(money, payment_method, options={})
|
24
24
|
request = build_xml_request do |doc|
|
25
25
|
add_authentication(doc)
|
26
|
-
|
27
|
-
|
26
|
+
if check?(payment_method)
|
27
|
+
doc.echeckSale(transaction_attributes(options)) do
|
28
|
+
add_echeck_purchase_params(doc, money, payment_method, options)
|
29
|
+
end
|
30
|
+
else
|
31
|
+
doc.sale(transaction_attributes(options)) do
|
32
|
+
add_auth_purchase_params(doc, money, payment_method, options)
|
33
|
+
end
|
28
34
|
end
|
29
35
|
end
|
30
|
-
|
31
|
-
commit(:sale, request, money)
|
36
|
+
check?(payment_method) ? commit(:echeckSales, request, money) : commit(:sale, request, money)
|
32
37
|
end
|
33
38
|
|
34
39
|
def authorize(money, payment_method, options={})
|
35
40
|
request = build_xml_request do |doc|
|
36
41
|
add_authentication(doc)
|
37
|
-
|
38
|
-
|
42
|
+
if check?(payment_method)
|
43
|
+
doc.echeckVerification(transaction_attributes(options)) do
|
44
|
+
add_echeck_purchase_params(doc, money, payment_method, options)
|
45
|
+
end
|
46
|
+
else
|
47
|
+
doc.authorization(transaction_attributes(options)) do
|
48
|
+
add_auth_purchase_params(doc, money, payment_method, options)
|
49
|
+
end
|
39
50
|
end
|
40
51
|
end
|
41
|
-
|
42
|
-
commit(:authorization, request, money)
|
52
|
+
check?(payment_method) ? commit(:echeckVerification, request, money) : commit(:authorization, request, money)
|
43
53
|
end
|
44
54
|
|
45
55
|
def capture(money, authorization, options={})
|
@@ -62,19 +72,24 @@ module ActiveMerchant #:nodoc:
|
|
62
72
|
refund(money, authorization, options)
|
63
73
|
end
|
64
74
|
|
65
|
-
def refund(money,
|
66
|
-
transaction_id, _, _ = split_authorization(authorization)
|
67
|
-
|
75
|
+
def refund(money, payment, options={})
|
68
76
|
request = build_xml_request do |doc|
|
69
77
|
add_authentication(doc)
|
70
78
|
add_descriptor(doc, options)
|
71
|
-
doc.
|
72
|
-
|
73
|
-
|
79
|
+
doc.send(refund_type(payment), transaction_attributes(options)) do
|
80
|
+
if payment.is_a?(String)
|
81
|
+
transaction_id, kind, _ = split_authorization(payment)
|
82
|
+
doc.litleTxnId(transaction_id)
|
83
|
+
doc.amount(money) if money
|
84
|
+
elsif check?(payment)
|
85
|
+
add_echeck_purchase_params(doc, money, payment, options)
|
86
|
+
else
|
87
|
+
add_auth_purchase_params(doc, money, payment, options)
|
88
|
+
end
|
74
89
|
end
|
75
90
|
end
|
76
91
|
|
77
|
-
commit(
|
92
|
+
commit(refund_type(payment), request)
|
78
93
|
end
|
79
94
|
|
80
95
|
def verify(creditcard, options = {})
|
@@ -105,6 +120,11 @@ module ActiveMerchant #:nodoc:
|
|
105
120
|
doc.orderId(truncate(options[:order_id], 24))
|
106
121
|
if payment_method.is_a?(String)
|
107
122
|
doc.paypageRegistrationId(payment_method)
|
123
|
+
elsif check?(payment_method)
|
124
|
+
doc.echeckForToken do
|
125
|
+
doc.accNum(payment_method.account_number)
|
126
|
+
doc.routingNum(payment_method.routing_number)
|
127
|
+
end
|
108
128
|
else
|
109
129
|
doc.accountNumber(payment_method.number)
|
110
130
|
doc.cardValidationNum(payment_method.verification_value) if payment_method.verification_value
|
@@ -124,6 +144,8 @@ module ActiveMerchant #:nodoc:
|
|
124
144
|
gsub(%r((<user>).+(</user>)), '\1[FILTERED]\2').
|
125
145
|
gsub(%r((<password>).+(</password>)), '\1[FILTERED]\2').
|
126
146
|
gsub(%r((<number>).+(</number>)), '\1[FILTERED]\2').
|
147
|
+
gsub(%r((<accNum>).+(</accNum>)), '\1[FILTERED]\2').
|
148
|
+
gsub(%r((<routingNum>).+(</routingNum>)), '\1[FILTERED]\2').
|
127
149
|
gsub(%r((<cardValidationNum>).+(</cardValidationNum>)), '\1[FILTERED]\2').
|
128
150
|
gsub(%r((<accountNumber>).+(</accountNumber>)), '\1[FILTERED]\2').
|
129
151
|
gsub(%r((<paypageRegistrationId>).+(</paypageRegistrationId>)), '\1[FILTERED]\2').
|
@@ -131,6 +153,7 @@ module ActiveMerchant #:nodoc:
|
|
131
153
|
end
|
132
154
|
|
133
155
|
private
|
156
|
+
|
134
157
|
CARD_TYPE = {
|
135
158
|
'visa' => 'VI',
|
136
159
|
'master' => 'MC',
|
@@ -159,7 +182,27 @@ module ActiveMerchant #:nodoc:
|
|
159
182
|
}
|
160
183
|
|
161
184
|
def void_type(kind)
|
162
|
-
|
185
|
+
if kind == 'authorization'
|
186
|
+
:authReversal
|
187
|
+
elsif kind == 'echeckSales'
|
188
|
+
:echeckVoid
|
189
|
+
else
|
190
|
+
:void
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
def refund_type(payment)
|
195
|
+
transaction_id, kind, _ = split_authorization(payment)
|
196
|
+
if check?(payment) || kind == 'echeckSales'
|
197
|
+
:echeckCredit
|
198
|
+
else
|
199
|
+
:credit
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
def check?(payment_method)
|
204
|
+
return false if payment_method.is_a?(String)
|
205
|
+
card_brand(payment_method) == 'check'
|
163
206
|
end
|
164
207
|
|
165
208
|
def add_authentication(doc)
|
@@ -178,9 +221,29 @@ module ActiveMerchant #:nodoc:
|
|
178
221
|
add_payment_method(doc, payment_method, options)
|
179
222
|
add_pos(doc, payment_method)
|
180
223
|
add_descriptor(doc, options)
|
224
|
+
add_merchant_data(doc, options)
|
181
225
|
add_debt_repayment(doc, options)
|
182
226
|
end
|
183
227
|
|
228
|
+
def add_merchant_data(doc, options={})
|
229
|
+
if options[:affiliate] || options[:campaign] || options[:merchant_grouping_id]
|
230
|
+
doc.merchantData do
|
231
|
+
doc.affiliate(options[:affiliate]) if options[:affiliate]
|
232
|
+
doc.campaign(options[:campaign]) if options[:campaign]
|
233
|
+
doc.merchantGroupingId(options[:merchant_grouping_id]) if options[:merchant_grouping_id]
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
def add_echeck_purchase_params(doc, money, payment_method, options)
|
239
|
+
doc.orderId(truncate(options[:order_id], 24))
|
240
|
+
doc.amount(money)
|
241
|
+
add_order_source(doc, payment_method, options)
|
242
|
+
add_billing_address(doc, payment_method, options)
|
243
|
+
add_payment_method(doc, payment_method, options)
|
244
|
+
add_descriptor(doc, options)
|
245
|
+
end
|
246
|
+
|
184
247
|
def add_descriptor(doc, options)
|
185
248
|
if options[:descriptor_name] || options[:descriptor_phone]
|
186
249
|
doc.customBilling do
|
@@ -203,6 +266,13 @@ module ActiveMerchant #:nodoc:
|
|
203
266
|
doc.card do
|
204
267
|
doc.track(payment_method.track_data)
|
205
268
|
end
|
269
|
+
elsif check?(payment_method)
|
270
|
+
doc.echeck do
|
271
|
+
doc.accType(payment_method.account_type)
|
272
|
+
doc.accNum(payment_method.account_number)
|
273
|
+
doc.routingNum(payment_method.routing_number)
|
274
|
+
doc.checkNum(payment_method.number)
|
275
|
+
end
|
206
276
|
else
|
207
277
|
doc.card do
|
208
278
|
doc.type_(CARD_TYPE[payment_method.brand])
|
@@ -227,7 +297,13 @@ module ActiveMerchant #:nodoc:
|
|
227
297
|
return if payment_method.is_a?(String)
|
228
298
|
|
229
299
|
doc.billToAddress do
|
230
|
-
|
300
|
+
if check?(payment_method)
|
301
|
+
doc.name(payment_method.name)
|
302
|
+
doc.firstName(payment_method.first_name)
|
303
|
+
doc.lastName(payment_method.last_name)
|
304
|
+
else
|
305
|
+
doc.name(payment_method.name)
|
306
|
+
end
|
231
307
|
doc.email(options[:email]) if options[:email]
|
232
308
|
|
233
309
|
add_address(doc, options[:billing_address])
|
@@ -102,7 +102,7 @@ module ActiveMerchant #:nodoc:
|
|
102
102
|
add_additional_data(post, options)
|
103
103
|
add_customer_data(post, payment, options)
|
104
104
|
add_address(post, options)
|
105
|
-
post[:binary_mode] = true
|
105
|
+
post[:binary_mode] = (options[:binary_mode].nil? ? true : options[:binary_mode])
|
106
106
|
post
|
107
107
|
end
|
108
108
|
|
@@ -210,7 +210,7 @@ module ActiveMerchant #:nodoc:
|
|
210
210
|
if action == "refund"
|
211
211
|
response["error"].nil?
|
212
212
|
else
|
213
|
-
["active", "approved", "authorized", "cancelled"].include?(response["status"])
|
213
|
+
["active", "approved", "authorized", "cancelled", "in_process"].include?(response["status"])
|
214
214
|
end
|
215
215
|
end
|
216
216
|
|
@@ -79,13 +79,13 @@ module ActiveMerchant #:nodoc:
|
|
79
79
|
|
80
80
|
post['customerName'] = scrub_name(address[:name])
|
81
81
|
post['customerCountry'] = address[:country]
|
82
|
-
post['customerState'] = address[:state]
|
82
|
+
post['customerState'] = address[:state] || 'N/A'
|
83
83
|
post['customerCity'] = address[:city]
|
84
84
|
post['customerAddress'] = address[:address1]
|
85
85
|
post['customerPostCode'] = address[:zip]
|
86
|
-
|
87
|
-
|
88
|
-
|
86
|
+
post['customerIP'] = address[:ip]
|
87
|
+
post['customerPhone'] = address[:phone]
|
88
|
+
post['customerEmail'] = address[:email]
|
89
89
|
end
|
90
90
|
|
91
91
|
def add_order_id(post, options)
|
@@ -206,6 +206,18 @@ module ActiveMerchant #:nodoc:
|
|
206
206
|
@options[:login].start_with?('TEST')
|
207
207
|
end
|
208
208
|
|
209
|
+
def supports_scrubbing?
|
210
|
+
true
|
211
|
+
end
|
212
|
+
|
213
|
+
def scrub(transcript)
|
214
|
+
transcript.
|
215
|
+
gsub(%r((&?CardNum=)\d*(&?)), '\1[FILTERED]\2').
|
216
|
+
gsub(%r((&?CardSecurityCode=)\d*(&?)), '\1[FILTERED]\2').
|
217
|
+
gsub(%r((&?AccessCode=)[^&]*(&?)), '\1[FILTERED]\2').
|
218
|
+
gsub(%r((&?Password=)[^&]*(&?)), '\1[FILTERED]\2')
|
219
|
+
end
|
220
|
+
|
209
221
|
private
|
210
222
|
|
211
223
|
def add_amount(post, money, options)
|
@@ -31,7 +31,6 @@ module ActiveMerchant #:nodoc:
|
|
31
31
|
self.display_name = 'NETbilling'
|
32
32
|
self.homepage_url = 'http://www.netbilling.com'
|
33
33
|
self.supported_countries = ['US']
|
34
|
-
self.ssl_version = :TLSv1
|
35
34
|
self.supported_cardtypes = [:visa, :master, :american_express, :discover, :jcb, :diners_club]
|
36
35
|
|
37
36
|
def initialize(options = {})
|
@@ -59,6 +59,17 @@ module ActiveMerchant #:nodoc:
|
|
59
59
|
commit('ccSettlement', money, options)
|
60
60
|
end
|
61
61
|
|
62
|
+
def supports_scrubbing?
|
63
|
+
true
|
64
|
+
end
|
65
|
+
|
66
|
+
def scrub(transcript)
|
67
|
+
transcript.
|
68
|
+
gsub(%r((%3CstorePwd%3E).*(%3C(%2F|/)storePwd%3E))i, '\1[FILTERED]\2').
|
69
|
+
gsub(%r((%3CcardNum%3E)\d*(%3C(%2F|/)cardNum%3E))i, '\1[FILTERED]\2').
|
70
|
+
gsub(%r((%3Ccvd%3E)\d*(%3C(%2F|/)cvd%3E))i, '\1[FILTERED]\2')
|
71
|
+
end
|
72
|
+
|
62
73
|
private
|
63
74
|
|
64
75
|
def parse_card_or_auth(card_or_auth, options)
|
@@ -306,8 +306,10 @@ module ActiveMerchant #:nodoc:
|
|
306
306
|
gsub(%r((<OrbitalConnectionUsername>).+(</OrbitalConnectionUsername>)), '\1[FILTERED]\2').
|
307
307
|
gsub(%r((<OrbitalConnectionPassword>).+(</OrbitalConnectionPassword>)), '\1[FILTERED]\2').
|
308
308
|
gsub(%r((<AccountNum>).+(</AccountNum>)), '\1[FILTERED]\2').
|
309
|
+
gsub(%r((<CCAccountNum>).+(</CCAccountNum>)), '\1[FILTERED]\2').
|
309
310
|
gsub(%r((<CardSecVal>).+(</CardSecVal>)), '\1[FILTERED]\2').
|
310
|
-
gsub(%r((<MerchantID>).+(</MerchantID>)), '\1[FILTERED]\2')
|
311
|
+
gsub(%r((<MerchantID>).+(</MerchantID>)), '\1[FILTERED]\2').
|
312
|
+
gsub(%r((<CustomerMerchantID>).+(</CustomerMerchantID>)), '\1[FILTERED]\2')
|
311
313
|
end
|
312
314
|
|
313
315
|
private
|
@@ -356,8 +358,8 @@ module ActiveMerchant #:nodoc:
|
|
356
358
|
|
357
359
|
def add_level_2_tax(xml, options={})
|
358
360
|
if (level_2 = options[:level_2_data])
|
359
|
-
xml.tag! :TaxInd, level_2[:tax_indicator] if [TAX_NOT_PROVIDED, TAX_INCLUDED, NON_TAXABLE_TRANSACTION].include?(level_2[:tax_indicator])
|
360
|
-
xml.tag! :Tax,
|
361
|
+
xml.tag! :TaxInd, level_2[:tax_indicator] if [TAX_NOT_PROVIDED, TAX_INCLUDED, NON_TAXABLE_TRANSACTION].include?(level_2[:tax_indicator].to_i)
|
362
|
+
xml.tag! :Tax, level_2[:tax].to_i if level_2[:tax]
|
361
363
|
end
|
362
364
|
end
|
363
365
|
|
@@ -74,7 +74,7 @@ module ActiveMerchant
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def store(payment_method, options = {})
|
77
|
-
params = {}
|
77
|
+
params = {transaction_type: 'store'}
|
78
78
|
|
79
79
|
add_creditcard_for_tokenization(params, payment_method, options)
|
80
80
|
|
@@ -131,25 +131,19 @@ module ActiveMerchant
|
|
131
131
|
transaction_id, transaction_tag, method, _ = authorization.split('|')
|
132
132
|
params[:transaction_id] = transaction_id
|
133
133
|
params[:transaction_tag] = transaction_tag
|
134
|
-
params[:method] = method
|
134
|
+
params[:method] = (method == 'token') ? 'credit_card' : method
|
135
135
|
end
|
136
136
|
|
137
137
|
def add_creditcard_for_tokenization(params, payment_method, options)
|
138
138
|
params[:apikey] = @options[:apikey]
|
139
|
-
params[:js_security_key] = options[:js_security_key]
|
140
139
|
params[:ta_token] = options[:ta_token]
|
141
|
-
params[:callback] = 'Payeezy.callback'
|
142
140
|
params[:type] = 'FDToken'
|
143
|
-
|
144
|
-
params[
|
145
|
-
params['credit_card.cardholder_name'] = card[:cardholder_name]
|
146
|
-
params['credit_card.card_number'] = card[:card_number]
|
147
|
-
params['credit_card.exp_date'] = card[:exp_date]
|
148
|
-
params['credit_card.cvv'] = card[:cvv]
|
141
|
+
params[:credit_card] = add_card_data(payment_method)
|
142
|
+
params[:auth] = 'false'
|
149
143
|
end
|
150
144
|
|
151
145
|
def is_store_action?(params)
|
152
|
-
params[:
|
146
|
+
params[:transaction_type] == 'store'
|
153
147
|
end
|
154
148
|
|
155
149
|
def add_payment_method(params, payment_method, options)
|
@@ -277,18 +271,12 @@ module ActiveMerchant
|
|
277
271
|
end
|
278
272
|
|
279
273
|
def endpoint(params)
|
280
|
-
is_store_action?(params) ? '/
|
274
|
+
is_store_action?(params) ? '/transactions/tokens' : '/transactions'
|
281
275
|
end
|
282
276
|
|
283
277
|
def api_request(url, params)
|
284
|
-
|
285
|
-
|
286
|
-
payload = callback[/{(?:\n|.)*}/]
|
287
|
-
parse(payload)
|
288
|
-
else
|
289
|
-
body = params.to_json
|
290
|
-
parse(ssl_post(url, body, headers(body)))
|
291
|
-
end
|
278
|
+
body = params.to_json
|
279
|
+
parse(ssl_post(url, body, headers(body)))
|
292
280
|
end
|
293
281
|
|
294
282
|
def post_data(params)
|
@@ -331,6 +319,8 @@ module ActiveMerchant
|
|
331
319
|
response['transaction_status'] == 'approved'
|
332
320
|
elsif response['results']
|
333
321
|
response['results']['status'] == 'success'
|
322
|
+
elsif response['status']
|
323
|
+
response['status'] == 'success'
|
334
324
|
else
|
335
325
|
false
|
336
326
|
end
|
@@ -360,10 +350,10 @@ module ActiveMerchant
|
|
360
350
|
if is_store_action?(params)
|
361
351
|
if success_from(response)
|
362
352
|
[
|
363
|
-
response['
|
364
|
-
response['
|
365
|
-
response['
|
366
|
-
response['
|
353
|
+
response['token']['type'],
|
354
|
+
response['token']['cardholder_name'],
|
355
|
+
response['token']['exp_date'],
|
356
|
+
response['token']['value']
|
367
357
|
].join('|')
|
368
358
|
else
|
369
359
|
nil
|
@@ -100,8 +100,20 @@ module ActiveMerchant #:nodoc:
|
|
100
100
|
@express ||= PayflowExpressGateway.new(@options)
|
101
101
|
end
|
102
102
|
|
103
|
+
def supports_scrubbing?
|
104
|
+
true
|
105
|
+
end
|
106
|
+
|
107
|
+
def scrub(transcript)
|
108
|
+
transcript.
|
109
|
+
gsub(%r((<CardNum>)[^<]*(</CardNum>)), '\1[FILTERED]\2').
|
110
|
+
gsub(%r((<CVNum>)[^<]*(</CVNum>)), '\1[FILTERED]\2').
|
111
|
+
gsub(%r((<AcctNum>)[^<]*(</AcctNum>)), '\1[FILTERED]\2').
|
112
|
+
gsub(%r((<Password>)[^<]*(</Password>)), '\1[FILTERED]\2')
|
113
|
+
end
|
103
114
|
|
104
115
|
private
|
116
|
+
|
105
117
|
def build_sale_or_authorization_request(action, money, funding_source, options)
|
106
118
|
if funding_source.is_a?(String)
|
107
119
|
build_reference_sale_or_authorization_request(action, money, funding_source, options)
|
@@ -121,6 +133,7 @@ module ActiveMerchant #:nodoc:
|
|
121
133
|
xml.tag! 'CustIP', options[:ip] unless options[:ip].blank?
|
122
134
|
xml.tag! 'InvNum', options[:order_id].to_s.gsub(/[^\w.]/, '') unless options[:order_id].blank?
|
123
135
|
xml.tag! 'Description', options[:description] unless options[:description].blank?
|
136
|
+
xml.tag! 'OrderDesc', options[:order_desc] unless options[:order_desc].blank?
|
124
137
|
xml.tag! 'Comment', options[:comment] unless options[:comment].blank?
|
125
138
|
xml.tag!('ExtData', 'Name'=> 'COMMENT2', 'Value'=> options[:comment2]) unless options[:comment2].blank?
|
126
139
|
xml.tag! 'TaxAmt', options[:taxamt] unless options[:taxamt].blank?
|
@@ -152,6 +165,7 @@ module ActiveMerchant #:nodoc:
|
|
152
165
|
xml.tag! 'CustIP', options[:ip] unless options[:ip].blank?
|
153
166
|
xml.tag! 'InvNum', options[:order_id].to_s.gsub(/[^\w.]/, '') unless options[:order_id].blank?
|
154
167
|
xml.tag! 'Description', options[:description] unless options[:description].blank?
|
168
|
+
xml.tag! 'OrderDesc', options[:order_desc] unless options[:order_desc].blank?
|
155
169
|
# Comment and Comment2 will show up in manager.paypal.com as Comment1 and Comment2
|
156
170
|
xml.tag! 'Comment', options[:comment] unless options[:comment].blank?
|
157
171
|
xml.tag!('ExtData', 'Name'=> 'COMMENT2', 'Value'=> options[:comment2]) unless options[:comment2].blank?
|
@@ -184,6 +198,7 @@ module ActiveMerchant #:nodoc:
|
|
184
198
|
xml.tag! 'CustIP', options[:ip] unless options[:ip].blank?
|
185
199
|
xml.tag! 'InvNum', options[:order_id].to_s.gsub(/[^\w.]/, '') unless options[:order_id].blank?
|
186
200
|
xml.tag! 'Description', options[:description] unless options[:description].blank?
|
201
|
+
xml.tag! 'OrderDesc', options[:order_desc] unless options[:order_desc].blank?
|
187
202
|
xml.tag! 'BillTo' do
|
188
203
|
xml.tag! 'Name', check.name
|
189
204
|
end
|
@@ -332,4 +347,3 @@ module ActiveMerchant #:nodoc:
|
|
332
347
|
end
|
333
348
|
end
|
334
349
|
end
|
335
|
-
|
@@ -52,8 +52,9 @@ module ActiveMerchant #:nodoc:
|
|
52
52
|
add_invoice(post, money, options)
|
53
53
|
add_payment(post, payment)
|
54
54
|
add_customer_data(post, options)
|
55
|
+
action = payment.is_a?(String) ? 'debit' : 'debit_cc'
|
55
56
|
|
56
|
-
commit_transaction(
|
57
|
+
commit_transaction(action, post)
|
57
58
|
end
|
58
59
|
|
59
60
|
def authorize(money, payment, options = {})
|
@@ -62,10 +63,15 @@ module ActiveMerchant #:nodoc:
|
|
62
63
|
add_invoice(post, money, options)
|
63
64
|
add_customer_data(post, options)
|
64
65
|
|
65
|
-
|
66
|
-
|
67
|
-
post
|
68
|
-
|
66
|
+
if payment.is_a?(String)
|
67
|
+
post[:card] = { token: payment }
|
68
|
+
commit_transaction('authorize', post)
|
69
|
+
else
|
70
|
+
MultiResponse.run do |r|
|
71
|
+
r.process { store(payment, options) }
|
72
|
+
post[:card] = { token: r.authorization }
|
73
|
+
r.process { commit_transaction('authorize', post) }
|
74
|
+
end
|
69
75
|
end
|
70
76
|
end
|
71
77
|
|
@@ -148,12 +154,16 @@ module ActiveMerchant #:nodoc:
|
|
148
154
|
|
149
155
|
def add_payment(post, payment)
|
150
156
|
post[:card] ||= {}
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
+
if payment.is_a?(String)
|
158
|
+
post[:card][:token] = payment
|
159
|
+
else
|
160
|
+
post[:card][:number] = payment.number
|
161
|
+
post[:card][:holder_name] = payment.name
|
162
|
+
post[:card][:expiry_month] = payment.month
|
163
|
+
post[:card][:expiry_year] = payment.year
|
164
|
+
post[:card][:cvc] = payment.verification_value
|
165
|
+
post[:card][:type] = CARD_MAPPING[payment.brand]
|
166
|
+
end
|
157
167
|
end
|
158
168
|
|
159
169
|
def parse(body)
|