activemerchant 1.117.0 → 1.123.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +217 -0
  3. data/README.md +5 -3
  4. data/lib/active_merchant/billing/check.rb +19 -12
  5. data/lib/active_merchant/billing/credit_card.rb +6 -0
  6. data/lib/active_merchant/billing/credit_card_formatting.rb +1 -0
  7. data/lib/active_merchant/billing/credit_card_methods.rb +96 -22
  8. data/lib/active_merchant/billing/gateways/adyen.rb +38 -21
  9. data/lib/active_merchant/billing/gateways/authorize_net.rb +19 -11
  10. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +4 -0
  11. data/lib/active_merchant/billing/gateways/blue_pay.rb +29 -0
  12. data/lib/active_merchant/billing/gateways/blue_snap.rb +5 -3
  13. data/lib/active_merchant/billing/gateways/braintree_blue.rb +58 -8
  14. data/lib/active_merchant/billing/gateways/cashnet.rb +7 -2
  15. data/lib/active_merchant/billing/gateways/checkout_v2.rb +31 -0
  16. data/lib/active_merchant/billing/gateways/credorax.rb +16 -9
  17. data/lib/active_merchant/billing/gateways/cyber_source.rb +67 -9
  18. data/lib/active_merchant/billing/gateways/d_local.rb +1 -1
  19. data/lib/active_merchant/billing/gateways/decidir.rb +29 -3
  20. data/lib/active_merchant/billing/gateways/elavon.rb +110 -26
  21. data/lib/active_merchant/billing/gateways/element.rb +2 -0
  22. data/lib/active_merchant/billing/gateways/eway_rapid.rb +13 -0
  23. data/lib/active_merchant/billing/gateways/firstdata_e4_v27.rb +17 -6
  24. data/lib/active_merchant/billing/gateways/forte.rb +12 -0
  25. data/lib/active_merchant/billing/gateways/global_collect.rb +25 -16
  26. data/lib/active_merchant/billing/gateways/hps.rb +65 -2
  27. data/lib/active_merchant/billing/gateways/kushki.rb +23 -0
  28. data/lib/active_merchant/billing/gateways/litle.rb +9 -4
  29. data/lib/active_merchant/billing/gateways/mercado_pago.rb +5 -4
  30. data/lib/active_merchant/billing/gateways/merchant_warrior.rb +2 -0
  31. data/lib/active_merchant/billing/gateways/moka.rb +277 -0
  32. data/lib/active_merchant/billing/gateways/monei.rb +228 -144
  33. data/lib/active_merchant/billing/gateways/mundipagg.rb +14 -5
  34. data/lib/active_merchant/billing/gateways/netbanx.rb +37 -2
  35. data/lib/active_merchant/billing/gateways/nmi.rb +14 -9
  36. data/lib/active_merchant/billing/gateways/orbital.rb +202 -47
  37. data/lib/active_merchant/billing/gateways/pay_arc.rb +390 -0
  38. data/lib/active_merchant/billing/gateways/pay_trace.rb +404 -0
  39. data/lib/active_merchant/billing/gateways/payeezy.rb +57 -11
  40. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +1 -0
  41. data/lib/active_merchant/billing/gateways/payflow.rb +9 -0
  42. data/lib/active_merchant/billing/gateways/payment_express.rb +10 -5
  43. data/lib/active_merchant/billing/gateways/paymentez.rb +26 -1
  44. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +1 -0
  45. data/lib/active_merchant/billing/gateways/paypal.rb +10 -2
  46. data/lib/active_merchant/billing/gateways/paypal_express.rb +1 -0
  47. data/lib/active_merchant/billing/gateways/paysafe.rb +291 -0
  48. data/lib/active_merchant/billing/gateways/payu_latam.rb +3 -3
  49. data/lib/active_merchant/billing/gateways/payway_dot_com.rb +253 -0
  50. data/lib/active_merchant/billing/gateways/pin.rb +11 -0
  51. data/lib/active_merchant/billing/gateways/qvalent.rb +23 -9
  52. data/lib/active_merchant/billing/gateways/redsys.rb +78 -30
  53. data/lib/active_merchant/billing/gateways/safe_charge.rb +19 -8
  54. data/lib/active_merchant/billing/gateways/spreedly_core.rb +13 -4
  55. data/lib/active_merchant/billing/gateways/stripe.rb +8 -8
  56. data/lib/active_merchant/billing/gateways/stripe_payment_intents.rb +86 -25
  57. data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +1 -1
  58. data/lib/active_merchant/billing/gateways/vpos.rb +220 -0
  59. data/lib/active_merchant/billing/gateways/worldpay.rb +68 -20
  60. data/lib/active_merchant/billing/response.rb +2 -1
  61. data/lib/active_merchant/billing/three_d_secure_eci_mapper.rb +27 -0
  62. data/lib/active_merchant/billing.rb +1 -0
  63. data/lib/active_merchant/version.rb +1 -1
  64. data/lib/certs/cacert.pem +1582 -2431
  65. metadata +10 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 40c5c0774f8eb95c3aff1873f2067aea19df812d49af757df53e8f448b8ad9d1
4
- data.tar.gz: d30077388953e6945c9353f829e8ea38503828e39555594bb76c46c30c0b7f45
3
+ metadata.gz: ce71317ac7aa50f5b0bcbfb6fe301f804eea7919153b9ade64cbd0d34ea7a25c
4
+ data.tar.gz: a62776247abfdb56c2a0cb36e336242191b3809d989999aebb7a906f8b7afa9b
5
5
  SHA512:
