activemerchant 1.105.0 → 1.106.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 +31 -1
- data/README.md +1 -1
- data/lib/active_merchant/billing/credit_card_methods.rb +12 -3
- data/lib/active_merchant/billing/gateway.rb +22 -22
- data/lib/active_merchant/billing/gateways/adyen.rb +17 -6
- data/lib/active_merchant/billing/gateways/allied_wallet.rb +2 -2
- data/lib/active_merchant/billing/gateways/authorize_net.rb +19 -19
- data/lib/active_merchant/billing/gateways/authorize_net_arb.rb +11 -11
- data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +35 -35
- data/lib/active_merchant/billing/gateways/axcessms.rb +3 -3
- data/lib/active_merchant/billing/gateways/bambora_apac.rb +1 -1
- data/lib/active_merchant/billing/gateways/bank_frick.rb +1 -1
- data/lib/active_merchant/billing/gateways/banwire.rb +2 -2
- data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +5 -5
- data/lib/active_merchant/billing/gateways/be2bill.rb +4 -4
- data/lib/active_merchant/billing/gateways/beanstream.rb +1 -1
- data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +27 -27
- data/lib/active_merchant/billing/gateways/beanstream_interac.rb +1 -1
- data/lib/active_merchant/billing/gateways/blue_pay.rb +8 -8
- data/lib/active_merchant/billing/gateways/blue_snap.rb +5 -2
- data/lib/active_merchant/billing/gateways/bogus.rb +20 -20
- data/lib/active_merchant/billing/gateways/borgun.rb +2 -2
- data/lib/active_merchant/billing/gateways/bpoint.rb +1 -1
- data/lib/active_merchant/billing/gateways/braintree_blue.rb +74 -74
- data/lib/active_merchant/billing/gateways/bridge_pay.rb +3 -3
- data/lib/active_merchant/billing/gateways/card_connect.rb +1 -1
- data/lib/active_merchant/billing/gateways/card_stream.rb +19 -19
- data/lib/active_merchant/billing/gateways/cc5.rb +7 -7
- data/lib/active_merchant/billing/gateways/cecabank.rb +3 -3
- data/lib/active_merchant/billing/gateways/cenpos.rb +3 -3
- data/lib/active_merchant/billing/gateways/checkout_v2.rb +1 -1
- data/lib/active_merchant/billing/gateways/clearhaus.rb +1 -1
- data/lib/active_merchant/billing/gateways/commercegate.rb +2 -2
- data/lib/active_merchant/billing/gateways/conekta.rb +1 -1
- data/lib/active_merchant/billing/gateways/creditcall.rb +4 -4
- data/lib/active_merchant/billing/gateways/ct_payment.rb +1 -1
- data/lib/active_merchant/billing/gateways/culqi.rb +2 -2
- data/lib/active_merchant/billing/gateways/cyber_source.rb +86 -72
- data/lib/active_merchant/billing/gateways/data_cash.rb +33 -33
- data/lib/active_merchant/billing/gateways/decidir.rb +2 -2
- data/lib/active_merchant/billing/gateways/ebanx.rb +1 -1
- data/lib/active_merchant/billing/gateways/efsnet.rb +23 -23
- data/lib/active_merchant/billing/gateways/elavon.rb +13 -13
- data/lib/active_merchant/billing/gateways/epay.rb +40 -40
- data/lib/active_merchant/billing/gateways/evo_ca.rb +11 -11
- data/lib/active_merchant/billing/gateways/eway.rb +3 -3
- data/lib/active_merchant/billing/gateways/eway_managed.rb +40 -40
- data/lib/active_merchant/billing/gateways/eway_rapid.rb +7 -7
- data/lib/active_merchant/billing/gateways/exact.rb +11 -11
- data/lib/active_merchant/billing/gateways/fat_zebra.rb +3 -2
- data/lib/active_merchant/billing/gateways/federated_canada.rb +5 -5
- data/lib/active_merchant/billing/gateways/firstdata_e4.rb +20 -20
- data/lib/active_merchant/billing/gateways/firstdata_e4_v27.rb +19 -19
- data/lib/active_merchant/billing/gateways/flo2cash.rb +4 -4
- data/lib/active_merchant/billing/gateways/forte.rb +1 -1
- data/lib/active_merchant/billing/gateways/garanti.rb +8 -8
- data/lib/active_merchant/billing/gateways/hdfc.rb +3 -3
- data/lib/active_merchant/billing/gateways/hps.rb +1 -1
- data/lib/active_merchant/billing/gateways/iats_payments.rb +1 -1
- data/lib/active_merchant/billing/gateways/inspire.rb +7 -7
- data/lib/active_merchant/billing/gateways/instapay.rb +3 -3
- data/lib/active_merchant/billing/gateways/ipp.rb +1 -1
- data/lib/active_merchant/billing/gateways/iridium.rb +8 -8
- data/lib/active_merchant/billing/gateways/itransact.rb +7 -7
- data/lib/active_merchant/billing/gateways/iveri.rb +2 -2
- data/lib/active_merchant/billing/gateways/ixopay.rb +21 -0
- data/lib/active_merchant/billing/gateways/jetpay.rb +4 -4
- data/lib/active_merchant/billing/gateways/jetpay_v2.rb +5 -5
- data/lib/active_merchant/billing/gateways/latitude19.rb +2 -2
- data/lib/active_merchant/billing/gateways/linkpoint.rb +62 -62
- data/lib/active_merchant/billing/gateways/litle.rb +2 -2
- data/lib/active_merchant/billing/gateways/mastercard.rb +2 -2
- data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +5 -5
- data/lib/active_merchant/billing/gateways/merchant_one.rb +2 -2
- data/lib/active_merchant/billing/gateways/merchant_partners.rb +4 -4
- data/lib/active_merchant/billing/gateways/merchant_ware.rb +12 -12
- data/lib/active_merchant/billing/gateways/merchant_ware_version_four.rb +11 -11
- data/lib/active_merchant/billing/gateways/merchant_warrior.rb +12 -2
- data/lib/active_merchant/billing/gateways/mercury.rb +9 -9
- data/lib/active_merchant/billing/gateways/metrics_global.rb +15 -15
- data/lib/active_merchant/billing/gateways/migs.rb +13 -13
- data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +7 -7
- data/lib/active_merchant/billing/gateways/monei.rb +19 -19
- data/lib/active_merchant/billing/gateways/moneris.rb +10 -10
- data/lib/active_merchant/billing/gateways/money_movers.rb +5 -5
- data/lib/active_merchant/billing/gateways/mundipagg.rb +1 -1
- data/lib/active_merchant/billing/gateways/nab_transact.rb +15 -15
- data/lib/active_merchant/billing/gateways/ncr_secure_pay.rb +1 -1
- data/lib/active_merchant/billing/gateways/net_registry.rb +6 -6
- data/lib/active_merchant/billing/gateways/netaxept.rb +4 -4
- data/lib/active_merchant/billing/gateways/netbanx.rb +14 -14
- data/lib/active_merchant/billing/gateways/netbilling.rb +12 -12
- data/lib/active_merchant/billing/gateways/netpay.rb +2 -2
- data/lib/active_merchant/billing/gateways/network_merchants.rb +5 -5
- data/lib/active_merchant/billing/gateways/ogone.rb +7 -7
- data/lib/active_merchant/billing/gateways/openpay.rb +2 -2
- data/lib/active_merchant/billing/gateways/opp.rb +1 -1
- data/lib/active_merchant/billing/gateways/optimal_payment.rb +9 -9
- data/lib/active_merchant/billing/gateways/orbital.rb +10 -10
- data/lib/active_merchant/billing/gateways/pac_net_raven.rb +7 -7
- data/lib/active_merchant/billing/gateways/pay_conex.rb +2 -2
- data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +16 -16
- data/lib/active_merchant/billing/gateways/pay_junction.rb +16 -16
- data/lib/active_merchant/billing/gateways/pay_junction_v2.rb +18 -2
- data/lib/active_merchant/billing/gateways/pay_secure.rb +6 -6
- data/lib/active_merchant/billing/gateways/paybox_direct.rb +36 -36
- data/lib/active_merchant/billing/gateways/payflow.rb +7 -7
- data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +12 -12
- data/lib/active_merchant/billing/gateways/payflow_express.rb +4 -4
- data/lib/active_merchant/billing/gateways/payment_express.rb +7 -7
- data/lib/active_merchant/billing/gateways/paymill.rb +3 -3
- data/lib/active_merchant/billing/gateways/paypal.rb +1 -1
- data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +5 -5
- data/lib/active_merchant/billing/gateways/paypal_express_common.rb +1 -1
- data/lib/active_merchant/billing/gateways/payscout.rb +5 -5
- data/lib/active_merchant/billing/gateways/paystation.rb +2 -2
- data/lib/active_merchant/billing/gateways/payu_latam.rb +3 -3
- data/lib/active_merchant/billing/gateways/payway.rb +12 -12
- data/lib/active_merchant/billing/gateways/pin.rb +16 -16
- data/lib/active_merchant/billing/gateways/plugnpay.rb +10 -10
- data/lib/active_merchant/billing/gateways/psigate.rb +26 -26
- data/lib/active_merchant/billing/gateways/psl_card.rb +4 -4
- data/lib/active_merchant/billing/gateways/qbms.rb +23 -23
- data/lib/active_merchant/billing/gateways/quantum.rb +4 -4
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_common.rb +95 -95
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_v10.rb +9 -9
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_v4to7.rb +2 -2
- data/lib/active_merchant/billing/gateways/qvalent.rb +1 -1
- data/lib/active_merchant/billing/gateways/realex.rb +8 -8
- data/lib/active_merchant/billing/gateways/redsys.rb +24 -16
- data/lib/active_merchant/billing/gateways/safe_charge.rb +1 -1
- data/lib/active_merchant/billing/gateways/sage.rb +10 -10
- data/lib/active_merchant/billing/gateways/sage_pay.rb +35 -35
- data/lib/active_merchant/billing/gateways/sallie_mae.rb +2 -2
- data/lib/active_merchant/billing/gateways/secure_net.rb +9 -9
- data/lib/active_merchant/billing/gateways/secure_pay.rb +13 -13
- data/lib/active_merchant/billing/gateways/secure_pay_au.rb +15 -15
- data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +2 -2
- data/lib/active_merchant/billing/gateways/skip_jack.rb +8 -8
- data/lib/active_merchant/billing/gateways/smart_ps.rb +16 -16
- data/lib/active_merchant/billing/gateways/so_easy_pay.rb +6 -6
- data/lib/active_merchant/billing/gateways/spreedly_core.rb +4 -4
- data/lib/active_merchant/billing/gateways/stripe.rb +8 -8
- data/lib/active_merchant/billing/gateways/stripe_payment_intents.rb +10 -3
- data/lib/active_merchant/billing/gateways/swipe_checkout.rb +2 -2
- data/lib/active_merchant/billing/gateways/trans_first.rb +4 -4
- data/lib/active_merchant/billing/gateways/trust_commerce.rb +19 -19
- data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +110 -110
- data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +29 -29
- data/lib/active_merchant/billing/gateways/verifi.rb +10 -10
- data/lib/active_merchant/billing/gateways/viaklix.rb +6 -6
- data/lib/active_merchant/billing/gateways/visanet_peru.rb +6 -6
- data/lib/active_merchant/billing/gateways/webpay.rb +2 -2
- data/lib/active_merchant/billing/gateways/wirecard.rb +6 -6
- data/lib/active_merchant/billing/gateways/worldpay.rb +15 -15
- data/lib/active_merchant/billing/gateways/worldpay_online_payments.rb +32 -32
- data/lib/active_merchant/billing/gateways/worldpay_us.rb +2 -2
- data/lib/active_merchant/connection.rb +1 -1
- data/lib/active_merchant/network_connection_retries.rb +3 -3
- data/lib/active_merchant/post_data.rb +1 -1
- data/lib/active_merchant/version.rb +1 -1
- data/lib/certs/cacert.pem +75 -0
- data/lib/support/ssl_verify.rb +2 -2
- data/lib/support/ssl_version.rb +2 -2
- metadata +2 -3
- data/lib/active_merchant/billing/gateways/moneris_us.rb +0 -352
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f734d2204b43b893e645e5c47b9afe26506c0c383b355af486ac93cd6a8677ed
|
|
4
|
+
data.tar.gz: 611450e08256619a1d8aea5bc5795c47ff9220f0abde707f0facc82dd76e1661
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 98fa68d855a398089f9a088d8fa12edae2b34e8ed9fecab64511dc7e64b1ead409977adc00c3bc6aaf18f3f552f2b1fa3a38b8ceb5779d4a32a91e171a5556c8
|
|
7
|
+
data.tar.gz: 78a05f047cb7de339104b39785394b75ca51be7d33368ba44549006e2429e3d2a2796a10d30a18a38fae4aff34e6f4a605f862ec3103ad101c9805c09af586f7
|
data/CHANGELOG
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
= ActiveMerchant CHANGELOG
|
|
2
2
|
|
|
3
|
+
== HEAD
|
|
4
|
+
|
|
5
|
+
== Version 1.106.0 (Mar 10, 2020)
|
|
6
|
+
* PayJunctionV2: Send billing address in `auth` and `purchase` transactions [naashton] #3538
|
|
7
|
+
* Adyen: Fix some remote tests [curiousepic] #3541
|
|
8
|
+
* Redsys: Properly escape cardholder name and description fields in 3DS requests [britth] #3537
|
|
9
|
+
* RuboCop: Fix Style/HashSyntax [leila-alderman] #3540
|
|
10
|
+
* Paypal: Fix OrderTotal elements in `add_payment_details` [chinhle23] #3544
|
|
11
|
+
* Stripe Payment Intents: Add tests for "Idempotency-Key" header [fatcatt316] #3542
|
|
12
|
+
* Paypal: Fix RuboCop Style/HashSyntax violations [chinhle23] #3547
|
|
13
|
+
* Rubocop corrections for space around operators [cdmackeyfree] #3543
|
|
14
|
+
* Fat Zebra: Add `is_billing` in post for `store` call [chinhle23] #3551
|
|
15
|
+
* SafeCharge: Adds four supported countries [carrigan] #3550
|
|
16
|
+
* Ixopay: Support stored credentials [leila-alderman] #3549
|
|
17
|
+
* BlueSnap: Adds localized currency support [carrigan] #3552
|
|
18
|
+
* CheckoutV2: Use status as message for 3DS txns in progress [britth] #3545
|
|
19
|
+
* Stripe Payment Intents: Prevent idempotency key errors for compound actions [britth] #3554
|
|
20
|
+
* Adyen: Add tests for voiding with idempotency keys [jknipp] #3553
|
|
21
|
+
* Fat Zebra: Fix `store` call [chinhle23] #3556
|
|
22
|
+
* Update README to include Adyen [haolime] #3452
|
|
23
|
+
* PayJunctionv2: Fix billing address fields [leila-alderman] #3557
|
|
24
|
+
* Adyen: Fail unexpected 3DS responses [curiousepic] #3546
|
|
25
|
+
* Merchant Warrior: Add support for setting soft descriptors [daBayrus] #3558
|
|
26
|
+
* Adyen: Fix stored credentials [chinhle23] #3560
|
|
27
|
+
* Update BIN ranges for Alelo and Maestro cards [leila-alderman] #3559
|
|
28
|
+
* EBANX: Fix declines if order id is bigger than 40 chars [miguelxpn] #3563
|
|
29
|
+
* Moneris US: Remove gateway [chinhle23] #3561
|
|
30
|
+
* Decidir: Decidir: Improving the response message when encountering errors [naashton] #3564
|
|
31
|
+
* PayBox: Added USERTrust RSA Certification Authority and Sectigo RSA Organization Validation Secure Server CA [baldowl] #3567
|
|
32
|
+
|
|
3
33
|
== Version 1.105.0 (Feb 20, 2020)
|
|
4
34
|
* Credorax: Fix `3ds_transtype` setting in post [chinhle23] #3531
|
|
5
35
|
* Bambora Apac: Send void amount in options [leila-alderman] #3532
|
|
@@ -12,7 +42,6 @@
|
|
|
12
42
|
* Decidir: Add support for fraud_detection, site_id, and establishment_name [fatcatt316] #3527
|
|
13
43
|
* HPS: support eCheck [therufs] #3500
|
|
14
44
|
* EBANX: Add metadata information in post [miguelxpn] #3522
|
|
15
|
-
* Paypal: Fix OrderTotal elements in `add_payment_details` [chinhle23] #3517
|
|
16
45
|
* Worldpay: Add `riskData` GSF [fatcatt316] #3514
|
|
17
46
|
* EBANX: Fix `scrub` [chinhle23] #3521
|
|
18
47
|
* Worldpay: Remove unnecessary .tag! methods [leila-alderman] #3519
|
|
@@ -20,6 +49,7 @@
|
|
|
20
49
|
* Authorize.net: Trim supported countries to AU, CA, US [fatcatt316] #3516
|
|
21
50
|
* Credorax: Allow optional 3DS 2 fields [jeremywrowe] #3515
|
|
22
51
|
* Stripe: Remove outdated 'customer options' deprecation [alexdunae] #3401
|
|
52
|
+
* Added support for fraud review in CyberSource gateway [greg-burgoon] #3536
|
|
23
53
|
|
|
24
54
|
== Version 1.104.0 (Jan 29, 2020)
|
|
25
55
|
* Adyen: add `recurring_contract_type` GSF [therufs] #3460
|
data/README.md
CHANGED
|
@@ -91,6 +91,7 @@ guide and [Standardized 3DS Fields](https://github.com/activemerchant/active_mer
|
|
|
91
91
|
|
|
92
92
|
The [ActiveMerchant Wiki](https://github.com/activemerchant/active_merchant/wikis) contains a [table of features supported by each gateway](https://github.com/activemerchant/active_merchant/wiki/Gateway-Feature-Matrix).
|
|
93
93
|
|
|
94
|
+
* [Adyen](https://www.adyen.com/) - US, AT, AU, BE, BG, BR, CH, CY, CZ, DE, DK, EE, ES, FI, FR, GB, GI, GR, HK, HU, IE, IS, IT, LI, LT, LU, LV, MC, MT, MX, NL, NO, PL, PT, RO, SE, SG, SK, SI
|
|
94
95
|
* [Authorize.Net CIM](http://www.authorize.net/) - US
|
|
95
96
|
* [Authorize.Net](http://www.authorize.net/) - AU, CA, US
|
|
96
97
|
* [Axcess MS](http://www.axcessms.com/) - AD, AT, BE, BG, BR, CA, CH, CY, CZ, DE, DK, EE, ES, FI, FO, FR, GB, GI, GR, HR, HU, IE, IL, IM, IS, IT, LI, LT, LU, LV, MC, MT, MX, NL, NO, PL, PT, RO, RU, SE, SI, SK, TR, US, VA
|
|
@@ -159,7 +160,6 @@ The [ActiveMerchant Wiki](https://github.com/activemerchant/active_merchant/wiki
|
|
|
159
160
|
* [Modern Payments](http://www.modpay.com) - US
|
|
160
161
|
* [MONEI](http://www.monei.net/) - AD, AT, BE, BG, CA, CH, CY, CZ, DE, DK, EE, ES, FI, FO, FR, GB, GI, GR, HU, IE, IL, IS, IT, LI, LT, LU, LV, MT, NL, NO, PL, PT, RO, SE, SI, SK, TR, US, VA
|
|
161
162
|
* [Moneris](http://www.moneris.com/) - CA
|
|
162
|
-
* [Moneris (US)](http://www.monerisusa.com/) - US
|
|
163
163
|
* [MoneyMovers](http://mmoa.us/) - US
|
|
164
164
|
* [NAB Transact](http://transact.nab.com.au) - AU
|
|
165
165
|
* [NELiX TransaX](https://www.nelixtransax.com/) - US
|
|
@@ -13,7 +13,12 @@ module ActiveMerchant #:nodoc:
|
|
|
13
13
|
'diners_club' => ->(num) { num =~ /^3(0[0-5]|[68]\d)\d{11}$/ },
|
|
14
14
|
'jcb' => ->(num) { num =~ /^35(28|29|[3-8]\d)\d{12}$/ },
|
|
15
15
|
'dankort' => ->(num) { num =~ /^5019\d{12}$/ },
|
|
16
|
-
'maestro' =>
|
|
16
|
+
'maestro' => lambda { |num|
|
|
17
|
+
(12..19).cover?(num&.size) && (
|
|
18
|
+
in_bin_range?(num.slice(0, 6), MAESTRO_RANGES) ||
|
|
19
|
+
MAESTRO_BINS.any? { |bin| num.slice(0, bin.size) == bin }
|
|
20
|
+
)
|
|
21
|
+
},
|
|
17
22
|
'forbrugsforeningen' => ->(num) { num =~ /^600722\d{10}$/ },
|
|
18
23
|
'sodexo' => ->(num) { num =~ /^(606071|603389|606070|606069|606068|600818)\d{10}$/ },
|
|
19
24
|
'vr' => ->(num) { num =~ /^(627416|637036)\d{10}$/ },
|
|
@@ -65,6 +70,10 @@ module ActiveMerchant #:nodoc:
|
|
|
65
70
|
(510000..559999),
|
|
66
71
|
]
|
|
67
72
|
|
|
73
|
+
MAESTRO_BINS = Set.new(
|
|
74
|
+
['500033', '581149']
|
|
75
|
+
)
|
|
76
|
+
|
|
68
77
|
# https://www.mastercard.us/content/dam/mccom/global/documents/mastercard-rules.pdf, page 73
|
|
69
78
|
MAESTRO_RANGES = [
|
|
70
79
|
(561200..561269),
|
|
@@ -111,7 +120,7 @@ module ActiveMerchant #:nodoc:
|
|
|
111
120
|
405886..405886, 430471..430471, 438061..438061, 438064..438064, 470063..470066,
|
|
112
121
|
496067..496067, 506699..506704, 506706..506706, 506713..506714, 506716..506716,
|
|
113
122
|
506749..506750, 506752..506752, 506754..506756, 506758..506762, 506764..506767,
|
|
114
|
-
506770..506771, 509015..509019, 509880..509882, 509884..509885, 509987..
|
|
123
|
+
506770..506771, 509015..509019, 509880..509882, 509884..509885, 509987..509992
|
|
115
124
|
]
|
|
116
125
|
|
|
117
126
|
CABAL_RANGES = [
|
|
@@ -344,7 +353,7 @@ module ActiveMerchant #:nodoc:
|
|
|
344
353
|
def valid_naranja_algo?(numbers) #:nodoc:
|
|
345
354
|
num_array = numbers.to_s.chars.map(&:to_i)
|
|
346
355
|
multipliers = [4, 3, 2, 7, 6, 5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
|
|
347
|
-
num_sum = num_array[0..14].zip(multipliers).map { |a, b| a*b }.reduce(:+)
|
|
356
|
+
num_sum = num_array[0..14].zip(multipliers).map { |a, b| a * b }.reduce(:+)
|
|
348
357
|
intermediate = 11 - (num_sum % 11)
|
|
349
358
|
final_num = intermediate > 9 ? 0 : intermediate
|
|
350
359
|
final_num == num_array[15]
|
|
@@ -80,22 +80,22 @@ module ActiveMerchant #:nodoc:
|
|
|
80
80
|
# as network tokenization.
|
|
81
81
|
|
|
82
82
|
STANDARD_ERROR_CODE = {
|
|
83
|
-
:
|
|
84
|
-
:
|
|
85
|
-
:
|
|
86
|
-
:
|
|
87
|
-
:
|
|
88
|
-
:
|
|
89
|
-
:
|
|
90
|
-
:
|
|
91
|
-
:
|
|
92
|
-
:
|
|
93
|
-
:
|
|
94
|
-
:
|
|
95
|
-
:
|
|
96
|
-
:
|
|
97
|
-
:
|
|
98
|
-
:
|
|
83
|
+
incorrect_number: 'incorrect_number',
|
|
84
|
+
invalid_number: 'invalid_number',
|
|
85
|
+
invalid_expiry_date: 'invalid_expiry_date',
|
|
86
|
+
invalid_cvc: 'invalid_cvc',
|
|
87
|
+
expired_card: 'expired_card',
|
|
88
|
+
incorrect_cvc: 'incorrect_cvc',
|
|
89
|
+
incorrect_zip: 'incorrect_zip',
|
|
90
|
+
incorrect_address: 'incorrect_address',
|
|
91
|
+
incorrect_pin: 'incorrect_pin',
|
|
92
|
+
card_declined: 'card_declined',
|
|
93
|
+
processing_error: 'processing_error',
|
|
94
|
+
call_issuer: 'call_issuer',
|
|
95
|
+
pickup_card: 'pick_up_card',
|
|
96
|
+
config_error: 'config_error',
|
|
97
|
+
test_mode_live_card: 'test_mode_live_card',
|
|
98
|
+
unsupported_feature: 'unsupported_feature',
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
cattr_reader :implementations
|
|
@@ -223,11 +223,11 @@ module ActiveMerchant #:nodoc:
|
|
|
223
223
|
|
|
224
224
|
def user_agent
|
|
225
225
|
@@ua ||= JSON.dump({
|
|
226
|
-
:
|
|
227
|
-
:
|
|
228
|
-
:
|
|
229
|
-
:
|
|
230
|
-
:
|
|
226
|
+
bindings_version: ActiveMerchant::VERSION,
|
|
227
|
+
lang: 'ruby',
|
|
228
|
+
lang_version: "#{RUBY_VERSION} p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE})",
|
|
229
|
+
platform: RUBY_PLATFORM,
|
|
230
|
+
publisher: 'active_merchant'
|
|
231
231
|
})
|
|
232
232
|
end
|
|
233
233
|
|
|
@@ -320,7 +320,7 @@ module ActiveMerchant #:nodoc:
|
|
|
320
320
|
raise ArgumentError.new("Missing required parameter: #{param.first}") unless hash.has_key?(param.first)
|
|
321
321
|
|
|
322
322
|
valid_options = param[1..-1]
|
|
323
|
-
raise ArgumentError.new("Parameter: #{param.first} must be one of #{valid_options.to_sentence(:
|
|
323
|
+
raise ArgumentError.new("Parameter: #{param.first} must be one of #{valid_options.to_sentence(words_connector: 'or')}") unless valid_options.include?(hash[param.first])
|
|
324
324
|
else
|
|
325
325
|
raise ArgumentError.new("Missing required parameter: #{param}") unless hash.has_key?(param)
|
|
326
326
|
end
|
|
@@ -261,7 +261,9 @@ module ActiveMerchant #:nodoc:
|
|
|
261
261
|
end
|
|
262
262
|
|
|
263
263
|
def add_shopper_interaction(post, payment, options={})
|
|
264
|
-
if
|
|
264
|
+
if (options.dig(:stored_credential, :initial_transaction) && options.dig(:stored_credential, :initiator) == 'cardholder') ||
|
|
265
|
+
(payment.respond_to?(:verification_value) && payment.verification_value && options.dig(:stored_credential, :initial_transaction).nil?) ||
|
|
266
|
+
payment.is_a?(NetworkTokenizationCreditCard)
|
|
265
267
|
shopper_interaction = 'Ecommerce'
|
|
266
268
|
else
|
|
267
269
|
shopper_interaction = 'ContAuth'
|
|
@@ -273,8 +275,12 @@ module ActiveMerchant #:nodoc:
|
|
|
273
275
|
def add_recurring_processing_model(post, options)
|
|
274
276
|
return unless options.dig(:stored_credential, :reason_type) || options[:recurring_processing_model]
|
|
275
277
|
|
|
276
|
-
if options.dig(:stored_credential, :reason_type)
|
|
277
|
-
|
|
278
|
+
if options.dig(:stored_credential, :reason_type) == 'unscheduled'
|
|
279
|
+
if options.dig(:stored_credential, :initiator) == 'merchant'
|
|
280
|
+
recurring_processing_model = 'UnscheduledCardOnFile'
|
|
281
|
+
else
|
|
282
|
+
recurring_processing_model = 'CardOnFile'
|
|
283
|
+
end
|
|
278
284
|
else
|
|
279
285
|
recurring_processing_model = 'Subscription'
|
|
280
286
|
end
|
|
@@ -471,7 +477,7 @@ module ActiveMerchant #:nodoc:
|
|
|
471
477
|
raw_response = e.response.body
|
|
472
478
|
response = parse(raw_response)
|
|
473
479
|
end
|
|
474
|
-
success = success_from(action, response)
|
|
480
|
+
success = success_from(action, response, options)
|
|
475
481
|
Response.new(
|
|
476
482
|
success,
|
|
477
483
|
message_from(action, response),
|
|
@@ -479,7 +485,7 @@ module ActiveMerchant #:nodoc:
|
|
|
479
485
|
authorization: authorization_from(action, parameters, response),
|
|
480
486
|
test: test?,
|
|
481
487
|
error_code: success ? nil : error_code_from(response),
|
|
482
|
-
avs_result: AVSResult.new(:
|
|
488
|
+
avs_result: AVSResult.new(code: avs_code_from(response)),
|
|
483
489
|
cvv_result: CVVResult.new(cvv_result_from(response))
|
|
484
490
|
)
|
|
485
491
|
end
|
|
@@ -520,7 +526,12 @@ module ActiveMerchant #:nodoc:
|
|
|
520
526
|
headers
|
|
521
527
|
end
|
|
522
528
|
|
|
523
|
-
def success_from(action, response)
|
|
529
|
+
def success_from(action, response, options)
|
|
530
|
+
if ['RedirectShopper', 'ChallengeShopper'].include?(response.dig('resultCode')) && !options[:execute_threed] && !options[:threed_dynamic]
|
|
531
|
+
response['refusalReason'] = 'Received unexpected 3DS authentication response. Use the execute_threed and/or threed_dynamic options to initiate a proper 3DS flow.'
|
|
532
|
+
return false
|
|
533
|
+
end
|
|
534
|
+
|
|
524
535
|
case action.to_s
|
|
525
536
|
when 'authorise', 'authorise3d'
|
|
526
537
|
['Authorised', 'Received', 'RedirectShopper'].include?(response['resultCode'])
|
|
@@ -152,8 +152,8 @@ module ActiveMerchant #:nodoc:
|
|
|
152
152
|
message_from(succeeded, response),
|
|
153
153
|
response,
|
|
154
154
|
authorization: response['id'],
|
|
155
|
-
:
|
|
156
|
-
:
|
|
155
|
+
avs_result: AVSResult.new(code: response['avs_response']),
|
|
156
|
+
cvv_result: CVVResult.new(response['cvv2_response']),
|
|
157
157
|
test: test?
|
|
158
158
|
)
|
|
159
159
|
rescue JSON::ParserError
|
|
@@ -58,21 +58,21 @@ module ActiveMerchant
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
MARKET_TYPE = {
|
|
61
|
-
:
|
|
62
|
-
:
|
|
61
|
+
moto: '1',
|
|
62
|
+
retail: '2'
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
DEVICE_TYPE = {
|
|
66
|
-
:
|
|
67
|
-
:
|
|
68
|
-
:
|
|
69
|
-
:
|
|
70
|
-
:
|
|
71
|
-
:
|
|
72
|
-
:
|
|
73
|
-
:
|
|
74
|
-
:
|
|
75
|
-
:
|
|
66
|
+
unknown: '1',
|
|
67
|
+
unattended_terminal: '2',
|
|
68
|
+
self_service_terminal: '3',
|
|
69
|
+
electronic_cash_register: '4',
|
|
70
|
+
personal_computer_terminal: '5',
|
|
71
|
+
airpay: '6',
|
|
72
|
+
wireless_pos: '7',
|
|
73
|
+
website: '8',
|
|
74
|
+
dial_terminal: '9',
|
|
75
|
+
virtual_terminal: '10'
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
class_attribute :duplicate_window
|
|
@@ -221,13 +221,13 @@ module ActiveMerchant
|
|
|
221
221
|
|
|
222
222
|
def supports_network_tokenization?
|
|
223
223
|
card = Billing::NetworkTokenizationCreditCard.new({
|
|
224
|
-
:
|
|
225
|
-
:
|
|
226
|
-
:
|
|
227
|
-
:
|
|
228
|
-
:
|
|
229
|
-
:
|
|
230
|
-
:
|
|
224
|
+
number: '4111111111111111',
|
|
225
|
+
month: 12,
|
|
226
|
+
year: 20,
|
|
227
|
+
first_name: 'John',
|
|
228
|
+
last_name: 'Smith',
|
|
229
|
+
brand: 'visa',
|
|
230
|
+
payment_cryptogram: 'EHuWW9PiBkWvqE5juRwDzAUFBAk='
|
|
231
231
|
})
|
|
232
232
|
|
|
233
233
|
request = post_data(:authorize) do |xml|
|
|
@@ -39,10 +39,10 @@ module ActiveMerchant #:nodoc:
|
|
|
39
39
|
AUTHORIZE_NET_ARB_NAMESPACE = 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'
|
|
40
40
|
|
|
41
41
|
RECURRING_ACTIONS = {
|
|
42
|
-
:
|
|
43
|
-
:
|
|
44
|
-
:
|
|
45
|
-
:
|
|
42
|
+
create: 'ARBCreateSubscription',
|
|
43
|
+
update: 'ARBUpdateSubscription',
|
|
44
|
+
cancel: 'ARBCancelSubscription',
|
|
45
|
+
status: 'ARBGetSubscriptionStatus'
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
# Creates a new AuthorizeNetArbGateway
|
|
@@ -126,7 +126,7 @@ module ActiveMerchant #:nodoc:
|
|
|
126
126
|
# * <tt>subscription_id</tt> -- A string containing the +subscription_id+ of the recurring payment already in place
|
|
127
127
|
# for a given credit card. (REQUIRED)
|
|
128
128
|
def cancel_recurring(subscription_id)
|
|
129
|
-
request = build_recurring_request(:cancel, :
|
|
129
|
+
request = build_recurring_request(:cancel, subscription_id: subscription_id)
|
|
130
130
|
recurring_commit(:cancel, request)
|
|
131
131
|
end
|
|
132
132
|
|
|
@@ -139,7 +139,7 @@ module ActiveMerchant #:nodoc:
|
|
|
139
139
|
# * <tt>subscription_id</tt> -- A string containing the +subscription_id+ of the recurring payment already in place
|
|
140
140
|
# for a given credit card. (REQUIRED)
|
|
141
141
|
def status_recurring(subscription_id)
|
|
142
|
-
request = build_recurring_request(:status, :
|
|
142
|
+
request = build_recurring_request(:status, subscription_id: subscription_id)
|
|
143
143
|
recurring_commit(:status, request)
|
|
144
144
|
end
|
|
145
145
|
|
|
@@ -149,9 +149,9 @@ module ActiveMerchant #:nodoc:
|
|
|
149
149
|
def build_recurring_request(action, options = {})
|
|
150
150
|
raise StandardError, "Invalid Automated Recurring Billing Action: #{action}" unless RECURRING_ACTIONS.include?(action)
|
|
151
151
|
|
|
152
|
-
xml = Builder::XmlMarkup.new(:
|
|
153
|
-
xml.instruct!(:xml, :
|
|
154
|
-
xml.tag!("#{RECURRING_ACTIONS[action]}Request", :
|
|
152
|
+
xml = Builder::XmlMarkup.new(indent: 2)
|
|
153
|
+
xml.instruct!(:xml, version: '1.0', encoding: 'utf-8')
|
|
154
|
+
xml.tag!("#{RECURRING_ACTIONS[action]}Request", xmlns: AUTHORIZE_NET_ARB_NAMESPACE) do
|
|
155
155
|
add_merchant_authentication(xml)
|
|
156
156
|
# Merchant-assigned reference ID for the request
|
|
157
157
|
xml.tag!('refId', options[:ref_id]) if options[:ref_id]
|
|
@@ -394,8 +394,8 @@ module ActiveMerchant #:nodoc:
|
|
|
394
394
|
success = response[:result_code] == 'Ok'
|
|
395
395
|
|
|
396
396
|
Response.new(success, message, response,
|
|
397
|
-
:
|
|
398
|
-
:
|
|
397
|
+
test: test_mode,
|
|
398
|
+
authorization: response[:subscription_id]
|
|
399
399
|
)
|
|
400
400
|
end
|
|
401
401
|
|
|
@@ -33,49 +33,49 @@ module ActiveMerchant #:nodoc:
|
|
|
33
33
|
AUTHORIZE_NET_CIM_NAMESPACE = 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'
|
|
34
34
|
|
|
35
35
|
CIM_ACTIONS = {
|
|
36
|
-
:
|
|
37
|
-
:
|
|
38
|
-
:
|
|
39
|
-
:
|
|
40
|
-
:
|
|
41
|
-
:
|
|
42
|
-
:
|
|
43
|
-
:
|
|
44
|
-
:
|
|
45
|
-
:
|
|
46
|
-
:
|
|
47
|
-
:
|
|
48
|
-
:
|
|
49
|
-
:
|
|
50
|
-
:
|
|
36
|
+
create_customer_profile: 'createCustomerProfile',
|
|
37
|
+
create_customer_payment_profile: 'createCustomerPaymentProfile',
|
|
38
|
+
create_customer_shipping_address: 'createCustomerShippingAddress',
|
|
39
|
+
get_customer_profile: 'getCustomerProfile',
|
|
40
|
+
get_customer_profile_ids: 'getCustomerProfileIds',
|
|
41
|
+
get_customer_payment_profile: 'getCustomerPaymentProfile',
|
|
42
|
+
get_customer_shipping_address: 'getCustomerShippingAddress',
|
|
43
|
+
delete_customer_profile: 'deleteCustomerProfile',
|
|
44
|
+
delete_customer_payment_profile: 'deleteCustomerPaymentProfile',
|
|
45
|
+
delete_customer_shipping_address: 'deleteCustomerShippingAddress',
|
|
46
|
+
update_customer_profile: 'updateCustomerProfile',
|
|
47
|
+
update_customer_payment_profile: 'updateCustomerPaymentProfile',
|
|
48
|
+
update_customer_shipping_address: 'updateCustomerShippingAddress',
|
|
49
|
+
create_customer_profile_transaction: 'createCustomerProfileTransaction',
|
|
50
|
+
validate_customer_payment_profile: 'validateCustomerPaymentProfile'
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
CIM_TRANSACTION_TYPES = {
|
|
54
|
-
:
|
|
55
|
-
:
|
|
56
|
-
:
|
|
57
|
-
:
|
|
58
|
-
:
|
|
59
|
-
:
|
|
54
|
+
auth_capture: 'profileTransAuthCapture',
|
|
55
|
+
auth_only: 'profileTransAuthOnly',
|
|
56
|
+
capture_only: 'profileTransCaptureOnly',
|
|
57
|
+
prior_auth_capture: 'profileTransPriorAuthCapture',
|
|
58
|
+
refund: 'profileTransRefund',
|
|
59
|
+
void: 'profileTransVoid'
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
CIM_VALIDATION_MODES = {
|
|
63
|
-
:
|
|
64
|
-
:
|
|
65
|
-
:
|
|
66
|
-
:
|
|
63
|
+
none: 'none',
|
|
64
|
+
test: 'testMode',
|
|
65
|
+
live: 'liveMode',
|
|
66
|
+
old: 'oldLiveMode'
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
BANK_ACCOUNT_TYPES = {
|
|
70
|
-
:
|
|
71
|
-
:
|
|
72
|
-
:
|
|
70
|
+
checking: 'checking',
|
|
71
|
+
savings: 'savings',
|
|
72
|
+
business_checking: 'businessChecking'
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
ECHECK_TYPES = {
|
|
76
|
-
:
|
|
77
|
-
:
|
|
78
|
-
:
|
|
76
|
+
ccd: 'CCD',
|
|
77
|
+
ppd: 'PPD',
|
|
78
|
+
web: 'WEB'
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
self.homepage_url = 'http://www.authorize.net/'
|
|
@@ -487,9 +487,9 @@ module ActiveMerchant #:nodoc:
|
|
|
487
487
|
def build_request(action, options = {})
|
|
488
488
|
raise StandardError, "Invalid Customer Information Manager Action: #{action}" unless CIM_ACTIONS.include?(action)
|
|
489
489
|
|
|
490
|
-
xml = Builder::XmlMarkup.new(:
|
|
491
|
-
xml.instruct!(:xml, :
|
|
492
|
-
xml.tag!("#{CIM_ACTIONS[action]}Request", :
|
|
490
|
+
xml = Builder::XmlMarkup.new(indent: 2)
|
|
491
|
+
xml.instruct!(:xml, version: '1.0', encoding: 'utf-8')
|
|
492
|
+
xml.tag!("#{CIM_ACTIONS[action]}Request", xmlns: AUTHORIZE_NET_CIM_NAMESPACE) do
|
|
493
493
|
add_merchant_authentication(xml)
|
|
494
494
|
# Merchant-assigned reference ID for the request
|
|
495
495
|
xml.tag!('refId', options[:ref_id]) if options[:ref_id]
|
|
@@ -852,7 +852,7 @@ module ActiveMerchant #:nodoc:
|
|
|
852
852
|
|
|
853
853
|
response_params = parse(action, xml)
|
|
854
854
|
|
|
855
|
-
message_element= response_params['messages']['message']
|
|
855
|
+
message_element = response_params['messages']['message']
|
|
856
856
|
first_error = message_element.is_a?(Array) ? message_element.first : message_element
|
|
857
857
|
message = first_error['text']
|
|
858
858
|
test_mode = @options[:test_requests] || message =~ /Test Mode/
|