activemerchant 1.133.0 → 1.137.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +240 -0
- data/lib/active_merchant/billing/check.rb +2 -2
- data/lib/active_merchant/billing/compatibility.rb +4 -4
- data/lib/active_merchant/billing/credit_card.rb +11 -8
- data/lib/active_merchant/billing/credit_card_formatting.rb +4 -0
- data/lib/active_merchant/billing/credit_card_methods.rb +59 -6
- data/lib/active_merchant/billing/gateway.rb +9 -0
- data/lib/active_merchant/billing/gateways/adyen.rb +162 -43
- data/lib/active_merchant/billing/gateways/airwallex.rb +26 -12
- data/lib/active_merchant/billing/gateways/alelo.rb +23 -5
- data/lib/active_merchant/billing/gateways/authorize_net.rb +43 -35
- data/lib/active_merchant/billing/gateways/authorize_net_arb.rb +10 -6
- data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +1 -3
- data/lib/active_merchant/billing/gateways/axcessms.rb +6 -2
- data/lib/active_merchant/billing/gateways/banwire.rb +4 -2
- data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +7 -3
- data/lib/active_merchant/billing/gateways/blue_pay.rb +13 -5
- data/lib/active_merchant/billing/gateways/blue_snap.rb +5 -5
- data/lib/active_merchant/billing/gateways/braintree/token_nonce.rb +65 -20
- data/lib/active_merchant/billing/gateways/braintree_blue.rb +226 -73
- data/lib/active_merchant/billing/gateways/braintree_orange.rb +1 -1
- data/lib/active_merchant/billing/gateways/card_connect.rb +5 -2
- data/lib/active_merchant/billing/gateways/card_stream.rb +4 -6
- data/lib/active_merchant/billing/gateways/cashnet.rb +1 -1
- data/lib/active_merchant/billing/gateways/cecabank/cecabank_common.rb +36 -0
- data/lib/active_merchant/billing/gateways/cecabank/cecabank_json.rb +316 -0
- data/lib/active_merchant/billing/gateways/cecabank/cecabank_xml.rb +220 -0
- data/lib/active_merchant/billing/gateways/cecabank.rb +7 -240
- data/lib/active_merchant/billing/gateways/checkout_v2.rb +238 -34
- data/lib/active_merchant/billing/gateways/commerce_hub.rb +63 -6
- data/lib/active_merchant/billing/gateways/credorax.rb +3 -5
- data/lib/active_merchant/billing/gateways/cyber_source.rb +185 -47
- data/lib/active_merchant/billing/gateways/cyber_source_rest.rb +102 -58
- data/lib/active_merchant/billing/gateways/d_local.rb +26 -15
- data/lib/active_merchant/billing/gateways/data_cash.rb +21 -17
- data/lib/active_merchant/billing/gateways/datatrans.rb +279 -0
- data/lib/active_merchant/billing/gateways/decidir.rb +53 -18
- data/lib/active_merchant/billing/gateways/decidir_plus.rb +4 -1
- data/lib/active_merchant/billing/gateways/deepstack.rb +382 -0
- data/lib/active_merchant/billing/gateways/ebanx.rb +40 -36
- data/lib/active_merchant/billing/gateways/efsnet.rb +6 -2
- data/lib/active_merchant/billing/gateways/elavon.rb +99 -33
- data/lib/active_merchant/billing/gateways/element.rb +36 -7
- data/lib/active_merchant/billing/gateways/epay.rb +6 -2
- data/lib/active_merchant/billing/gateways/evo_ca.rb +6 -2
- data/lib/active_merchant/billing/gateways/eway.rb +4 -2
- data/lib/active_merchant/billing/gateways/eway_managed.rb +6 -2
- data/lib/active_merchant/billing/gateways/exact.rb +6 -2
- data/lib/active_merchant/billing/gateways/fat_zebra.rb +31 -3
- data/lib/active_merchant/billing/gateways/federated_canada.rb +6 -2
- data/lib/active_merchant/billing/gateways/first_pay/first_pay_common.rb +15 -0
- data/lib/active_merchant/billing/gateways/first_pay/first_pay_json.rb +190 -0
- data/lib/active_merchant/billing/gateways/first_pay/first_pay_xml.rb +183 -0
- data/lib/active_merchant/billing/gateways/first_pay.rb +6 -172
- data/lib/active_merchant/billing/gateways/firstdata_e4.rb +6 -2
- data/lib/active_merchant/billing/gateways/firstdata_e4_v27.rb +7 -3
- data/lib/active_merchant/billing/gateways/flex_charge.rb +347 -0
- data/lib/active_merchant/billing/gateways/garanti.rb +4 -2
- data/lib/active_merchant/billing/gateways/global_collect.rb +45 -37
- data/lib/active_merchant/billing/gateways/hi_pay.rb +286 -0
- data/lib/active_merchant/billing/gateways/hps.rb +1 -1
- data/lib/active_merchant/billing/gateways/iats_payments.rb +7 -2
- data/lib/active_merchant/billing/gateways/inspire.rb +6 -4
- data/lib/active_merchant/billing/gateways/instapay.rb +7 -4
- data/lib/active_merchant/billing/gateways/ipg.rb +9 -5
- data/lib/active_merchant/billing/gateways/iridium.rb +15 -5
- data/lib/active_merchant/billing/gateways/itransact.rb +6 -2
- data/lib/active_merchant/billing/gateways/iveri.rb +3 -3
- data/lib/active_merchant/billing/gateways/ixopay.rb +2 -2
- data/lib/active_merchant/billing/gateways/jetpay.rb +4 -2
- data/lib/active_merchant/billing/gateways/jetpay_v2.rb +4 -2
- data/lib/active_merchant/billing/gateways/kushki.rb +72 -12
- data/lib/active_merchant/billing/gateways/linkpoint.rb +6 -2
- data/lib/active_merchant/billing/gateways/litle.rb +33 -50
- data/lib/active_merchant/billing/gateways/mastercard.rb +4 -4
- data/lib/active_merchant/billing/gateways/maxipago.rb +2 -2
- data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +8 -5
- data/lib/active_merchant/billing/gateways/merchant_ware.rb +11 -4
- data/lib/active_merchant/billing/gateways/merchant_ware_version_four.rb +11 -4
- data/lib/active_merchant/billing/gateways/merchant_warrior.rb +19 -3
- data/lib/active_merchant/billing/gateways/mercury.rb +6 -2
- data/lib/active_merchant/billing/gateways/metrics_global.rb +8 -6
- data/lib/active_merchant/billing/gateways/migs/migs_codes.rb +1 -0
- data/lib/active_merchant/billing/gateways/migs.rb +6 -2
- data/lib/active_merchant/billing/gateways/mit.rb +8 -3
- data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +18 -10
- data/lib/active_merchant/billing/gateways/monei.rb +1 -1
- data/lib/active_merchant/billing/gateways/moneris.rb +9 -3
- data/lib/active_merchant/billing/gateways/money_movers.rb +6 -2
- data/lib/active_merchant/billing/gateways/nab_transact.rb +12 -4
- data/lib/active_merchant/billing/gateways/net_registry.rb +6 -2
- data/lib/active_merchant/billing/gateways/netbanx.rb +1 -3
- data/lib/active_merchant/billing/gateways/netbilling.rb +6 -2
- data/lib/active_merchant/billing/gateways/network_merchants.rb +6 -2
- data/lib/active_merchant/billing/gateways/nmi.rb +18 -6
- data/lib/active_merchant/billing/gateways/ogone.rb +6 -2
- data/lib/active_merchant/billing/gateways/openpay.rb +4 -2
- data/lib/active_merchant/billing/gateways/opp.rb +1 -2
- data/lib/active_merchant/billing/gateways/optimal_payment.rb +6 -2
- data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +1 -3
- data/lib/active_merchant/billing/gateways/orbital.rb +83 -24
- data/lib/active_merchant/billing/gateways/pac_net_raven.rb +7 -4
- data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +6 -2
- data/lib/active_merchant/billing/gateways/pay_hub.rb +4 -2
- data/lib/active_merchant/billing/gateways/pay_junction.rb +6 -2
- data/lib/active_merchant/billing/gateways/pay_secure.rb +6 -2
- data/lib/active_merchant/billing/gateways/pay_trace.rb +31 -18
- data/lib/active_merchant/billing/gateways/payeezy.rb +19 -8
- data/lib/active_merchant/billing/gateways/payex.rb +4 -2
- data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +1 -1
- data/lib/active_merchant/billing/gateways/payflow.rb +1 -3
- data/lib/active_merchant/billing/gateways/payment_express.rb +8 -4
- data/lib/active_merchant/billing/gateways/paymentez.rb +23 -11
- data/lib/active_merchant/billing/gateways/paysafe.rb +12 -11
- data/lib/active_merchant/billing/gateways/payscout.rb +7 -4
- data/lib/active_merchant/billing/gateways/paystation.rb +7 -3
- data/lib/active_merchant/billing/gateways/payway.rb +6 -2
- data/lib/active_merchant/billing/gateways/payway_dot_com.rb +2 -2
- data/lib/active_merchant/billing/gateways/pin.rb +22 -4
- data/lib/active_merchant/billing/gateways/plexo.rb +49 -10
- data/lib/active_merchant/billing/gateways/plugnpay.rb +6 -2
- data/lib/active_merchant/billing/gateways/priority.rb +6 -5
- data/lib/active_merchant/billing/gateways/psigate.rb +6 -2
- data/lib/active_merchant/billing/gateways/psl_card.rb +6 -2
- data/lib/active_merchant/billing/gateways/qbms.rb +6 -2
- data/lib/active_merchant/billing/gateways/quantum.rb +6 -2
- data/lib/active_merchant/billing/gateways/quickbooks.rb +6 -5
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_v10.rb +7 -4
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_v4to7.rb +6 -2
- data/lib/active_merchant/billing/gateways/rapyd.rb +148 -46
- data/lib/active_merchant/billing/gateways/reach.rb +11 -4
- data/lib/active_merchant/billing/gateways/redsys.rb +2 -10
- data/lib/active_merchant/billing/gateways/redsys_rest.rb +507 -0
- data/lib/active_merchant/billing/gateways/s5.rb +3 -3
- data/lib/active_merchant/billing/gateways/safe_charge.rb +36 -16
- data/lib/active_merchant/billing/gateways/sage.rb +12 -4
- data/lib/active_merchant/billing/gateways/sage_pay.rb +79 -5
- data/lib/active_merchant/billing/gateways/sallie_mae.rb +6 -2
- data/lib/active_merchant/billing/gateways/secure_net.rb +6 -2
- data/lib/active_merchant/billing/gateways/secure_pay.rb +8 -6
- data/lib/active_merchant/billing/gateways/secure_pay_au.rb +12 -4
- data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +6 -2
- data/lib/active_merchant/billing/gateways/securion_pay.rb +24 -10
- data/lib/active_merchant/billing/gateways/shift4.rb +17 -20
- data/lib/active_merchant/billing/gateways/shift4_v2.rb +117 -0
- data/lib/active_merchant/billing/gateways/simetrik.rb +17 -11
- data/lib/active_merchant/billing/gateways/skip_jack.rb +6 -2
- data/lib/active_merchant/billing/gateways/smart_ps.rb +7 -4
- data/lib/active_merchant/billing/gateways/so_easy_pay.rb +4 -2
- data/lib/active_merchant/billing/gateways/spreedly_core.rb +2 -4
- data/lib/active_merchant/billing/gateways/stripe.rb +53 -21
- data/lib/active_merchant/billing/gateways/stripe_payment_intents.rb +199 -50
- data/lib/active_merchant/billing/gateways/sum_up.rb +223 -0
- data/lib/active_merchant/billing/gateways/swipe_checkout.rb +4 -2
- data/lib/active_merchant/billing/gateways/telr.rb +3 -4
- data/lib/active_merchant/billing/gateways/trans_first.rb +1 -2
- data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +8 -16
- data/lib/active_merchant/billing/gateways/transact_pro.rb +1 -1
- data/lib/active_merchant/billing/gateways/trust_commerce.rb +6 -2
- data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +9 -8
- data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +6 -2
- data/lib/active_merchant/billing/gateways/vanco.rb +2 -4
- data/lib/active_merchant/billing/gateways/vantiv_express.rb +587 -0
- data/lib/active_merchant/billing/gateways/verifi.rb +6 -2
- data/lib/active_merchant/billing/gateways/viaklix.rb +6 -2
- data/lib/active_merchant/billing/gateways/visanet_peru.rb +2 -2
- data/lib/active_merchant/billing/gateways/vpos.rb +3 -3
- data/lib/active_merchant/billing/gateways/wirecard.rb +7 -3
- data/lib/active_merchant/billing/gateways/wompi.rb +5 -0
- data/lib/active_merchant/billing/gateways/worldpay.rb +140 -73
- data/lib/active_merchant/billing/gateways/worldpay_online_payments.rb +13 -10
- data/lib/active_merchant/billing/gateways/xpay.rb +242 -0
- data/lib/active_merchant/billing/network_tokenization_credit_card.rb +1 -1
- data/lib/active_merchant/billing/response.rb +2 -2
- data/lib/active_merchant/connection.rb +3 -17
- data/lib/active_merchant/country.rb +1 -0
- data/lib/active_merchant/errors.rb +10 -0
- data/lib/active_merchant/version.rb +1 -1
- data/lib/support/gateway_support.rb +2 -2
- data/lib/support/ssl_verify.rb +4 -4
- data/lib/support/ssl_version.rb +6 -6
- metadata +30 -9
@@ -34,6 +34,7 @@ module ActiveMerchant #:nodoc:
|
|
34
34
|
public_key: public_key
|
35
35
|
}
|
36
36
|
add_invoice(post, money, options)
|
37
|
+
add_tip_in_cents(post, options)
|
37
38
|
add_card(post, payment, options)
|
38
39
|
|
39
40
|
commit('sale', post, '/transactions_sync')
|
@@ -141,6 +142,10 @@ module ActiveMerchant #:nodoc:
|
|
141
142
|
post[:cvc] = cvc if cvc && !cvc.empty?
|
142
143
|
end
|
143
144
|
|
145
|
+
def add_tip_in_cents(post, options)
|
146
|
+
post[:tip_in_cents] = options[:tip_in_cents].to_i if options[:tip_in_cents]
|
147
|
+
end
|
148
|
+
|
144
149
|
def parse(body)
|
145
150
|
JSON.parse(body)
|
146
151
|
end
|
@@ -38,14 +38,14 @@ module ActiveMerchant #:nodoc:
|
|
38
38
|
'G' => 'C', # Address does not match, postcode not checked
|
39
39
|
'H' => 'I', # Address and postcode not provided
|
40
40
|
'I' => 'C', # Address not checked postcode does not match
|
41
|
-
'J' => 'C'
|
41
|
+
'J' => 'C' # Address and postcode does not match
|
42
42
|
}
|
43
43
|
|
44
44
|
CVC_CODE_MAP = {
|
45
45
|
'A' => 'M', # CVV matches
|
46
46
|
'B' => 'P', # Not provided
|
47
47
|
'C' => 'P', # Not checked
|
48
|
-
'D' => 'N'
|
48
|
+
'D' => 'N' # Does not match
|
49
49
|
}
|
50
50
|
|
51
51
|
def initialize(options = {})
|
@@ -62,7 +62,7 @@ module ActiveMerchant #:nodoc:
|
|
62
62
|
|
63
63
|
def authorize(money, payment_method, options = {})
|
64
64
|
requires!(options, :order_id)
|
65
|
-
payment_details = payment_details(payment_method)
|
65
|
+
payment_details = payment_details(payment_method, options)
|
66
66
|
authorize_request(money, payment_method, payment_details.merge(options))
|
67
67
|
end
|
68
68
|
|
@@ -108,9 +108,11 @@ module ActiveMerchant #:nodoc:
|
|
108
108
|
# and other transactions should be performed on a normal eCom-flagged
|
109
109
|
# merchant ID.
|
110
110
|
def credit(money, payment_method, options = {})
|
111
|
-
payment_details = payment_details(payment_method)
|
111
|
+
payment_details = payment_details(payment_method, options)
|
112
112
|
if options[:fast_fund_credit]
|
113
113
|
fast_fund_credit_request(money, payment_method, payment_details.merge(credit: true, **options))
|
114
|
+
elsif options[:account_funding_transaction]
|
115
|
+
aft_request(money, payment_method, payment_details.merge(**options))
|
114
116
|
else
|
115
117
|
credit_request(money, payment_method, payment_details.merge(credit: true, **options))
|
116
118
|
end
|
@@ -148,11 +150,20 @@ module ActiveMerchant #:nodoc:
|
|
148
150
|
gsub(%r((<cardNumber>)\d+(</cardNumber>)), '\1[FILTERED]\2').
|
149
151
|
gsub(%r((<cvc>)[^<]+(</cvc>)), '\1[FILTERED]\2').
|
150
152
|
gsub(%r((<tokenNumber>)\d+(</tokenNumber>)), '\1[FILTERED]\2').
|
151
|
-
gsub(%r((<cryptogram>)[^<]+(</cryptogram>)), '\1[FILTERED]\2')
|
153
|
+
gsub(%r((<cryptogram>)[^<]+(</cryptogram>)), '\1[FILTERED]\2').
|
154
|
+
gsub(%r((<accountReference accountType="\w+">)\d+(<\/accountReference>)), '\1[FILTERED]\2')
|
152
155
|
end
|
153
156
|
|
154
157
|
private
|
155
158
|
|
159
|
+
def eci_value(payment_method, options)
|
160
|
+
eci = payment_method.respond_to?(:eci) ? format(payment_method.eci, :two_digits) : ''
|
161
|
+
|
162
|
+
return eci unless eci.empty?
|
163
|
+
|
164
|
+
options[:use_default_eci] ? '07' : eci
|
165
|
+
end
|
166
|
+
|
156
167
|
def authorize_request(money, payment_method, options)
|
157
168
|
commit('authorize', build_authorization_request(money, payment_method, options), 'AUTHORISED', 'CAPTURED', options)
|
158
169
|
end
|
@@ -181,6 +192,10 @@ module ActiveMerchant #:nodoc:
|
|
181
192
|
commit('fast_credit', build_fast_fund_credit_request(money, payment_method, options), :ok, 'PUSH_APPROVED', options)
|
182
193
|
end
|
183
194
|
|
195
|
+
def aft_request(money, payment_method, options)
|
196
|
+
commit('funding_transfer_transaction', build_aft_request(money, payment_method, options), :ok, 'AUTHORISED', options)
|
197
|
+
end
|
198
|
+
|
184
199
|
def store_request(credit_card, options)
|
185
200
|
commit('store', build_store_request(credit_card, options), options)
|
186
201
|
end
|
@@ -252,9 +267,8 @@ module ActiveMerchant #:nodoc:
|
|
252
267
|
xml.invoiceReferenceNumber data[:invoice_reference_number] if data.include?(:invoice_reference_number)
|
253
268
|
xml.customerReference data[:customer_reference] if data.include?(:customer_reference)
|
254
269
|
xml.cardAcceptorTaxId data[:card_acceptor_tax_id] if data.include?(:card_acceptor_tax_id)
|
255
|
-
|
256
270
|
{
|
257
|
-
|
271
|
+
tax_amount: 'salesTax',
|
258
272
|
discount_amount: 'discountAmount',
|
259
273
|
shipping_amount: 'shippingAmount',
|
260
274
|
duty_amount: 'dutyAmount'
|
@@ -262,53 +276,37 @@ module ActiveMerchant #:nodoc:
|
|
262
276
|
next unless data.include?(key)
|
263
277
|
|
264
278
|
xml.tag! tag do
|
265
|
-
|
266
|
-
add_amount(xml, data_amount[:amount].to_i, data_amount)
|
279
|
+
add_amount(xml, data[key].to_i, data)
|
267
280
|
end
|
268
281
|
end
|
269
282
|
|
270
|
-
xml.discountName data[:discount_name] if data.include?(:discount_name)
|
271
|
-
xml.discountCode data[:discount_code] if data.include?(:discount_code)
|
272
|
-
|
273
|
-
add_date_element(xml, 'shippingDate', data[:shipping_date]) if data.include?(:shipping_date)
|
274
|
-
|
275
|
-
if data.include?(:shipping_courier)
|
276
|
-
xml.shippingCourier(
|
277
|
-
data[:shipping_courier][:priority],
|
278
|
-
data[:shipping_courier][:tracking_number],
|
279
|
-
data[:shipping_courier][:name]
|
280
|
-
)
|
281
|
-
end
|
282
|
-
|
283
283
|
add_optional_data_level_two_and_three(xml, data)
|
284
284
|
|
285
|
-
|
286
|
-
data[:item].each { |item| add_items_into_level_three_data(xml, item.symbolize_keys) }
|
287
|
-
elsif data.include?(:item)
|
288
|
-
add_items_into_level_three_data(xml, data[:item].symbolize_keys)
|
289
|
-
end
|
285
|
+
data[:line_items].each { |item| add_line_items_into_level_three_data(xml, item.symbolize_keys, data) } if data.include?(:line_items)
|
290
286
|
end
|
291
287
|
|
292
|
-
def
|
288
|
+
def add_line_items_into_level_three_data(xml, item, data)
|
293
289
|
xml.item do
|
294
290
|
xml.description item[:description] if item[:description]
|
295
291
|
xml.productCode item[:product_code] if item[:product_code]
|
296
292
|
xml.commodityCode item[:commodity_code] if item[:commodity_code]
|
297
293
|
xml.quantity item[:quantity] if item[:quantity]
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
294
|
+
xml.unitCost do
|
295
|
+
add_amount(xml, item[:unit_cost], data)
|
296
|
+
end
|
297
|
+
xml.unitOfMeasure item[:unit_of_measure] || 'each'
|
298
|
+
xml.itemTotal do
|
299
|
+
sub_total_amount = item[:quantity].to_i * (item[:unit_cost].to_i - item[:discount_amount].to_i)
|
300
|
+
add_amount(xml, sub_total_amount, data)
|
301
|
+
end
|
302
|
+
xml.itemTotalWithTax do
|
303
|
+
add_amount(xml, item[:total_amount], data)
|
304
|
+
end
|
305
|
+
xml.itemDiscountAmount do
|
306
|
+
add_amount(xml, item[:discount_amount], data)
|
307
|
+
end
|
308
|
+
xml.taxAmount do
|
309
|
+
add_amount(xml, item[:tax_amount], data)
|
312
310
|
end
|
313
311
|
end
|
314
312
|
end
|
@@ -318,7 +316,7 @@ module ActiveMerchant #:nodoc:
|
|
318
316
|
xml.destinationPostalCode data[:destination_postal_code] if data.include?(:destination_postal_code)
|
319
317
|
xml.destinationCountryCode data[:destination_country_code] if data.include?(:destination_country_code)
|
320
318
|
add_date_element(xml, 'orderDate', data[:order_date].symbolize_keys) if data.include?(:order_date)
|
321
|
-
xml.taxExempt data[:
|
319
|
+
xml.taxExempt data[:tax_amount].to_i > 0 ? 'false' : 'true'
|
322
320
|
end
|
323
321
|
|
324
322
|
def order_tag_attributes(options)
|
@@ -409,6 +407,66 @@ module ActiveMerchant #:nodoc:
|
|
409
407
|
end
|
410
408
|
end
|
411
409
|
|
410
|
+
def build_aft_request(money, payment_method, options)
|
411
|
+
build_request do |xml|
|
412
|
+
xml.submit do
|
413
|
+
xml.order order_tag_attributes(options) do
|
414
|
+
xml.description(options[:description].blank? ? 'Account Funding Transaction' : options[:description])
|
415
|
+
add_amount(xml, money, options)
|
416
|
+
add_order_content(xml, options)
|
417
|
+
add_payment_method(xml, money, payment_method, options)
|
418
|
+
add_shopper(xml, options)
|
419
|
+
add_sub_merchant_data(xml, options[:sub_merchant_data]) if options[:sub_merchant_data]
|
420
|
+
add_aft_data(xml, payment_method, options)
|
421
|
+
end
|
422
|
+
end
|
423
|
+
end
|
424
|
+
end
|
425
|
+
|
426
|
+
def add_aft_data(xml, payment_method, options)
|
427
|
+
xml.fundingTransfer 'type' => options[:aft_type], 'category' => 'PULL_FROM_CARD' do
|
428
|
+
xml.paymentPurpose options[:aft_payment_purpose] # Must be included for the recipient for following countries, otherwise optional: Argentina, Bangladesh, Chile, Columbia, Jordan, Mexico, Thailand, UAE, India cross-border
|
429
|
+
xml.fundingParty 'type' => 'sender' do
|
430
|
+
xml.accountReference options[:aft_sender_account_reference], 'accountType' => options[:aft_sender_account_type]
|
431
|
+
xml.fullName do
|
432
|
+
xml.first options.dig(:aft_sender_full_name, :first)
|
433
|
+
xml.middle options.dig(:aft_sender_full_name, :middle)
|
434
|
+
xml.last options.dig(:aft_sender_full_name, :last)
|
435
|
+
end
|
436
|
+
xml.fundingAddress do
|
437
|
+
xml.address1 options.dig(:aft_sender_funding_address, :address1)
|
438
|
+
xml.address2 options.dig(:aft_sender_funding_address, :address2)
|
439
|
+
xml.postalCode options.dig(:aft_sender_funding_address, :postal_code)
|
440
|
+
xml.city options.dig(:aft_sender_funding_address, :city)
|
441
|
+
xml.state options.dig(:aft_sender_funding_address, :state)
|
442
|
+
xml.countryCode options.dig(:aft_sender_funding_address, :country_code)
|
443
|
+
end
|
444
|
+
end
|
445
|
+
xml.fundingParty 'type' => 'recipient' do
|
446
|
+
xml.accountReference options[:aft_recipient_account_reference], 'accountType' => options[:aft_recipient_account_type]
|
447
|
+
xml.fullName do
|
448
|
+
xml.first options.dig(:aft_recipient_full_name, :first)
|
449
|
+
xml.middle options.dig(:aft_recipient_full_name, :middle)
|
450
|
+
xml.last options.dig(:aft_recipient_full_name, :last)
|
451
|
+
end
|
452
|
+
xml.fundingAddress do
|
453
|
+
xml.address1 options.dig(:aft_recipient_funding_address, :address1)
|
454
|
+
xml.address2 options.dig(:aft_recipient_funding_address, :address2)
|
455
|
+
xml.postalCode options.dig(:aft_recipient_funding_address, :postal_code)
|
456
|
+
xml.city options.dig(:aft_recipient_funding_address, :city)
|
457
|
+
xml.state options.dig(:aft_recipient_funding_address, :state)
|
458
|
+
xml.countryCode options.dig(:aft_recipient_funding_address, :country_code)
|
459
|
+
end
|
460
|
+
if options[:aft_recipient_funding_data]
|
461
|
+
xml.fundingData do
|
462
|
+
add_date_element(xml, 'birthDate', options[:aft_recipient_funding_data][:birth_date])
|
463
|
+
xml.telephoneNumber options.dig(:aft_recipient_funding_data, :telephone_number)
|
464
|
+
end
|
465
|
+
end
|
466
|
+
end
|
467
|
+
end
|
468
|
+
end
|
469
|
+
|
412
470
|
def add_payment_details_for_ff_credit(xml, payment_method, options)
|
413
471
|
xml.paymentDetails do
|
414
472
|
xml.tag! 'FF_DISBURSE-SSL' do
|
@@ -443,7 +501,7 @@ module ActiveMerchant #:nodoc:
|
|
443
501
|
end
|
444
502
|
|
445
503
|
def add_additional_3ds_data(xml, options)
|
446
|
-
additional_data = { 'dfReferenceId' => options[:
|
504
|
+
additional_data = { 'dfReferenceId' => options[:df_reference_id] }
|
447
505
|
additional_data['challengeWindowSize'] = options[:browser_size] if options[:browser_size]
|
448
506
|
|
449
507
|
xml.additional3DSData additional_data
|
@@ -554,10 +612,10 @@ module ActiveMerchant #:nodoc:
|
|
554
612
|
end
|
555
613
|
|
556
614
|
def add_amount(xml, money, options)
|
557
|
-
currency = options[:currency] || currency(money)
|
615
|
+
currency = options[:currency] || currency(money.to_i)
|
558
616
|
|
559
617
|
amount_hash = {
|
560
|
-
:value => localized_amount(money, currency),
|
618
|
+
:value => localized_amount(money.to_i, currency),
|
561
619
|
'currencyCode' => currency,
|
562
620
|
'exponent' => currency_exponent(currency)
|
563
621
|
}
|
@@ -572,7 +630,7 @@ module ActiveMerchant #:nodoc:
|
|
572
630
|
when :pay_as_order
|
573
631
|
add_amount_for_pay_as_order(xml, amount, payment_method, options)
|
574
632
|
when :network_token
|
575
|
-
add_network_tokenization_card(xml, payment_method)
|
633
|
+
add_network_tokenization_card(xml, payment_method, options)
|
576
634
|
else
|
577
635
|
add_card_or_token(xml, payment_method, options)
|
578
636
|
end
|
@@ -590,8 +648,9 @@ module ActiveMerchant #:nodoc:
|
|
590
648
|
end
|
591
649
|
end
|
592
650
|
|
593
|
-
def add_network_tokenization_card(xml, payment_method)
|
594
|
-
|
651
|
+
def add_network_tokenization_card(xml, payment_method, options)
|
652
|
+
source = payment_method.respond_to?(:source) ? payment_method.source : options[:wallet_type]
|
653
|
+
token_type = NETWORK_TOKEN_TYPE.fetch(source, 'NETWORKTOKEN')
|
595
654
|
|
596
655
|
xml.paymentDetails do
|
597
656
|
xml.tag! 'EMVCO_TOKEN-SSL', 'type' => token_type do
|
@@ -603,11 +662,12 @@ module ActiveMerchant #:nodoc:
|
|
603
662
|
)
|
604
663
|
end
|
605
664
|
name = card_holder_name(payment_method, options)
|
606
|
-
eci = format(payment_method.eci, :two_digits)
|
607
665
|
xml.cardHolderName name if name.present?
|
608
|
-
xml.cryptogram payment_method.payment_cryptogram
|
609
|
-
|
666
|
+
xml.cryptogram payment_method.payment_cryptogram unless options[:wallet_type] == :google_pay
|
667
|
+
eci = eci_value(payment_method, options)
|
668
|
+
xml.eciIndicator eci if eci.present?
|
610
669
|
end
|
670
|
+
add_stored_credential_options(xml, options)
|
611
671
|
end
|
612
672
|
end
|
613
673
|
|
@@ -684,30 +744,27 @@ module ActiveMerchant #:nodoc:
|
|
684
744
|
end
|
685
745
|
|
686
746
|
def add_stored_credential_using_normalized_fields(xml, options)
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
xml.
|
697
|
-
xml.schemeTransactionIdentifier options[:stored_credential][:network_transaction_id] if options[:stored_credential][:network_transaction_id]
|
698
|
-
end
|
747
|
+
reason = case options[:stored_credential][:reason_type]
|
748
|
+
when 'installment' then 'INSTALMENT'
|
749
|
+
when 'recurring' then 'RECURRING'
|
750
|
+
when 'unscheduled' then 'UNSCHEDULED'
|
751
|
+
end
|
752
|
+
is_initial_transaction = options[:stored_credential][:initial_transaction]
|
753
|
+
stored_credential_params = generate_stored_credential_params(is_initial_transaction, reason)
|
754
|
+
|
755
|
+
xml.storedCredentials stored_credential_params do
|
756
|
+
xml.schemeTransactionIdentifier network_transaction_id(options) if network_transaction_id(options) && !is_initial_transaction
|
699
757
|
end
|
700
758
|
end
|
701
759
|
|
702
760
|
def add_stored_credential_using_gateway_specific_fields(xml, options)
|
703
761
|
return unless options[:stored_credential_usage]
|
704
762
|
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
xml.storedCredentials 'usage' => options[:stored_credential_usage]
|
763
|
+
is_initial_transaction = options[:stored_credential_usage] == 'FIRST'
|
764
|
+
stored_credential_params = generate_stored_credential_params(is_initial_transaction, options[:stored_credential_initiated_reason])
|
765
|
+
|
766
|
+
xml.storedCredentials stored_credential_params do
|
767
|
+
xml.schemeTransactionIdentifier options[:stored_credential_transaction_id] if options[:stored_credential_transaction_id] && !is_initial_transaction
|
711
768
|
end
|
712
769
|
end
|
713
770
|
|
@@ -832,7 +889,8 @@ module ActiveMerchant #:nodoc:
|
|
832
889
|
|
833
890
|
# ensure cookie included on follow-up '3ds' and 'capture_request' calls, using the cookie saved from the preceding response
|
834
891
|
# cookie should be present in options on the 3ds and capture calls, but also still saved in the instance var in case
|
835
|
-
cookie =
|
892
|
+
cookie = defined?(@cookie) ? @cookie : nil
|
893
|
+
cookie = options[:cookie] || cookie
|
836
894
|
headers['Cookie'] = cookie if cookie
|
837
895
|
|
838
896
|
headers['Idempotency-Key'] = idempotency_key if idempotency_key
|
@@ -977,12 +1035,12 @@ module ActiveMerchant #:nodoc:
|
|
977
1035
|
token_details
|
978
1036
|
end
|
979
1037
|
|
980
|
-
def payment_details(payment_method)
|
1038
|
+
def payment_details(payment_method, options = {})
|
981
1039
|
case payment_method
|
982
1040
|
when String
|
983
1041
|
token_type_and_details(payment_method)
|
984
1042
|
else
|
985
|
-
type = network_token?(payment_method) ? :network_token : :credit
|
1043
|
+
type = network_token?(payment_method) || options[:wallet_type] == :google_pay ? :network_token : :credit
|
986
1044
|
|
987
1045
|
{ payment_type: type }
|
988
1046
|
end
|
@@ -1026,6 +1084,15 @@ module ActiveMerchant #:nodoc:
|
|
1026
1084
|
def card_holder_name(payment_method, options)
|
1027
1085
|
test? && options[:execute_threed] && !options[:three_ds_version]&.start_with?('2') ? '3D' : payment_method.name
|
1028
1086
|
end
|
1087
|
+
|
1088
|
+
def generate_stored_credential_params(is_initial_transaction, reason = nil)
|
1089
|
+
customer_or_merchant = reason == 'RECURRING' && is_initial_transaction ? 'customerInitiatedReason' : 'merchantInitiatedReason'
|
1090
|
+
|
1091
|
+
stored_credential_params = {}
|
1092
|
+
stored_credential_params['usage'] = is_initial_transaction ? 'FIRST' : 'USED'
|
1093
|
+
stored_credential_params[customer_or_merchant] = reason if reason
|
1094
|
+
stored_credential_params
|
1095
|
+
end
|
1029
1096
|
end
|
1030
1097
|
end
|
1031
1098
|
end
|
@@ -34,14 +34,16 @@ module ActiveMerchant #:nodoc:
|
|
34
34
|
if authorization
|
35
35
|
commit(:post, "orders/#{CGI.escape(authorization)}/capture", { 'captureAmount' => money }, options, 'capture')
|
36
36
|
else
|
37
|
-
Response.new(
|
37
|
+
Response.new(
|
38
|
+
false,
|
38
39
|
'FAILED',
|
39
40
|
'FAILED',
|
40
41
|
test: test?,
|
41
42
|
authorization: false,
|
42
43
|
avs_result: {},
|
43
44
|
cvv_result: {},
|
44
|
-
error_code: false
|
45
|
+
error_code: false
|
46
|
+
)
|
45
47
|
end
|
46
48
|
end
|
47
49
|
|
@@ -84,8 +86,7 @@ module ActiveMerchant #:nodoc:
|
|
84
86
|
},
|
85
87
|
'clientKey' => @client_key
|
86
88
|
}
|
87
|
-
|
88
|
-
token_response
|
89
|
+
commit(:post, 'tokens', obj, { 'Authorization' => @service_key }, 'token')
|
89
90
|
end
|
90
91
|
|
91
92
|
def create_post_for_auth_or_purchase(token, money, options)
|
@@ -134,7 +135,10 @@ module ActiveMerchant #:nodoc:
|
|
134
135
|
|
135
136
|
raw_response = ssl_request(method, self.live_url + url, json, headers(options))
|
136
137
|
|
137
|
-
if raw_response
|
138
|
+
if raw_response == ''
|
139
|
+
success = true
|
140
|
+
response = {}
|
141
|
+
else
|
138
142
|
response = parse(raw_response)
|
139
143
|
if type == 'token'
|
140
144
|
success = response.key?('token')
|
@@ -151,9 +155,6 @@ module ActiveMerchant #:nodoc:
|
|
151
155
|
end
|
152
156
|
end
|
153
157
|
end
|
154
|
-
else
|
155
|
-
success = true
|
156
|
-
response = {}
|
157
158
|
end
|
158
159
|
rescue ResponseError => e
|
159
160
|
raw_response = e.response.body
|
@@ -170,14 +171,16 @@ module ActiveMerchant #:nodoc:
|
|
170
171
|
authorization = response['message']
|
171
172
|
end
|
172
173
|
|
173
|
-
Response.new(
|
174
|
+
Response.new(
|
175
|
+
success,
|
174
176
|
success ? 'SUCCESS' : response['message'],
|
175
177
|
response,
|
176
178
|
test: test?,
|
177
179
|
authorization: authorization,
|
178
180
|
avs_result: {},
|
179
181
|
cvv_result: {},
|
180
|
-
error_code: success ? nil : response['customCode']
|
182
|
+
error_code: success ? nil : response['customCode']
|
183
|
+
)
|
181
184
|
end
|
182
185
|
|
183
186
|
def test?
|