activemerchant 1.123.0 → 1.126.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 +206 -0
- data/lib/active_merchant/billing/check.rb +5 -8
- data/lib/active_merchant/billing/credit_card.rb +10 -0
- data/lib/active_merchant/billing/credit_card_methods.rb +18 -3
- data/lib/active_merchant/billing/gateway.rb +3 -2
- data/lib/active_merchant/billing/gateways/adyen.rb +66 -11
- data/lib/active_merchant/billing/gateways/airwallex.rb +341 -0
- data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +2 -1
- data/lib/active_merchant/billing/gateways/blue_pay.rb +1 -1
- data/lib/active_merchant/billing/gateways/blue_snap.rb +31 -21
- data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +6 -1
- data/lib/active_merchant/billing/gateways/braintree/token_nonce.rb +113 -0
- data/lib/active_merchant/billing/gateways/braintree_blue.rb +87 -15
- data/lib/active_merchant/billing/gateways/card_connect.rb +1 -1
- data/lib/active_merchant/billing/gateways/card_stream.rb +17 -13
- data/lib/active_merchant/billing/gateways/cashnet.rb +15 -5
- data/lib/active_merchant/billing/gateways/checkout_v2.rb +34 -5
- data/lib/active_merchant/billing/gateways/credorax.rb +10 -0
- data/lib/active_merchant/billing/gateways/cyber_source.rb +24 -36
- data/lib/active_merchant/billing/gateways/d_local.rb +61 -6
- data/lib/active_merchant/billing/gateways/decidir.rb +17 -1
- data/lib/active_merchant/billing/gateways/decidir_plus.rb +344 -0
- data/lib/active_merchant/billing/gateways/ebanx.rb +19 -3
- data/lib/active_merchant/billing/gateways/elavon.rb +6 -3
- data/lib/active_merchant/billing/gateways/element.rb +20 -2
- data/lib/active_merchant/billing/gateways/global_collect.rb +137 -32
- data/lib/active_merchant/billing/gateways/ipg.rb +415 -0
- data/lib/active_merchant/billing/gateways/kushki.rb +7 -0
- data/lib/active_merchant/billing/gateways/litle.rb +93 -1
- data/lib/active_merchant/billing/gateways/mercado_pago.rb +3 -1
- data/lib/active_merchant/billing/gateways/mit.rb +260 -0
- data/lib/active_merchant/billing/gateways/moka.rb +24 -11
- data/lib/active_merchant/billing/gateways/moneris.rb +35 -8
- data/lib/active_merchant/billing/gateways/mundipagg.rb +8 -6
- data/lib/active_merchant/billing/gateways/nmi.rb +27 -8
- data/lib/active_merchant/billing/gateways/orbital.rb +357 -319
- data/lib/active_merchant/billing/gateways/pay_arc.rb +9 -7
- data/lib/active_merchant/billing/gateways/pay_conex.rb +3 -1
- data/lib/active_merchant/billing/gateways/pay_trace.rb +1 -1
- data/lib/active_merchant/billing/gateways/payflow.rb +76 -6
- data/lib/active_merchant/billing/gateways/paymentez.rb +35 -9
- data/lib/active_merchant/billing/gateways/paysafe.rb +155 -34
- data/lib/active_merchant/billing/gateways/payu_latam.rb +31 -16
- data/lib/active_merchant/billing/gateways/payway_dot_com.rb +3 -3
- data/lib/active_merchant/billing/gateways/pin.rb +31 -4
- data/lib/active_merchant/billing/gateways/priority.rb +369 -0
- data/lib/active_merchant/billing/gateways/rapyd.rb +258 -0
- data/lib/active_merchant/billing/gateways/realex.rb +18 -0
- data/lib/active_merchant/billing/gateways/safe_charge.rb +7 -6
- data/lib/active_merchant/billing/gateways/simetrik.rb +362 -0
- data/lib/active_merchant/billing/gateways/stripe.rb +30 -8
- data/lib/active_merchant/billing/gateways/stripe_payment_intents.rb +175 -72
- data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +2 -1
- data/lib/active_merchant/billing/gateways/trust_commerce.rb +2 -1
- data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +20 -6
- data/lib/active_merchant/billing/gateways/visanet_peru.rb +6 -2
- data/lib/active_merchant/billing/gateways/wompi.rb +193 -0
- data/lib/active_merchant/billing/gateways/worldpay.rb +196 -64
- data/lib/active_merchant/billing/network_tokenization_credit_card.rb +1 -1
- data/lib/active_merchant/billing/response.rb +4 -0
- data/lib/active_merchant/version.rb +1 -1
- metadata +11 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5bd1687aa128f1fce724fd39276bdb068552dc55e5dadeeab08a127781d54b31
|
4
|
+
data.tar.gz: 9519db6995b762487012de3fb0e47ef2f89587d26889fb6c2bbc0e1a74a88713
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af5c8f0f3d87e24ab864c880bde2be9374a60ebb47fdb57feafd0e80e790f585a18be65e331d07b2029c8679e1d35fb7f3baa482590da5bb4959828d5e7f5526
|
7
|
+
data.tar.gz: e2584e54260092929898ef7af600eecdb28d9641b7de50519eab20e1ad7929c67aada43ab93166af057e18f1f408fc9c9d45b36c010650d840b187661318f962
|
data/CHANGELOG
CHANGED
@@ -1,7 +1,213 @@
|
|
1
|
+
|
1
2
|
= ActiveMerchant CHANGELOG
|
2
3
|
|
3
4
|
== HEAD
|
4
5
|
|
6
|
+
== Version 1.126.0 (April 15th, 2022)
|
7
|
+
* Moneris: Add 3DS MPI field support [esmitperez] #4373
|
8
|
+
* StripePI: Add ability to change payment_method_type to confirm_intent [aenand] #4300
|
9
|
+
* GlobalCollect: Improve support for Naranja and Cabal card types [dsmcclain] #4286
|
10
|
+
* Payflow: Add support for stored credentials [ajawadmirza] #4277
|
11
|
+
* Orbital: Don't void $0 auths for Verify [javierpedrozaing] #2487
|
12
|
+
* StripePI: Enable Apple Pay and Google Pay payment methods [gasb150] #4252
|
13
|
+
* PaySafe: Update `unstore` method and authorization for redact [ajawadmirza] #4294
|
14
|
+
* CyberSource: Add `national_tax_indicator` fields in authorize and purchase [ajawadmirza] #4299
|
15
|
+
* NMI: Update gateway credentials to accept security_key [javierpedrozaing] #4302
|
16
|
+
* PaySafe: Fix commit for `unstore` method [ajawadmirza] #4303
|
17
|
+
* Ebanx: Add support for `order_number` field [ali-hassan] #4304
|
18
|
+
* BlueSnap: Add support for `idempotency_key` field [drkjc] #4305
|
19
|
+
* Paymentez: Update `capture` method to verify by otp for pending transactions [ajawadmirza] #4267
|
20
|
+
* BlueSnap: Update refund request and endpoint along with merchant transaction support [ajawadmirza] #4307
|
21
|
+
* DecidirPlus: Added `authorize`, `capture`, `void`, and `verify` methods [ajawadmirza] #4284
|
22
|
+
* Paymentez: Fix `authorize` to call `purchase` for otp flow [ajawadmirza] #4310
|
23
|
+
* Orbital: Indicate support for network tokenization [dsmcclain] #4309
|
24
|
+
* IPG: remove `uruguay` from supported countries [ajawadmirza] #4311
|
25
|
+
* Decidir: Add sub_payments sub-fields to gateway [meagabeth] #4315
|
26
|
+
* Priority: Add additional fields to purchase and capture requests [dsmcclain] #4301
|
27
|
+
* DecidirPlus: Added `unstore` method [ajawadmirza] #4317
|
28
|
+
* Decidir & Decidir Plus: Revise handling of `sub_payment` sub-fields [meagabeth] #4318
|
29
|
+
* DecidirPlus: Update `unstore` implementation to get token from params [ajawadmirza] #4320
|
30
|
+
* CyberSource: Add option for zero amount verify [gasb150] #4313
|
31
|
+
* PayU Latam: Refactor `message_from` method, fix failing remote tests [rachelkirk] #4326
|
32
|
+
* Adyen: Add currencies with three decimals places [gasb150] #4322
|
33
|
+
* GlobalCollect: Stregthen success criteria for void action [peteroas] #4324
|
34
|
+
* Priority Payment Systems - Clean up/refactor gateway file and tests [ali-hassan] #4327
|
35
|
+
* SafeCharge: change `verify` to send 0 amount [dsmcclain] #4332
|
36
|
+
* DLocal: add support for `force_type` field [dsmcclain] #4336
|
37
|
+
* Barclaycard SmartPay: Support more nonstandard currencies [jherreraa] #4335
|
38
|
+
* DecidirPlus: `name_override` option on `store` [naashton] #4338
|
39
|
+
* Priority: Update `add_purchases_data` to return if `options[:purchases]` is empty [drkjc] #4349
|
40
|
+
* Stripe PI: update `shipping` field to `shipping_address` [ajawadmirza] #4347
|
41
|
+
* DecidirPlus: Handle `payment_method_id` by `card_brand` [naashton] #4350
|
42
|
+
* DecidirPlus: `debit` and `payment_method_id` fields [naashton] #4351
|
43
|
+
* Adyen: Include Application ID in adyen authorize and purchase transactions [peteroas] #4343
|
44
|
+
* Priority: Add support for `replay_id` field [drkjc] #4352
|
45
|
+
* Stripe PI: standardize `shipping_address` fields [dsmcclain] #4355
|
46
|
+
* Airwallex: support gateway [therufs] #4342
|
47
|
+
* Litle: Translate google_pay as android_pay [javierpedrozaing] #4331
|
48
|
+
* Braintree: Add ACH support for store [cristian] #4285
|
49
|
+
* Simetrik: Add support for Simetrik gateway [simetrik-frank] #4339
|
50
|
+
* EBANX: Change amount for Mexico and Chile [flaaviaa] #4337
|
51
|
+
* DecidirPlus: Add `establishment_name`, `aggregate_data`, `sub_payments`, `card_holder_identification_type`, `card_holder_identification_number`, `card_door_number`, and `card_holder_birthday` fields [ajawadmirza] #4361
|
52
|
+
* DecidirPlus: Update `error_code_from` to get error reason id [ajawadmirza] #4364
|
53
|
+
* Dlocal: Add three_ds mpi support [cristian] #4345
|
54
|
+
* Stripe PI: Add `request_three_d_secure` field for `create_setup_intent` [aenand] #4365
|
55
|
+
* Adyen: Add `verify_amount` field for verify [ajawadmirza] #4369
|
56
|
+
* Stripe PI: Pass options for tokenizing Apple/Google Pay [gasb150] #4368
|
57
|
+
* Dlocal: Format 3DS mpi enrollment data correctly [cristian] #4371
|
58
|
+
* Airwallex: QA fixes for option handling [therufs] #4367
|
59
|
+
* CardConnect: Fixed duplicate(concat) Address sent - card_connect is concat. address1 and 2 causing a AVS error [ahmirza] #4362
|
60
|
+
* CyberSource: Remove Pinless Debit Transaction Functionality [peteroas] #4370
|
61
|
+
* Litle: Add support for Level 2 and 3 enhanced data [curiousepic] #4360
|
62
|
+
* Rapyd: Add gateway support [meagabeth] #4372
|
63
|
+
* CyberSource: Update and fix test coverage [peteroas] #4374
|
64
|
+
* Airwallex: QA fixes for address and create_setup_intent handling [therufs] #4377
|
65
|
+
* Airwallex: add `descriptor` field and update logic for sending `request_id` and `merchant_order_id` [dsmcclain] #4379
|
66
|
+
* Visanet Peru: use timestamp instead of random for purchaseNumber [therufs] #4093
|
67
|
+
* Orbital: add `verify_amount` field [ajawadmirza] #4376
|
68
|
+
* Credorax: add `recipient_street_address`, `recipient_city`, `recipient_province_code`, and `recipient_country_code` fields [ajawadmirza] #4384
|
69
|
+
* Airwallex: add support for stored credentials [drkjc] #4382
|
70
|
+
* Rapyd: Add metadata and ewallet_id options [naashton] #4387
|
71
|
+
* Priority: Add additional fields to request and refactor gateway integration [dsmcclain] #4383
|
72
|
+
* Rapyd: Update `type` option to `pm_type` [naashton] #4391
|
73
|
+
* Conekta: Fix remote test [javierpedrozaing] #4386
|
74
|
+
* NMI: Update post URL [jherreraa] #4380
|
75
|
+
* Multiple Gateways: Resolve when/case bug [naashton] #4399
|
76
|
+
* Airwallex: Add 3DS MPI support [drkjc] #4395
|
77
|
+
* Add Cartes Bancaires card bin ranges [leahriffell] #4398
|
78
|
+
|
79
|
+
== Version 1.125.0 (January 20, 2022)
|
80
|
+
* Wompi: support gateway [therufs] #4173
|
81
|
+
* Stripe Payment Intents: Add setup_purchase [aenand] #4178
|
82
|
+
* Ipg: Add new gateway [ajawadmirza] #4171
|
83
|
+
* Worldpay: Adding support for google pay and apple pay [cristian] #4180
|
84
|
+
* Worldpay: Adding scrubbing for network token transactions [cristian] #4181
|
85
|
+
* SafeCharge: Add sg_NotUseCVV field [ajawadmirza] #4177
|
86
|
+
* PayULatam: Correctly map maestro and condensa card types [dsmcclain] #4182
|
87
|
+
* StripePaymentIntents: Refactor response for setup_purchase [aenand] #4183
|
88
|
+
* Wompi: cast error messages to JSON [therufs] #4186
|
89
|
+
* NMI: Omit initial_transaction_id for CIT [aenand] #4189
|
90
|
+
* Priority: Support Priority Payment Systems gateway [jessiagee] #4166
|
91
|
+
* GlobalCollect: Support for Lodging Data [naashton] #4190
|
92
|
+
* IPG: Add support for sub-merchant and recurring type fields [ajawadmirza] # 4188
|
93
|
+
* Wompi: Support `installments` option [therufs] #4192
|
94
|
+
* Stripe PI: add support for `fulfillment_date` and `event_type` [dsmcclain] #4193
|
95
|
+
* Paysafe: Adjust logic for sending 3DS field [meagabeth] #4194
|
96
|
+
* Priority: Fix unit test cases [ajawadmirza] #4195
|
97
|
+
* EBANX: New Gateway Specific Receiver [spreedly-kledoux] #4198
|
98
|
+
* Wompi: Don't send CVV field if no CVV provided [therufs] #4199
|
99
|
+
* Worldpay: cleaning order_id according to worldpay rules [cristian] #4197
|
100
|
+
* Paysafe: Concatenate credentials for headers [meagabeth] #4201
|
101
|
+
* Stripe Payment Intents: Add metadata to setup_purchase [aenand] #4202
|
102
|
+
* Priority: Add gateway standard changes [ajawadmirza] #4200
|
103
|
+
* IPG: Add support for payment by token [ajawadmirza] #4191
|
104
|
+
* Element (Vantiv Express): Add support for general credit [dsmcclain] #4203
|
105
|
+
* Worldpay: Update supported countries list, currencies [jherreraa] #4207
|
106
|
+
* StripePI: Adding countries available. [gasb150] #4208
|
107
|
+
* Orbital: Adding google pay payment tests for Orbital. [ajawadmirza] #4205
|
108
|
+
* Bug: Fixing supported countries method when there is inheritance involved [cristian] #4211
|
109
|
+
* Mundipagg: Update success method [ajawadmirza] #4210
|
110
|
+
* Worldpay: Add support for Visa Direct Fast Funds Credit [dsmcclain] #4212
|
111
|
+
* Paysafe: Add support for stored credentials [meagabeth] #4214
|
112
|
+
* Worldpay: Adding missing countries to supported countries [cristian] #4213
|
113
|
+
* Update institution numbers for Canadian banks [therufs] #4216
|
114
|
+
* Worldpay: Set default eCommerce indicator for EMVCO network tokens [shasum] #4215
|
115
|
+
* Update handling routing numbers for Canadian banks [therufs] #4217
|
116
|
+
* Stripe: API version updated [jherreraa] #4209
|
117
|
+
* Mercado Pago: Update verify method [ajawadmirza] #4219
|
118
|
+
* DLocal: Set API Version [gasb150] #4222
|
119
|
+
* Wompi: Add support for Authorize and Capture [rachelkirk] #4218
|
120
|
+
* Priority: Update source and billing address checks [jessiagee] #4220
|
121
|
+
* Pin Payments: Add support for `diners_club`, `discover`, and `jcb` cardtypes [montdidier] #4142
|
122
|
+
* USA ePay: Add store method [ajawadmirza] #4224
|
123
|
+
* IPG: Quick fix to remove warning [ajawadmirza] #4225
|
124
|
+
* Remove YAML warning on load_fixtures_method [jherreraa] #4226
|
125
|
+
* Worldpay: Add support for tokenizing payment methods with transaction identifiers [dsmcclain] #4227
|
126
|
+
* USA ePay: Update implementation to send valid authorization [ajawadmirza] #4231
|
127
|
+
* USA ePay: Add store test, update authorize param [jessiagee] #4232
|
128
|
+
* Stripe: Update destination test account [jherreraa] #4234
|
129
|
+
* Add skip_response option on request check for commit stubs [cristian] #4223
|
130
|
+
* Pin Payments: Add support for `void` and New Zealand to supported countries. [montdidier] #4144
|
131
|
+
* Wompi: Update authorization in `capture` method. [rachelkirk] #4238
|
132
|
+
* IPG: Update authorization to support `store` method token. [ajawadmirza] #4233
|
133
|
+
* Paymentez: Update card mappings [ajawadmirza] #4237
|
134
|
+
* Priority: Update parsing for error messages [jessiagee] #4245
|
135
|
+
* GlobalCollect: Support for Airline Data [naashton] #4187
|
136
|
+
* IPG: Add `tpv_error_code` and `tpv_error_msg` fields [ajawadmirza] #4241
|
137
|
+
* StripePI: Set restriction for Apple/Google Pay [jherreraa] #4247
|
138
|
+
* Cashnet: support multiple itemcodes and amounts [peteroas] #4243
|
139
|
+
* IPG: Send default currency in `verify` and two digit `ExpMonth` [ajawadmirza] #4244
|
140
|
+
* Stripe: Add remote tests set up to avoid exceed the max external accounts limit [jherreraa] #4239
|
141
|
+
* Stripe: Add support for `radar_options: skip_rules` [dsmcclain] #4250
|
142
|
+
* CyberSource: Add `user_po`, `taxable`, `national_tax_indicator`, `tax_amount`, and `national_tax` fields [ajawadmirza] #4251
|
143
|
+
* Kushki: Add support for `metadata` [rachelkirk] #4253
|
144
|
+
* IPG: Add `redact` operation [ajawadmirza] #4254
|
145
|
+
* Wompi: Update sandbox and production endpoints [rachelkirk] #4255
|
146
|
+
* Orbital: Add `sca_merchant_initiated` operation [ajawadmirza] #4256
|
147
|
+
* Cashnet: convert amounts to integers for proper gateway handling [peteroas] #2207
|
148
|
+
* PayTrace: Add `unstore` operation [ajawadmirza] #4262
|
149
|
+
* Decidir Plus: Add gateway adapter [naashton] #4264
|
150
|
+
* CheckoutV2: Add support for Apple Pay and Google Pay tokens [AMHOL] #4235
|
151
|
+
* Decidir Plus: Update payment reference [naashton] #4271
|
152
|
+
* Paysafe: Update redact method [meagabeth] #4269
|
153
|
+
* CyberSource: Add `line_items` field in authorize method [ajawadmirza] #4268
|
154
|
+
* CheckoutV2: Support processing channel and marketplace sub entity ID [AMHOL] #4236
|
155
|
+
* Elavon: `third_party_token` bug fix [rachelkirk] #4273
|
156
|
+
* Decidir Plus: Add `sub_payments` field [naashton] #4274
|
157
|
+
* Pin Payments: Add `unstore` support [montdidier] #4276
|
158
|
+
* Orbital: Add support for $0 verify [javierpedrozaing] #4275
|
159
|
+
* Update inline documentation with all supported cardtypes [ali-hassan] #4283
|
160
|
+
* PayWay: Update endpoints, response code [jessiagee] #4281
|
161
|
+
* CyberSource: Add `line_items` for purchase [ajawadmirza] #4282
|
162
|
+
* Payflow Pro: Add `stored_credential` fields [ajawadmirza] #4277
|
163
|
+
* Decidir Plus: Add `fraud_detection` fields [naashton] #4289
|
164
|
+
|
165
|
+
== Version 1.124.0 (October 28th, 2021)
|
166
|
+
* Worldpay: Add Support for Submerchant Data on Worldpay [almalee24] #4147
|
167
|
+
* dlocal: Add device_id and ip to payer object and add additional_data [aenand] #4116
|
168
|
+
* Adyen: Add network tokenization support to Adyen gateway [mymir] #4101
|
169
|
+
* Adyen: Add ACH Support [almalee24] #4105
|
170
|
+
* Moka: Support 3DS endpoint and update test url [dsmcclain] #4110
|
171
|
+
* Paysafe: Adjust profile data [meagabeth] #4112
|
172
|
+
* Stripe Payment Intents: Add support for claim_without_transaction_id field [BritneyS] #4111
|
173
|
+
* Mit: Add New Gateway [EsporaInfra] #3820
|
174
|
+
* Routex: add card type [rachelkirk] #4115
|
175
|
+
* Orbital: Scrub Payment Cryptogram [naashton] #4121
|
176
|
+
* Paysafe: Add support for airline fields [meagabeth] #4120
|
177
|
+
* Stripe and Stripe PI: Add Radar Session Option [tatsianaclifton] #4119
|
178
|
+
* PayArc: Fix billing address nil and phone_number issues [dsmcclain] #4114
|
179
|
+
* Routex: Update BIN numbers [rachelkirk] #4123
|
180
|
+
* UnionPay: Add Stripe's UnionPay test card to UnionPay BIN range #4122
|
181
|
+
* GlobalCollect: Support URL override [naashton] #4127
|
182
|
+
* PayConex: scrub bank account info from transcripts [mbreenlyles] #4128
|
183
|
+
* Moka: Remove additional transaction data from subsequent calls [naashton] #4129
|
184
|
+
* Moka: Ensure CvcNumber can be an empty string [jessiagee] #4130
|
185
|
+
* Maestro: Allow more card lengths for Luhnless bins [therufs] #4131
|
186
|
+
* Paysafe: Update supported countries [meagabeth] #4135
|
187
|
+
* Paysafe: Update field mapping for split_pay [meagabeth] #4136
|
188
|
+
* SafeCharge: Add handling for non-fractional currencies [dsmcclain] #4137
|
189
|
+
* CardStream: Support passing country_code in request [dsmcclain] #4139
|
190
|
+
* Adyen: Adjust phone number mapping [aenand] #4138
|
191
|
+
* Mit: Change how parameters are converted to JSON [tatsianaclifton] #4140
|
192
|
+
* Stripe: Add account_number to scrubbing [aenand] #4145
|
193
|
+
* Stripe PI: add name on card to billing_details [dsmcclain] #4146
|
194
|
+
* TrustCommerce: Scrub bank account info [mbreenlyles] #4149
|
195
|
+
* TransFirst: Scrub account number [aenand] #4152
|
196
|
+
* Paysafe: Update supported countries list [meagabeth] #4154
|
197
|
+
* dLocal: Update supported countries list [mbreenlyles] #4155
|
198
|
+
* SafeCharge: Add support for email field in capture [rachelkirk] #4153
|
199
|
+
* Paysafe: Remove invalid code [meagabeth] #4156
|
200
|
+
* NMI: Add descriptor fields [ajawadmirza] #4157
|
201
|
+
* Authorize.net: Add tests for scrubbing banking account info (in addition to BluePay, BridgePay, Forte, HPS, and Vanco Gateways)[aenand] #4159
|
202
|
+
* Moka: Send refund amount with decimal [dsmcclain] #4160
|
203
|
+
* GlobalCollect: Append URI to the URL [naashton] #4162
|
204
|
+
* Adyen: Add application info fields [aenand] #4163
|
205
|
+
* Adyen: Send NTID from stored cred hash [curiousepic] #4164
|
206
|
+
* Payflow: use proper case for 3DS 2.x element names [bbraschi] #4113
|
207
|
+
* Realex: Add support for stored credentials [dsmcclain] #4170
|
208
|
+
* Moka: Add support for InstallmentNumber field [dsmcclain] #4172
|
209
|
+
* Payflow: include AuthenticationStatus for 3DS 2.x [bbraschi] #4168
|
210
|
+
|
5
211
|
== Version 1.123.0 (September 10th, 2021)
|
6
212
|
* Paysafe: Add gateway integration [meagabeth] #4085
|
7
213
|
* Elavon: Support recurring transactions with stored credentials [cdmackeyfree] #4086
|
@@ -14,13 +14,13 @@ module ActiveMerchant #:nodoc:
|
|
14
14
|
attr_accessor :institution_number, :transit_number
|
15
15
|
|
16
16
|
# Canadian Institution Numbers
|
17
|
-
#
|
17
|
+
# Partial list found here: https://en.wikipedia.org/wiki/Routing_number_(Canada)
|
18
18
|
CAN_INSTITUTION_NUMBERS = %w(
|
19
|
-
001 002 003 004
|
20
|
-
309 310 315 320
|
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
21
|
865 879 889 899 241 242 248 250 265 275 277 290 294 301 303 307 311 314
|
22
22
|
321 323 327 328 330 332 334 335 342 343 346 352 355 361 362 366 370 372
|
23
|
-
376 378 807 853
|
23
|
+
376 378 807 853 890
|
24
24
|
)
|
25
25
|
|
26
26
|
def name
|
@@ -71,11 +71,8 @@ module ActiveMerchant #:nodoc:
|
|
71
71
|
(7 * (digits[1] + digits[4] + digits[7])) +
|
72
72
|
(digits[2] + digits[5] + digits[8])) % 10
|
73
73
|
|
74
|
-
return checksum == 0
|
74
|
+
return checksum == 0 || CAN_INSTITUTION_NUMBERS.include?(routing_number[1..3])
|
75
75
|
end
|
76
|
-
|
77
|
-
return CAN_INSTITUTION_NUMBERS.include?(routing_number[0..2]) if digits.size == 8
|
78
|
-
|
79
76
|
false
|
80
77
|
end
|
81
78
|
end
|
@@ -18,6 +18,11 @@ module ActiveMerchant #:nodoc:
|
|
18
18
|
# * Dankort
|
19
19
|
# * Maestro
|
20
20
|
# * Forbrugsforeningen
|
21
|
+
# * Sodexo
|
22
|
+
# * Vr
|
23
|
+
# * Carnet
|
24
|
+
# * Synchrony
|
25
|
+
# * Routex
|
21
26
|
# * Elo
|
22
27
|
# * Alelo
|
23
28
|
# * Cabal
|
@@ -97,6 +102,11 @@ module ActiveMerchant #:nodoc:
|
|
97
102
|
# * +'dankort'+
|
98
103
|
# * +'maestro'+
|
99
104
|
# * +'forbrugsforeningen'+
|
105
|
+
# * +'sodexo'+
|
106
|
+
# * +'vr'+
|
107
|
+
# * +'carnet'+
|
108
|
+
# * +'synchrony'+
|
109
|
+
# * +'routex'+
|
100
110
|
# * +'elo'+
|
101
111
|
# * +'alelo'+
|
102
112
|
# * +'cabal'+
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
1
3
|
module ActiveMerchant #:nodoc:
|
2
4
|
module Billing #:nodoc:
|
3
5
|
# Convenience methods that can be included into a custom Credit Card object, such as an ActiveRecord based Credit Card object.
|
@@ -19,7 +21,7 @@ module ActiveMerchant #:nodoc:
|
|
19
21
|
MAESTRO_BINS.any? { |bin| num.slice(0, bin.size) == bin }
|
20
22
|
)
|
21
23
|
},
|
22
|
-
'maestro_no_luhn' => ->(num) { num =~ /^(501080|501081|501082)\d{
|
24
|
+
'maestro_no_luhn' => ->(num) { num =~ /^(501080|501081|501082)\d{6,13}$/ },
|
23
25
|
'forbrugsforeningen' => ->(num) { num =~ /^600722\d{10}$/ },
|
24
26
|
'sodexo' => ->(num) { num =~ /^(606071|603389|606070|606069|606068|600818)\d{10}$/ },
|
25
27
|
'alia' => ->(num) { num =~ /^(504997|505878|601030|601073|505874)\d{10}$/ },
|
@@ -32,10 +34,12 @@ module ActiveMerchant #:nodoc:
|
|
32
34
|
CARNET_BINS.any? { |bin| num.slice(0, bin.size) == bin }
|
33
35
|
)
|
34
36
|
},
|
37
|
+
'cartes_bancaires' => ->(num) { num&.size == 16 && in_bin_range?(num.slice(0, 6), CARTES_BANCAIRES_RANGES) },
|
35
38
|
'olimpica' => ->(num) { num =~ /^636853\d{10}$/ },
|
36
39
|
'creditel' => ->(num) { num =~ /^601933\d{10}$/ },
|
37
40
|
'confiable' => ->(num) { num =~ /^560718\d{10}$/ },
|
38
|
-
'synchrony' => ->(num) { num =~ /^700600\d{10}$/ }
|
41
|
+
'synchrony' => ->(num) { num =~ /^700600\d{10}$/ },
|
42
|
+
'routex' => ->(num) { num =~ /^(700676|700678)\d{13}$/ }
|
39
43
|
}
|
40
44
|
|
41
45
|
# http://www.barclaycard.co.uk/business/files/bin_rules.pdf
|
@@ -70,6 +74,17 @@ module ActiveMerchant #:nodoc:
|
|
70
74
|
]
|
71
75
|
)
|
72
76
|
|
77
|
+
CARTES_BANCAIRES_RANGES = [
|
78
|
+
(507589..507590),
|
79
|
+
(507593..507595),
|
80
|
+
[507597],
|
81
|
+
[560408],
|
82
|
+
[581752],
|
83
|
+
(585402..585405),
|
84
|
+
(585501..585505),
|
85
|
+
(585577..585582)
|
86
|
+
]
|
87
|
+
|
73
88
|
# https://www.mastercard.us/content/dam/mccom/global/documents/mastercard-rules.pdf, page 73
|
74
89
|
MASTERCARD_RANGES = [
|
75
90
|
(222100..272099),
|
@@ -198,7 +213,7 @@ module ActiveMerchant #:nodoc:
|
|
198
213
|
|
199
214
|
# https://www.discoverglobalnetwork.com/content/dam/discover/en_us/dgn/pdfs/IPP-VAR-Enabler-Compliance.pdf
|
200
215
|
UNIONPAY_RANGES = [
|
201
|
-
62212600..62379699, 62400000..62699999, 62820000..62889999,
|
216
|
+
62000000..62000000, 62212600..62379699, 62400000..62699999, 62820000..62889999,
|
202
217
|
81000000..81099999, 81100000..81319999, 81320000..81519999, 81520000..81639999, 81640000..81719999
|
203
218
|
]
|
204
219
|
|
@@ -95,7 +95,8 @@ module ActiveMerchant #:nodoc:
|
|
95
95
|
pickup_card: 'pick_up_card',
|
96
96
|
config_error: 'config_error',
|
97
97
|
test_mode_live_card: 'test_mode_live_card',
|
98
|
-
unsupported_feature: 'unsupported_feature'
|
98
|
+
unsupported_feature: 'unsupported_feature',
|
99
|
+
invalid_amount: 'invalid_amount'
|
99
100
|
}
|
100
101
|
|
101
102
|
cattr_reader :implementations
|
@@ -162,7 +163,7 @@ module ActiveMerchant #:nodoc:
|
|
162
163
|
end
|
163
164
|
|
164
165
|
def self.supported_countries
|
165
|
-
@supported_countries ||= []
|
166
|
+
@supported_countries ||= (self.superclass.supported_countries || [])
|
166
167
|
end
|
167
168
|
|
168
169
|
def supported_countries
|
@@ -9,6 +9,7 @@ module ActiveMerchant #:nodoc:
|
|
9
9
|
self.supported_countries = %w(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 US)
|
10
10
|
self.default_currency = 'USD'
|
11
11
|
self.currencies_without_fractions = %w(CVE DJF GNF IDR JPY KMF KRW PYG RWF UGX VND VUV XAF XOF XPF)
|
12
|
+
self.currencies_with_three_decimal_places = %w(BHD IQD JOD KWD LYD OMR TND)
|
12
13
|
self.supported_cardtypes = %i[visa master american_express diners_club jcb dankort maestro discover elo naranja cabal unionpay]
|
13
14
|
|
14
15
|
self.money_format = :cents
|
@@ -60,6 +61,7 @@ module ActiveMerchant #:nodoc:
|
|
60
61
|
add_splits(post, options)
|
61
62
|
add_recurring_contract(post, options)
|
62
63
|
add_network_transaction_reference(post, options)
|
64
|
+
add_application_info(post, options)
|
63
65
|
commit('authorise', post, options)
|
64
66
|
end
|
65
67
|
|
@@ -82,12 +84,13 @@ module ActiveMerchant #:nodoc:
|
|
82
84
|
end
|
83
85
|
|
84
86
|
def credit(money, payment, options = {})
|
87
|
+
action = 'refundWithData'
|
85
88
|
post = init_post(options)
|
86
89
|
add_invoice(post, money, options)
|
87
|
-
add_payment(post, payment, options)
|
90
|
+
add_payment(post, payment, options, action)
|
88
91
|
add_shopper_reference(post, options)
|
89
92
|
add_network_transaction_reference(post, options)
|
90
|
-
commit(
|
93
|
+
commit(action, post, options)
|
91
94
|
end
|
92
95
|
|
93
96
|
def void(authorization, options = {})
|
@@ -141,8 +144,9 @@ module ActiveMerchant #:nodoc:
|
|
141
144
|
end
|
142
145
|
|
143
146
|
def verify(credit_card, options = {})
|
147
|
+
amount = options[:verify_amount]&.to_i || 0
|
144
148
|
MultiResponse.run(:use_first_response) do |r|
|
145
|
-
r.process { authorize(
|
149
|
+
r.process { authorize(amount, credit_card, options) }
|
146
150
|
options[:idempotency_key] = nil
|
147
151
|
r.process(:ignore_result) { void(r.authorization, options) }
|
148
152
|
end
|
@@ -152,12 +156,19 @@ module ActiveMerchant #:nodoc:
|
|
152
156
|
true
|
153
157
|
end
|
154
158
|
|
159
|
+
def supports_network_tokenization?
|
160
|
+
true
|
161
|
+
end
|
162
|
+
|
155
163
|
def scrub(transcript)
|
156
164
|
transcript.
|
157
165
|
gsub(%r((Authorization: Basic )\w+), '\1[FILTERED]').
|
158
|
-
gsub(%r(("number\\?"
|
159
|
-
gsub(%r(("cvc\\?"
|
160
|
-
gsub(%r(("cavv\\?"
|
166
|
+
gsub(%r(("number\\?"\s*:\s*\\?")[^"]*)i, '\1[FILTERED]').
|
167
|
+
gsub(%r(("cvc\\?"\s*:\s*\\?")[^"]*)i, '\1[FILTERED]').
|
168
|
+
gsub(%r(("cavv\\?"\s*:\s*\\?")[^"]*)i, '\1[FILTERED]').
|
169
|
+
gsub(%r(("bankLocationId\\?"\s*:\s*\\?")[^"]*)i, '\1[FILTERED]').
|
170
|
+
gsub(%r(("iban\\?"\s*:\s*\\?")[^"]*)i, '\1[FILTERED]').
|
171
|
+
gsub(%r(("bankAccountNumber\\?"\s*:\s*\\?")[^"]*)i, '\1[FILTERED]')
|
161
172
|
end
|
162
173
|
|
163
174
|
private
|
@@ -209,7 +220,7 @@ module ActiveMerchant #:nodoc:
|
|
209
220
|
}
|
210
221
|
|
211
222
|
def add_extra_data(post, payment, options)
|
212
|
-
post[:telephoneNumber] = options[:billing_address][:phone] if options.dig(:billing_address, :phone)
|
223
|
+
post[:telephoneNumber] = (options[:billing_address][:phone_number] if options.dig(:billing_address, :phone_number)) || (options[:billing_address][:phone] if options.dig(:billing_address, :phone)) || ''
|
213
224
|
post[:fraudOffset] = options[:fraud_offset] if options[:fraud_offset]
|
214
225
|
post[:selectedBrand] = options[:selected_brand] if options[:selected_brand]
|
215
226
|
post[:selectedBrand] ||= NETWORK_TOKENIZATION_CARD_SOURCE[payment.source.to_s] if payment.is_a?(NetworkTokenizationCreditCard)
|
@@ -332,7 +343,7 @@ module ActiveMerchant #:nodoc:
|
|
332
343
|
post[:deliveryAddress][:stateOrProvince] = get_state(address)
|
333
344
|
post[:deliveryAddress][:country] = address[:country] if address[:country]
|
334
345
|
end
|
335
|
-
return unless post[:card]&.kind_of?(Hash)
|
346
|
+
return unless post[:bankAccount]&.kind_of?(Hash) || post[:card]&.kind_of?(Hash)
|
336
347
|
|
337
348
|
if (address = options[:billing_address] || options[:address]) && address[:country]
|
338
349
|
post[:billingAddress] = {}
|
@@ -355,6 +366,7 @@ module ActiveMerchant #:nodoc:
|
|
355
366
|
value: localized_amount(money, currency),
|
356
367
|
currency: currency
|
357
368
|
}
|
369
|
+
|
358
370
|
post[:amount] = amount
|
359
371
|
end
|
360
372
|
|
@@ -367,17 +379,32 @@ module ActiveMerchant #:nodoc:
|
|
367
379
|
post[:modificationAmount] = amount
|
368
380
|
end
|
369
381
|
|
370
|
-
def add_payment(post, payment, options)
|
382
|
+
def add_payment(post, payment, options, action = nil)
|
371
383
|
if payment.is_a?(String)
|
372
384
|
_, _, recurring_detail_reference = payment.split('#')
|
373
385
|
post[:selectedRecurringDetailReference] = recurring_detail_reference
|
374
386
|
options[:recurring_contract_type] ||= 'RECURRING'
|
387
|
+
elsif payment.is_a?(Check)
|
388
|
+
add_bank_account(post, payment, options, action)
|
375
389
|
else
|
376
390
|
add_mpi_data_for_network_tokenization_card(post, payment) if payment.is_a?(NetworkTokenizationCreditCard)
|
377
391
|
add_card(post, payment)
|
378
392
|
end
|
379
393
|
end
|
380
394
|
|
395
|
+
def add_bank_account(post, bank_account, options, action)
|
396
|
+
bank = {
|
397
|
+
bankAccountNumber: bank_account.account_number,
|
398
|
+
ownerName: bank_account.name,
|
399
|
+
countryCode: options[:billing_address][:country]
|
400
|
+
}
|
401
|
+
|
402
|
+
action == 'refundWithData' ? bank[:iban] = bank_account.routing_number : bank[:bankLocationId] = bank_account.routing_number
|
403
|
+
|
404
|
+
requires!(bank, :bankAccountNumber, :ownerName, :countryCode)
|
405
|
+
post[:bankAccount] = bank
|
406
|
+
end
|
407
|
+
|
381
408
|
def add_card(post, credit_card)
|
382
409
|
card = {
|
383
410
|
expiryMonth: credit_card.month,
|
@@ -400,8 +427,10 @@ module ActiveMerchant #:nodoc:
|
|
400
427
|
end
|
401
428
|
|
402
429
|
def add_network_transaction_reference(post, options)
|
430
|
+
return unless ntid = options[:network_transaction_id] || options.dig(:stored_credential, :network_transaction_id)
|
431
|
+
|
403
432
|
post[:additionalData] = {} unless post[:additionalData]
|
404
|
-
post[:additionalData][:networkTxReference] =
|
433
|
+
post[:additionalData][:networkTxReference] = ntid
|
405
434
|
end
|
406
435
|
|
407
436
|
def add_reference(post, authorization, options = {})
|
@@ -427,6 +456,32 @@ module ActiveMerchant #:nodoc:
|
|
427
456
|
post[:recurring] = recurring
|
428
457
|
end
|
429
458
|
|
459
|
+
def add_application_info(post, options)
|
460
|
+
post[:applicationInfo] ||= {}
|
461
|
+
add_external_platform(post, options)
|
462
|
+
add_merchant_application(post, options)
|
463
|
+
end
|
464
|
+
|
465
|
+
def add_external_platform(post, options)
|
466
|
+
options.update(externalPlatform: application_id) if application_id
|
467
|
+
|
468
|
+
return unless options[:externalPlatform]
|
469
|
+
|
470
|
+
post[:applicationInfo][:externalPlatform] = {
|
471
|
+
name: options[:externalPlatform][:name],
|
472
|
+
version: options[:externalPlatform][:version]
|
473
|
+
}
|
474
|
+
end
|
475
|
+
|
476
|
+
def add_merchant_application(post, options)
|
477
|
+
return unless options[:merchantApplication]
|
478
|
+
|
479
|
+
post[:applicationInfo][:merchantApplication] = {
|
480
|
+
name: options[:merchantApplication][:name],
|
481
|
+
version: options[:merchantApplication][:version]
|
482
|
+
}
|
483
|
+
end
|
484
|
+
|
430
485
|
def add_installments(post, options)
|
431
486
|
post[:installments] = {
|
432
487
|
value: options[:installments]
|
@@ -617,7 +672,7 @@ module ActiveMerchant #:nodoc:
|
|
617
672
|
end
|
618
673
|
|
619
674
|
def error_code_from(response)
|
620
|
-
STANDARD_ERROR_CODE_MAPPING[response['errorCode']]
|
675
|
+
STANDARD_ERROR_CODE_MAPPING[response['errorCode']] || response['errorCode']
|
621
676
|
end
|
622
677
|
|
623
678
|
def network_transaction_id_from(response)
|