6
- metadata.gz: 8ae4e27c577076982790c058395b863f659e9a07e71a5dd904bb755ce7a2f086c60112f25d91f054087a4c62740adf0f8b1cece5968bc8e0ee247b0f3e0ee06d
7
- data.tar.gz: 896c982831e68d0b70813c80c8dfc086302389f8aa13dc8b64fdc0582ef42baab1c75d50f502f681f2abc085f2c74992e0b1f85919d84012af5ba024bab11602
6
+ metadata.gz: 83869085801337d35208b4c41cfebe89e315a9ea9590acb8b168402ab3acf398df011a201dcafd85139af7d01c3b75b35e278b18cd5bc7198655606181fd17ea
7
+ data.tar.gz: 60a54eae2330f8d00959931d933025cd32f302144c37e17a5d11d35ebd3f3356bb80fc8cfb15f3b060410782a667bdae985f07442bd9af4d9a9f03e5df2faa88
data/CHANGELOG CHANGED
@@ -2,6 +2,221 @@
2
2
 
3
3
  == HEAD
4
4
 
5
+ == Version 1.123.0 (September 10th, 2021)
6
+ * Paysafe: Add gateway integration [meagabeth] #4085
7
+ * Elavon: Support recurring transactions with stored credentials [cdmackeyfree] #4086
8
+ * Orbital: Truncate three_d_secure[:version] [carrigan] #4087
9
+ * Credorax: Determine ISK decimal by datetime [curiousepic] #4088
10
+ * Moka: support new gateway type [dsmcclain] #4089
11
+ * Paymentez: Add more_info field [reblevins] #4091
12
+ * Worldpay: Support $0 auth [therufs] #4092
13
+ * Elavon: Support recurring transactions with token, revert stored credentials recurring [cdmackeyfree] #4089
14
+ * SafeCharge(Nuvei): Add support for product_id [rachelkirk] #4095
15
+ * NMI: Change cardholder_auth 3DS field population [carrigan] #4094
16
+ * Synchrony: add card type [therufs] #4096
17
+ * Maestro: support BINs without Luhn check [therufs] #4097
18
+ * Maestro: support BINs [therufs] #4098
19
+ * Redsys: Route MIT Exemptions to webservice endpoint [curiousepic] #4081
20
+ * Adyen: Update Classic Integration API to v64 and Recurring API to v49 [almalee24] #4090
21
+ * Payeezy: support soft_descriptor and merchant_ref [cdmackeyfree] #4099
22
+ * Elavon: add ssl_token field [cdmackeyfree] #4100
23
+ * Credorax: Remove special logic for ISK [curiousepic] #4102
24
+ * UnionPay: Pull UnionPay's 62* BIN ranges out of Discover's #4103
25
+ * Monei: Update Creation of Billing Details [tatsianaclifton] #4107
26
+ * Monei: Typo Correction on Billing Details [tatsianaclifton] #4108
27
+ * Paysafe: Add support for 3DS [meagabeth] #4109
28
+
29
+ == Version 1.122.0 (August 3rd, 2021)
30
+ * Orbital: Correct success logic for refund [tatsianaclifton] #4014
31
+ * usaepay: Added pin gateway setting [DustinHaefele] #4026
32
+ * MercadoPago: Added external_reference, more payer object options, and metadata field [DustinHaefele] #4020
33
+ * Element: Add duplicate_override_flag [almalee24] #4012
34
+ * PayTrace: Support gateway [meagabeth] #3985
35
+ * vPOS: Support credit + refund [therufs] #3998
36
+ * PayArc: Support gateway [senthil-code] #3974
37
+ * NMI: Support cardholder_auth field for 3DS2 [cdmackeyfree] #4002
38
+ * Confiable: Support cardtype [therufs] #4004
39
+ * Maestro: Add BIN [therufs] #4003
40
+ * PayULatam: Ensure phone number is pulled from shipping_address correctly [dsmcclain] #4005
41
+ * SafeCharge: Add challenge_preference for 3DS [klaiv] #3999
42
+ * Adyen: Pass networkTxReference in all transactions [naashton] #4006
43
+ * Adyen: Ensure correct transaction reference is selected [dsmcclain] #4007
44
+ * PayTrace: Support level_3_data fields [meagabeth] #4008
45
+ * BluePay: Add support for Stored Credentials [dsmcclain] #4009
46
+ * Orbital: Add support for SCARecurringPayment [jessiagee] #4010
47
+ * Braintree: Support recurring_first and moto reasons [curiousepic] #4013
48
+ * PayTrace: Adjust capture method [meagabeth] #4015
49
+ * BarclaysEpdqExtraPlus: updated custom_eci test + remote tests [yyapuncich] #4022
50
+ * CyberSource: Add customerID field [deemeyers] #4025
51
+ * CyberSource: Adjust Auth [naashton] #3956
52
+ * Valid Canadian Institution Numbers [naashton] #4024
53
+ * PayTrace: Adjust purchase and capture methods to handle MultiResponse scenarios [meagabeth] #4027
54
+ * Payflow: Add support for MERCHDESCR field [rachelkirk] #4028
55
+ * PayTrace: Support $0 authorize in verify method [meagabeth] #4030
56
+ * PayArc: Add error_code in response [cdm-83] #4021
57
+ * Update bank routing account validation check [jessiagee] #4029
58
+ * Kushki: Add 'contactDetails' fields [mbreenlyles] #4033
59
+ * Adyen: Truncating order_id and remote test [yyapuncich] #4036
60
+ * CyberSource: Allow string content for Ignore AVS/CVV flags [curiousepic] #4043
61
+ * Decidir: Update validation error message handling [arbianchi] #4042
62
+ * Authorize.net: Remove cardholderAuthentication for non-3DS transactions [BritneyS] #4045
63
+ * BlueSnap: Handle 429 errors [britth] #4044
64
+ * Orbital: Update unit test files [meagabeth] #4046
65
+ * Orbital: Strip null characters from responses [britth] #4041
66
+ * Merchant Warrior: Handle invalid XML responses [arbianchi] #4047
67
+ * Braintree: Fix NoMethodError for failed card verification [molbrown] #4048
68
+ * Worldpay: Accepting 3DS1 and 3DS2 authentication data from external MPI [chandan-PS] #4017
69
+ * PayArc: Currency and parameters updates [jessiagee] #4051
70
+ * Elavon: Add support for special characters [mbreenlyles] #4049
71
+ * PayArc: Formatting CC month, adding tax_rate, removing default void reason [jessiagee] #4053
72
+ * Kushki: Add support for fullResponse field [rachelkirk] #4057
73
+ * Element: Add support for `MerchantDescriptor` field [BritneyS] #4058
74
+ * PayArc: Added email and phone to credit and charge [jessiagee] #4056
75
+ * Mundipagg: Added support for 'authentication_secret_key' for 'api_key' overwrite [DustinHaefele] #4059
76
+ * Payflow: Raise an error if store method is called [dsmcclain] #4066
77
+ * Monei: JSON API implementation [jimmyn] #3613
78
+ * Maestro: Update BINs [therufs] #4067
79
+ * Monei: Change domain to monei.com [jimmyn] #4068
80
+ * Spreedly: Support gateway_specific_response_fields in response params [abarrak] #4064
81
+ * Payeezy: Add support for `add_soft_descriptors` [rachelkirk] #4069
82
+ * Stripe Payment Intents: Add support for network_transaction_id field [cdmackeyfree] #4060
83
+ * Worldpay: Support 'CAPTURED' response for authorize transactions [naashton] #4070
84
+ * Ingenico (Global Collect): New idempotence key header [BritneyS] #4073
85
+ * PayTrace: Adjust handling of line_items subfields [meagabeth] #4074
86
+ * Worldpay: Correct Expiration Year Format [tatsianaclifton] #4076
87
+ * Monei: Improve Scrub Regex [tatsianaclifton] #4072
88
+ * Payflow: add THREEDSVERSION and DSTRANSACTIONID when present [bbraschi] #4075
89
+ * CT Payments: update remote tests [cdmackeyfree] #3947
90
+ * Orbital: Ensure full e-check scrubbing [mbreenlyles] #4079
91
+
92
+ == Version 1.121 (June 8th, 2021)
93
+ * Braintree: Lift restriction on gem version to allow for backwards compatibility [naashton] #3993
94
+ * Payment Express/Windcave: Send amount on verify calls [cdmackeyfree] #3995
95
+ * Orbital: Use billing_address name as fallback [curiousepic] #3966
96
+ * vPOS: handle shop_process_id correctly [therufs] #3996
97
+ * Checkout v2: Support metadata field [saschakala] #3992
98
+ * Adyen: Support networkTxReference field [naashton] #3997
99
+ * Paypal Express: Enable PayPal express reference transaction request to send merchant session id [janees-e] #3994
100
+
101
+ == Version 1.120.0 (May 28th, 2021)
102
+ * Braintree: Bump required braintree gem version to 3.0.1
103
+ * Stripe PI: ensure `setup_future_sage` and `off_session` work when using SetupIntents.
104
+ * Orbital: Update commit to accept retry_logic in params [jessiagee] #3890
105
+ * Orbital: Update remote 3DS tests [jessiagee] #3892
106
+ * Mercado Pago: support Creditel card type [therufs] #3893
107
+ * Payeezy: Update error mapping [meagabeth] #3896
108
+ * HPS: Add support for stored_credential [cdmackeyfree] #3894
109
+ * Orbital: Ensure payment_detail sends for ECP [jessiagee] #3899
110
+ * Payeezy: Update `error_code_from` method [meagabeth] #3900
111
+ * Worldpay: Add support for `statementNarrative` field [meagabeth] #3901
112
+ * Mercado Pago: Give ability to pass capture option in authorize txn field [naashton] #3897
113
+ * Orbital: Ensure correct fields sent in refund [jessiagee] #3903
114
+ * WorldPay: remove some defaults in billing address [carrigan] #3902
115
+ * Adyen: Support for General Credit [naashton] #3904
116
+ * Worldpay: reintroduce address1 and city defaults [carrigan] #3905
117
+ * Stripe: ensure potentially nested data is scrubbed #3907
118
+ * Stripe PI: Send Validate on Payment Method Attach [tatsianaclifton] #3909
119
+ * Adyen: Update handling of authorization returned from gateway [meagabeth] #3910
120
+ * Update gateway templates for Rubocop compliance [therufs] #3912 #3895
121
+ * Orbital: Send AVSname for all eCheck transactions [jessiagee] #3911
122
+ * Litle: update support of customerId field [cdmackeyfree] #3913
123
+ * Payment Express: fix signature for `verify` [therufs] #3914
124
+ * Forte: Send xdata fields [dsmcclain] #3915
125
+ * PaywayDotCom: Add New Gateway [DanAtPayway] #3898
126
+ * Orbital: Remove unnecessary requirements [jessiagee] #3917
127
+ * SafeCharge (Nuvei): Add network tokenization support [DStoyanoff] #3847
128
+ * Stripe PI: Enhance testing of SetupIntents API #3908
129
+ * SafeCharge (Nuvei): Fix NT related bug [jimilpatel24] #3921
130
+ * Worldpay: Only override cardholdername for 3ds tests [curiousepic] #3918
131
+ * Orbital: Add support for general credit [meagabeth] #3922
132
+ * Banco Sabadell: Ensure sca_exemption field is used #3923
133
+ * Redsys: Refactor XML character escape logic #3925
134
+ * HPS: Strip zip codes of non-alphanumeric characters [dsmcclain] #3926
135
+ * Orbital: $0 PreNote using authorize for eCheck force_capture [jessiagee] #3927
136
+ * Worldpay: synchronous response changes [naashton] #3928
137
+ * PaywayDotCom: Add more thorough scrubbing [tatsianaclifton] #3929
138
+ * Remove CONTRIBUTING.md and update README.md to reflect new repository wiki [dsmcclain] #3930
139
+ * Qvalent: Add customer_reference_number [fredo-] #3931
140
+ * Orbital: Add 'ND' ECPActionCode to $0 Prenote Check [jessiagee] #3935
141
+ * Checkout: Add support for stored_credential [meagabeth] #3934
142
+ * Credorax: Add support for 3ds_reqchallengeind [dsmcclain] #3936
143
+ * Adyen: cancelOrRefund endpoint when passed as option [naashton] #3937
144
+ * Qvalent: Add customer reference number FIX [fredo-] #3939
145
+ * Orbital: Pass line_items in capture [jessiagee] #3941
146
+ * BraintreeBlue: Add support for $0 auth verification [meagabeth] #3944
147
+ * JCB: Add additional BIN ranges [dsmcclain] #3946
148
+ * vPOS: Support new gateway type [therufs] #3906
149
+ * Braintree: Add support for AVS and CVV results in $0 credit card verification transactions [meagabeth] #3951
150
+ * Braintree: Return cvv_code and avs_code in response [meagabeth] #3952
151
+ * vPOS: Stringify values [therufs] #3954
152
+ * Payeezy: Send level2 fields [dsmcclain] #3953
153
+ * Credorax: adjust logic for sending 3ds shipping address fields [dsmcclain] #3959
154
+ * Orbital: Ensure ECP always sends AVSName [jessiagee] #3963
155
+ * Orbital: Add middle name to EWSMiddleName for ECP [jessiagee] #3962
156
+ * Support Canadian Bank Accounts [naashton] #3964
157
+ * Windcave/Payment Express: Add support for AvsAction and EnableAVSData fields [meagabeth] #3967
158
+ * CyberSource: Update XML tag for merchantDefinedData [meagabeth] #3969
159
+ * Elavon: Send ssl_vendor_id field [dsmcclain] #3972
160
+ * Credorax: Add support for `echo` field [meagabeth] #3973
161
+ * Worldpay: support cancelOrRefund via options [therufs] #3975
162
+ * Payeezy: support general credit [cdmackeyfree] #3977
163
+ * Ripley and Hipercard: Add BIN ranges [naashton] #3978
164
+ * Adyen: Default card holder name for credit cards [shasum] #3980
165
+ * PaywayDotCom: make `source_id` a required field [dsmcclain] # 3981
166
+ * Qvalent: remove `pem_password` from required credentials [dsmcclain] #3982
167
+ * Authorize.net: Fix stored credentials [tatsianaclifton] #3971
168
+ * CyberSource: Add support for multiple new fields [dsmcclain] #3984
169
+ * CASHNet: Update gateway adapter [dsmcclain] #3986
170
+ * Elavon: Send `ssl_vendor_id` field via options on gateway initialization [dsmcclain] #3989
171
+
172
+ == Version 1.119.0 (February 9th, 2021)
173
+ * Payment Express: support verify/validate [therufs] #3874
174
+ * GlobalCollect: Truncate address fields [meagabeth] #3878
175
+ * Litle: Truncate address fields [meagabeth] #3877
176
+ * Netbanx: Add-customer-information(name,email,IP)-to-a-transaction [rockyhakjoong] #3754
177
+ * Netbanx: Adjust the avs and cvv return code in shopify [rockyhakjoong] #3833
178
+ * Decidir: Improve error mapping [meagabeth] #3875
179
+ * Worldpay: support `skip_capture` [therufs] #3879
180
+ * Redsys: Add new response code text [britth] #3880
181
+ * Orbital: Update ECP details to use payment source [jessiagee] #3881
182
+ * Alelo: Add additional BIN ranges [meagabeth] #3882
183
+ * HPS: Update Add support for general credit [naashton] #3885
184
+ * Elavon: Fix issue with encoding data sent in the request [naashton] #3865
185
+ * Orbital: Update ECP to use EWS verification [jessiagee] #3886
186
+ * Eway: Add 3ds field when do direct payment [GavinSun9527] #3860
187
+ * Support Creditel cardtype [therufs] #3883
188
+ * Elavon: Remove ampersand char from fields [naashton] #3891
189
+
190
+ == Version 1.118.0 (January 22nd, 2021)
191
+ * Worldpay: Add support for challengeWindowSize [carrigan] #3823
192
+ * Adyen: Update capitalization on subMerchantId field [cdmackeyfree] #3824
193
+ * Maestro and Elo: Update BIN ranges [meagabeth] #3822
194
+ * HPS: Truncate invoice numbers that are too long [curiousepic] #3825
195
+ * Pass network_transaction_id attribute in Response [therufs] #3815
196
+ * Elavon: support standardized stored credentials [therufs] #3816
197
+ * Decidir: update fraud_detection field [cdmackeyfree] #3829
198
+ * Paymentez: Add Olimpica cardtype [meagabeth] #3831
199
+ * SafeCharge: 3DS external MPI data refinements [curiousepic] #3821
200
+ * Credorax: Add support for 3DS Adviser [meagabeth] #3834
201
+ * Adyen: Support subMerchant data [mymir][therufs] #3835
202
+ * Decidir: add device_unique_identifier to card data [cdmackeyfree] #3839
203
+ * BraintreeBlue: add support for account_type field [jimilpatel24] #3840
204
+ * Redsys: Add support for stored_credential [meagabeth] #3844
205
+ * Redsys: add_payment method solution [meagabeth] #3845
206
+ * Stripe Payment Intents: Add support for error_on_requires_action option [tatsianaclifton] #3846
207
+ * Add 3DS 2.0 values to paypal [nebdil] #3285
208
+ * Redsys: Update Mpi Fields [tatsianaclifton] #3855
209
+ * Paypal: Update AuthStatus3ds MPI field [curiousepic] #3857
210
+ * Orbital: Update 3DS support for Mastercard [meagabeth] #3850
211
+ * Payeezy: Support standardized stored credentials [therufs] #3861
212
+ * CyberSource: Update `billing_address` override [meagabeth] #3862
213
+ * Paymentez: Add 3DS MPI field support [carrigan] #3856
214
+ * BlueSnap: Add support `fraud-session-id` field [meagabeth] #3863
215
+ * BlueSnap: Update handling of `transaction-fraud-info` fields [meagabeth] #3866
216
+ * Payeezy: Allow no stored credential transaction id [therufs] #3868
217
+ * Orbital: eCheck processing added [ajawadmirza] #3870
218
+ * FirsdataE4V27: Fixes some apple pay transaction issues [pi3r] #3872
219
+
5
220
  == Version 1.117.0 (November 13th)
6
221
  * Checkout V2: Pass attempt_n3d along with 3ds enabled [naashton] #3805
7
222
  * GlobalCollect: Add support for Third-party 3DS2 data [molbrown] #3801
@@ -17,6 +232,7 @@
17
232
  * Credorax: Allow 3DS1 normalized pass-through, ease version matching [britth] #3812
18
233
  * Redsys: Redsys: Harden 3DS v1/v2 check for External MPI [esmitperez] #3814
19
234
  * Add card types for Stripe, Worldpay, Checkout.com [LinTrieu] #3810
235
+ * ActiveMerchant::Billing::Response: Include `network_transaction_id` attribute [therufs] #3815
20
236
 
21
237
  == Version 1.116.0 (October 28th)
22
238
  * Remove Braintree specific version dependency [pi3r] #3800
@@ -62,6 +278,7 @@
62
278
  * Checkout V2: Support for attempt_n3d 3DS field [naashton] #3790
63
279
  * Elavon: Strip ampersands [therufs] #3795
64
280
  * Paybox: Add support for 3DS 1.0 values [jcpaybox] #3335
281
+ * Decidir: Add additional fraud_detection options [cdmackeyfree] #3812
65
282
 
66
283
  == Version 1.114.0
67
284
  * BlueSnap: Add address1,address2,phone,shipping_* support #3749
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # Active Merchant
2
- [![Build Status](https://travis-ci.org/activemerchant/active_merchant.svg?branch=master)](https://travis-ci.org/activemerchant/active_merchant)
2
+ [![Build Status](https://github.com/activemerchant/active_merchant/workflows/CI/badge.svg?branch=master)](https://github.com/activemerchant/active_merchant/actions?query=workflow%3ACI)
3
3
  [![Code Climate](https://codeclimate.com/github/activemerchant/active_merchant.svg)](https://codeclimate.com/github/activemerchant/active_merchant)
4
4
 
5
5
  Active Merchant is an extraction from the ecommerce system [Shopify](http://www.shopify.com).
@@ -17,7 +17,7 @@ from an ever-growing set of contributors.
17
17
  See [GettingStarted.md](GettingStarted.md) if you want to learn more about using Active Merchant in your
18
18
  applications.
19
19
 
20
- If you'd like to contribute to Active Merchant, please start with our [contribution guide](CONTRIBUTING.md).
20
+ If you'd like to contribute to Active Merchant, please start with our [Contribution Guide](https://github.com/activemerchant/active_merchant/wiki/Contributing).
21
21
 
22
22
  ## Installation
23
23
 
@@ -81,6 +81,8 @@ if credit_card.validate.empty?
81
81
  end
82
82
  ```
83
83
 
84
+ ## Contributing
85
+
84
86
  For more in-depth documentation and tutorials, see [GettingStarted.md](GettingStarted.md) and the
85
87
  [API documentation](http://www.rubydoc.info/github/activemerchant/active_merchant/).
86
88
 
@@ -158,7 +160,7 @@ The [ActiveMerchant Wiki](https://github.com/activemerchant/active_merchant/wiki
158
160
  * [Metrics Global](http://www.metricsglobal.com) - US
159
161
  * [MasterCard Internet Gateway Service (MiGS)](http://mastercard.com/mastercardsps) - AU, AE, BD, BN, EG, HK, ID, IN, JO, KW, LB, LK, MU, MV, MY, NZ, OM, PH, QA, SA, SG, TT, VN
160
162
  * [Modern Payments](http://www.modpay.com) - US
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
163
+ * [MONEI](http://www.monei.com/) - 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
162
164
  * [Moneris](http://www.moneris.com/) - CA
163
165
  * [MoneyMovers](http://mmoa.us/) - US
164
166
  * [NAB Transact](http://transact.nab.com.au) - AU
@@ -13,6 +13,16 @@ module ActiveMerchant #:nodoc:
13
13
  # Used for Canadian bank accounts
14
14
  attr_accessor :institution_number, :transit_number
15
15
 
16
+ # Canadian Institution Numbers
17
+ # Found here: https://en.wikipedia.org/wiki/Routing_number_(Canada)
18
+ CAN_INSTITUTION_NUMBERS = %w(
19
+ 001 002 003 004 006 010 016 030 039 117 127 177 219 245 260 269 270 308
20
+ 309 310 315 320 338 340 509 540 608 614 623 809 815 819 828 829 837 839
21
+ 865 879 889 899 241 242 248 250 265 275 277 290 294 301 303 307 311 314
22
+ 321 323 327 328 330 332 334 335 342 343 346 352 355 361 362 366 370 372
23
+ 376 378 807 853
24
+ )
25
+
16
26
  def name
17
27
  @name ||= "#{first_name} #{last_name}".strip
18
28
  end
@@ -56,20 +66,17 @@ module ActiveMerchant #:nodoc:
56
66
  # See http://en.wikipedia.org/wiki/Routing_transit_number#Internal_checksums
57
67
  def valid_routing_number?
58
68
  digits = routing_number.to_s.split('').map(&:to_i).select { |d| (0..9).cover?(d) }
59
- case digits.size
60
- when 9
69
+ if digits.size == 9
61
70
  checksum = ((3 * (digits[0] + digits[3] + digits[6])) +
62
- (7 * (digits[1] + digits[4] + digits[7])) +
63
- (digits[2] + digits[5] + digits[8])) % 10
64
- case checksum
65
- when 0
66
- true
67
- else
68
- false
69
- end
70
- else
71
- false
71
+ (7 * (digits[1] + digits[4] + digits[7])) +
72
+ (digits[2] + digits[5] + digits[8])) % 10
73
+
74
+ return checksum == 0
72
75
  end
76
+
77
+ return CAN_INSTITUTION_NUMBERS.include?(routing_number[0..2]) if digits.size == 8
78
+
79
+ false
73
80
  end
74
81
  end
75
82
  end
@@ -24,6 +24,9 @@ module ActiveMerchant #:nodoc:
24
24
  # * Naranja
25
25
  # * UnionPay
26
26
  # * Alia
27
+ # * Olimpica
28
+ # * Creditel
29
+ # * Confiable
27
30
  #
28
31
  # For testing purposes, use the 'bogus' credit card brand. This skips the vast majority of
29
32
  # validations, allowing you to focus on your core concerns until you're ready to be more concerned
@@ -100,6 +103,9 @@ module ActiveMerchant #:nodoc:
100
103
  # * +'naranja'+
101
104
  # * +'union_pay'+
102
105
  # * +'alia'+
106
+ # * +'olimpica'+
107
+ # * +'creditel'+
108
+ # * +'confiable'+
103
109
  #
104
110
  # Or, if you wish to test your implementation, +'bogus'+.
105
111
  #
@@ -15,6 +15,7 @@ module ActiveMerchant #:nodoc:
15
15
  case option
16
16
  when :two_digits then sprintf('%.2i', number.to_i)[-2..-1]
17
17
  when :four_digits then sprintf('%.4i', number.to_i)[-4..-1]
18
+ when :four_digits_year then number.to_s.length == 2 ? '20' + number.to_s : format(number, :four_digits)
18
19
  else number
19
20
  end
20
21
  end
@@ -7,11 +7,11 @@ module ActiveMerchant #:nodoc:
7
7
  'master' => ->(num) { num&.size == 16 && in_bin_range?(num.slice(0, 6), MASTERCARD_RANGES) },
8
8
  'elo' => ->(num) { num&.size == 16 && in_bin_range?(num.slice(0, 6), ELO_RANGES) },
9
9
  'alelo' => ->(num) { num&.size == 16 && in_bin_range?(num.slice(0, 6), ALELO_RANGES) },
10
- 'discover' => ->(num) { num =~ /^(6011|65\d{2}|64[4-9]\d)\d{12,15}|(62\d{14,17})$/ },
10
+ 'discover' => ->(num) { num =~ /^(6011|65\d{2}|64[4-9]\d)\d{12,15}$/ },
11
11
  'american_express' => ->(num) { num =~ /^3[47]\d{13}$/ },
12
12
  'naranja' => ->(num) { num&.size == 16 && in_bin_range?(num.slice(0, 6), NARANJA_RANGES) },
13
13
  'diners_club' => ->(num) { num =~ /^3(0[0-5]|[68]\d)\d{11,16}$/ },
14
- 'jcb' => ->(num) { num =~ /^35(28|29|[3-8]\d)\d{12}$/ },
14
+ 'jcb' => ->(num) { num&.size == 16 && in_bin_range?(num.slice(0, 4), JCB_RANGES) },
15
15
  'dankort' => ->(num) { num =~ /^5019\d{12}$/ },
16
16
  'maestro' => lambda { |num|
17
17
  (12..19).cover?(num&.size) && (
@@ -19,6 +19,7 @@ module ActiveMerchant #:nodoc:
19
19
  MAESTRO_BINS.any? { |bin| num.slice(0, bin.size) == bin }
20
20
  )
21
21
  },
22
+ 'maestro_no_luhn' => ->(num) { num =~ /^(501080|501081|501082)\d{10}$/ },
22
23
  'forbrugsforeningen' => ->(num) { num =~ /^600722\d{10}$/ },
23
24
  'sodexo' => ->(num) { num =~ /^(606071|603389|606070|606069|606068|600818)\d{10}$/ },
24
25
  'alia' => ->(num) { num =~ /^(504997|505878|601030|601073|505874)\d{10}$/ },
@@ -30,7 +31,11 @@ module ActiveMerchant #:nodoc:
30
31
  in_bin_range?(num.slice(0, 6), CARNET_RANGES) ||
31
32
  CARNET_BINS.any? { |bin| num.slice(0, bin.size) == bin }
32
33
  )
33
- }
34
+ },
35
+ 'olimpica' => ->(num) { num =~ /^636853\d{10}$/ },
36
+ 'creditel' => ->(num) { num =~ /^601933\d{10}$/ },
37
+ 'confiable' => ->(num) { num =~ /^560718\d{10}$/ },
38
+ 'synchrony' => ->(num) { num =~ /^700600\d{10}$/ }
34
39
  }
35
40
 
36
41
  # http://www.barclaycard.co.uk/business/files/bin_rules.pdf
@@ -69,19 +74,74 @@ module ActiveMerchant #:nodoc:
69
74
  MASTERCARD_RANGES = [
70
75
  (222100..272099),
71
76
  (510000..559999),
77
+ [605272],
78
+ [606282],
79
+ [637095],
80
+ [637568],
81
+ (637599..637600),
82
+ [637609],
72
83
  ]
73
84
 
74
85
  MAESTRO_BINS = Set.new(
75
- %w[500033 581149]
86
+ %w[ 500057
87
+ 501018 501043 501045 501047 501049 501051 501072 501075 501083 501087 501089 501095
88
+ 501500
89
+ 501879 502113 502301 503175
90
+ 503645 503670
91
+ 504310 504338 504363 504533 504587 504620 504639 504656 504738 504781 504910
92
+ 507001 507002 507004 507082 507090
93
+ 560014 560565 561033
94
+ 572402 572610 572626
95
+ 576904
96
+ 578614
97
+ 581149
98
+ 585274 585697
99
+ 586509
100
+ 588729 588792
101
+ 589244 589407 589471 589605 589633 589647 589671
102
+ 590043 590206 590263 590265 590278 590361 590362 590379 590393 590590
103
+ 591235 591420 591481 591620 591770 591948 591994
104
+ 592024 592161 592184 592186 592201 592384 592393 592528 592566 592704 592735 592879 592884
105
+ 593074 593264 593272 593355 593496 593556 593589 593666 593709 593825 593963 593994
106
+ 594184 594409 594468 594475 594581 594665 594691 594710 594874 594968
107
+ 595355 595364 595532 595547 595561 595568 595743 595929
108
+ 596245 596289 596399 596405 596590 596608 596645 596646 596791 596808 596815 596846
109
+ 597077 597094 597143 597370 597410 597765 597855 597862
110
+ 598053 598054 598395 598585 598793 598794 598815 598835 598838 598880 598889
111
+ 599000 599069 599089 599148 599191 599310 599741 599742 599867
112
+ 601070 601638
113
+ 604983
114
+ 606126
115
+ 636380 636422 636502 636639
116
+ 637046 637756
117
+ 639130 639229
118
+ 690032]
76
119
  )
77
120
 
78
- # https://www.mastercard.us/content/dam/mccom/global/documents/mastercard-rules.pdf, page 73
121
+ # https://www.mastercard.us/content/dam/mccom/global/documents/mastercard-rules.pdf, page 79
79
122
  MAESTRO_RANGES = [
123
+ (500032..500033),
124
+ (501015..501016),
125
+ (501020..501021),
126
+ (501023..501029),
127
+ (501038..501041),
128
+ (501053..501058),
129
+ (501060..501063),
130
+ (501066..501067),
131
+ (501091..501092),
132
+ (501104..501105),
133
+ (501107..501108),
134
+ (501104..501105),
135
+ (501107..501108),
136
+ (501800..501899),
137
+ (502000..502099),
138
+ (503800..503899),
80
139
  (561200..561269),
81
140
  (561271..561299),
82
141
  (561320..561356),
83
142
  (581700..581751),
84
143
  (581753..581800),
144
+ (589300..589399),
85
145
  (589998..591259),
86
146
  (591261..596770),
87
147
  (596772..598744),
@@ -95,20 +155,21 @@ module ActiveMerchant #:nodoc:
95
155
  (601640..601652),
96
156
  (601689..601700),
97
157
  (602011..602050),
158
+ (630400..630499),
98
159
  (639000..639099),
99
160
  (670000..679999),
100
161
  ]
101
162
 
102
163
  # https://dev.elo.com.br/apis/tabela-de-bins, download csv from left sidebar
103
164
  ELO_RANGES = [
104
- 506707..506708, 506715..506715, 506718..506722, 506724..506724, 506726..506736, 506739..506739, 506741..506743,
105
- 506745..506747, 506753..506753, 506774..506776, 506778..506778, 509000..509001, 509003..509003, 509007..509007,
106
- 509020..509022, 509035..509035, 509039..509042, 509045..509045, 509048..509048, 509051..509071, 509073..509074,
107
- 509077..509080, 509084..509089, 509091..509094, 509098..509098, 509100..509100, 509104..509104, 509106..509109,
108
- 509257..509257, 627780..627780, 636368..636368, 650031..650033, 650035..650045, 650047..650047, 650406..650410,
109
- 650434..650436, 650439..650439, 650485..650504, 650506..650530, 650577..650580, 650582..650591, 650721..650727,
110
- 650901..650922, 650928..650928, 650938..650939, 650946..650948, 650954..650955, 650962..650963, 650967..650967,
111
- 650971..650971, 651652..651667, 651675..651678, 655000..655010, 655012..655015, 655051..655052, 655056..655057
165
+ 506707..506708, 506715..506715, 506717..506722, 506724..506736, 506739..506743,
166
+ 506745..506747, 506753..506753, 506774..506778, 509000..509007, 509009..509014,
167
+ 509020..509030, 509035..509042, 509044..509089, 509091..509101, 509104..509807,
168
+ 509831..509877, 509897..509900, 509918..509964, 509971..509986, 509995..509999,
169
+ 627780..627780, 636368..636368, 650031..650033, 650035..650051, 650057..650081,
170
+ 650406..650439, 650485..650504, 650506..650538, 650552..650598, 650720..650727,
171
+ 650901..650922, 650928..650928, 650938..650939, 650946..650978, 651652..651704,
172
+ 655000..655019, 655021..655057
112
173
  ]
113
174
 
114
175
  # Alelo provides BIN ranges by e-mailing them out periodically.
@@ -120,8 +181,9 @@ module ActiveMerchant #:nodoc:
120
181
  402588..402588, 404347..404347, 405876..405876, 405882..405882, 405884..405884,
121
182
  405886..405886, 430471..430471, 438061..438061, 438064..438064, 470063..470066,
122
183
  496067..496067, 506699..506704, 506706..506706, 506713..506714, 506716..506716,
123
- 506749..506750, 506752..506752, 506754..506756, 506758..506762, 506764..506767,
124
- 506770..506771, 509015..509019, 509880..509882, 509884..509885, 509987..509992
184
+ 506749..506750, 506752..506752, 506754..506756, 506758..506767, 506770..506771,
185
+ 506773..506773, 509015..509019, 509880..509882, 509884..509885, 509887..509887,
186
+ 509987..509992
125
187
  ]
126
188
 
127
189
  CABAL_RANGES = [
@@ -134,14 +196,16 @@ module ActiveMerchant #:nodoc:
134
196
  589562..589562
135
197
  ]
136
198
 
137
- # In addition to the BIN ranges listed here that all begin with 81, UnionPay cards
138
- # include many ranges that start with 62.
139
- # Prior to adding UnionPay, cards that start with 62 were all classified as Discover.
140
- # Because UnionPay cards are able to run on Discover rails, this was kept the same.
199
+ # https://www.discoverglobalnetwork.com/content/dam/discover/en_us/dgn/pdfs/IPP-VAR-Enabler-Compliance.pdf
141
200
  UNIONPAY_RANGES = [
201
+ 62212600..62379699, 62400000..62699999, 62820000..62889999,
142
202
  81000000..81099999, 81100000..81319999, 81320000..81519999, 81520000..81639999, 81640000..81719999
143
203
  ]
144
204
 
205
+ JCB_RANGES = [
206
+ 3528..3589, 3088..3094, 3096..3102, 3112..3120, 3158..3159, 3337..3349
207
+ ]
208
+
145
209
  def self.included(base)
146
210
  base.extend(ClassMethods)
147
211
  end
@@ -149,7 +213,7 @@ module ActiveMerchant #:nodoc:
149
213
  def self.in_bin_range?(number, ranges)
150
214
  bin = number.to_i
151
215
  ranges.any? do |range|
152
- range.cover?(bin)
216
+ range.include?(bin)
153
217
  end
154
218
  end
155
219
 
@@ -298,7 +362,9 @@ module ActiveMerchant #:nodoc:
298
362
  case brand
299
363
  when 'naranja'
300
364
  valid_naranja_algo?(numbers)
301
- when 'alia'
365
+ when 'creditel'
366
+ valid_creditel_algo?(numbers)
367
+ when 'alia', 'confiable', 'maestro_no_luhn'
302
368
  true
303
369
  else
304
370
  valid_luhn?(numbers)
@@ -352,7 +418,7 @@ module ActiveMerchant #:nodoc:
352
418
  sum % 10 == 0
353
419
  end
354
420
 
355
- # Checks the validity of a card number by use of Naranja's specific algorithm.
421
+ # Checks the validity of a card number by use of specific algorithms
356
422
  def valid_naranja_algo?(numbers) #:nodoc:
357
423
  num_array = numbers.to_s.chars.map(&:to_i)
358
424
  multipliers = [4, 3, 2, 7, 6, 5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
@@ -361,6 +427,14 @@ module ActiveMerchant #:nodoc:
361
427
  final_num = intermediate > 9 ? 0 : intermediate
362
428
  final_num == num_array[15]
363
429
  end
430
+
431
+ def valid_creditel_algo?(numbers) #:nodoc:
432
+ num_array = numbers.to_s.chars.map(&:to_i)
433
+ multipliers = [5, 4, 3, 2, 1, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9]
434
+ num_sum = num_array[0..14].zip(multipliers).map { |a, b| a * b }.reduce(:+)
435
+ final_num = num_sum % 10
436
+ final_num == num_array[15]
437
+ end
364
438
  end
365
439
  end
366
440
  end