activemerchant 1.125.0 → 1.129.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +316 -0
  3. data/lib/active_merchant/billing/check.rb +40 -8
  4. data/lib/active_merchant/billing/credit_card.rb +28 -1
  5. data/lib/active_merchant/billing/credit_card_methods.rb +91 -23
  6. data/lib/active_merchant/billing/gateway.rb +2 -1
  7. data/lib/active_merchant/billing/gateways/adyen.rb +74 -12
  8. data/lib/active_merchant/billing/gateways/airwallex.rb +370 -0
  9. data/lib/active_merchant/billing/gateways/alelo.rb +256 -0
  10. data/lib/active_merchant/billing/gateways/authorize_net.rb +21 -4
  11. data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +2 -1
  12. data/lib/active_merchant/billing/gateways/beanstream.rb +18 -0
  13. data/lib/active_merchant/billing/gateways/blue_pay.rb +1 -1
  14. data/lib/active_merchant/billing/gateways/blue_snap.rb +53 -22
  15. data/lib/active_merchant/billing/gateways/bogus.rb +4 -0
  16. data/lib/active_merchant/billing/gateways/borgun.rb +56 -16
  17. data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +6 -1
  18. data/lib/active_merchant/billing/gateways/braintree/token_nonce.rb +113 -0
  19. data/lib/active_merchant/billing/gateways/braintree_blue.rb +151 -32
  20. data/lib/active_merchant/billing/gateways/card_connect.rb +28 -10
  21. data/lib/active_merchant/billing/gateways/card_stream.rb +23 -0
  22. data/lib/active_merchant/billing/gateways/checkout_v2.rb +228 -57
  23. data/lib/active_merchant/billing/gateways/commerce_hub.rb +361 -0
  24. data/lib/active_merchant/billing/gateways/credorax.rb +56 -26
  25. data/lib/active_merchant/billing/gateways/cyber_source/cyber_source_common.rb +36 -0
  26. data/lib/active_merchant/billing/gateways/cyber_source.rb +112 -58
  27. data/lib/active_merchant/billing/gateways/cyber_source_rest.rb +456 -0
  28. data/lib/active_merchant/billing/gateways/d_local.rb +93 -5
  29. data/lib/active_merchant/billing/gateways/decidir.rb +32 -5
  30. data/lib/active_merchant/billing/gateways/decidir_plus.rb +185 -14
  31. data/lib/active_merchant/billing/gateways/ebanx.rb +39 -26
  32. data/lib/active_merchant/billing/gateways/element.rb +21 -1
  33. data/lib/active_merchant/billing/gateways/global_collect.rb +98 -37
  34. data/lib/active_merchant/billing/gateways/ipg.rb +14 -10
  35. data/lib/active_merchant/billing/gateways/iveri.rb +39 -3
  36. data/lib/active_merchant/billing/gateways/kushki.rb +21 -1
  37. data/lib/active_merchant/billing/gateways/litle.rb +118 -6
  38. data/lib/active_merchant/billing/gateways/mastercard.rb +1 -8
  39. data/lib/active_merchant/billing/gateways/mercado_pago.rb +17 -0
  40. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +44 -10
  41. data/lib/active_merchant/billing/gateways/monei.rb +2 -0
  42. data/lib/active_merchant/billing/gateways/moneris.rb +55 -13
  43. data/lib/active_merchant/billing/gateways/mundipagg.rb +3 -0
  44. data/lib/active_merchant/billing/gateways/nmi.rb +12 -7
  45. data/lib/active_merchant/billing/gateways/ogone.rb +35 -7
  46. data/lib/active_merchant/billing/gateways/openpay.rb +20 -3
  47. data/lib/active_merchant/billing/gateways/orbital.rb +378 -335
  48. data/lib/active_merchant/billing/gateways/pay_trace.rb +64 -18
  49. data/lib/active_merchant/billing/gateways/payeezy.rb +59 -4
  50. data/lib/active_merchant/billing/gateways/payflow.rb +62 -0
  51. data/lib/active_merchant/billing/gateways/paymentez.rb +44 -13
  52. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +4 -0
  53. data/lib/active_merchant/billing/gateways/paysafe.rb +37 -29
  54. data/lib/active_merchant/billing/gateways/payu_latam.rb +28 -15
  55. data/lib/active_merchant/billing/gateways/plexo.rb +308 -0
  56. data/lib/active_merchant/billing/gateways/priority.rb +185 -140
  57. data/lib/active_merchant/billing/gateways/rapyd.rb +319 -0
  58. data/lib/active_merchant/billing/gateways/reach.rb +277 -0
  59. data/lib/active_merchant/billing/gateways/redsys.rb +9 -5
  60. data/lib/active_merchant/billing/gateways/safe_charge.rb +1 -4
  61. data/lib/active_merchant/billing/gateways/sage_pay.rb +1 -1
  62. data/lib/active_merchant/billing/gateways/securion_pay.rb +40 -0
  63. data/lib/active_merchant/billing/gateways/shift4.rb +342 -0
  64. data/lib/active_merchant/billing/gateways/simetrik.rb +368 -0
  65. data/lib/active_merchant/billing/gateways/stripe.rb +25 -3
  66. data/lib/active_merchant/billing/gateways/stripe_payment_intents.rb +155 -70
  67. data/lib/active_merchant/billing/gateways/tns.rb +2 -5
  68. data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +1 -1
  69. data/lib/active_merchant/billing/gateways/trust_commerce.rb +14 -3
  70. data/lib/active_merchant/billing/gateways/vanco.rb +12 -3
  71. data/lib/active_merchant/billing/gateways/visanet_peru.rb +6 -2
  72. data/lib/active_merchant/billing/gateways/vpos.rb +7 -4
  73. data/lib/active_merchant/billing/gateways/wompi.rb +8 -4
  74. data/lib/active_merchant/billing/gateways/worldpay.rb +117 -9
  75. data/lib/active_merchant/billing/response.rb +15 -1
  76. data/lib/active_merchant/connection.rb +0 -2
  77. data/lib/active_merchant/country.rb +1 -0
  78. data/lib/active_merchant/errors.rb +4 -1
  79. data/lib/active_merchant/version.rb +1 -1
  80. metadata +28 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9f8d0ad7bb54e228b44738e6cf324034467970e6709047a7f799dd7d3276998c
4
- data.tar.gz: 96ab0828793d536f7df925fe962444c1cc0c48d129de54c19d40c81145ed1d11
3
+ metadata.gz: 415c09ab9b38e3503d10b38cd42959b50c131f8b47237f39b36a8da7bc044d82
4
+ data.tar.gz: 2b2cdd2955bd0ed6e2b808cad4fa31888749ee6cbe91b2a75c563f1cc09429d6
5
5
  SHA512:
6
- metadata.gz: 1a31f43e0702edeb5727c61285c54afeecc5accc6c9f89134966228fe9c08369f9918890ff25cda85ec863f3cda2bd1e2e6dde8f4eed1254ed6d520f37067dcd
7
- data.tar.gz: 144dc89e223d28ceed1399b50d15116d169dc056f878bb9ba9ed477e4c141fde2c2bc25a882610e4295fa3a25fc8f63800034352b77eb3a370718ea64d017665
6
+ metadata.gz: 104444c88b66340a16502ae980ae4c2795f25cd8f9d3a78a05d636d55730a462d9ead8a565291774096dd3fa75149961f64ec472d2a74c7499ce6b472ec6de95
7
+ data.tar.gz: bc738912b2788963721d232e43cf02675cc6a672c7aca913c6bd876fd73b72fd0cd0b7d43e734dca7f5494957e9092e8054d75b788b59ef3a2ca25a917d3d949
data/CHANGELOG CHANGED
@@ -3,6 +3,320 @@
3
3
 
4
4
  == HEAD
5
5
 
6
+ == Version 1.129.0 (April 24th, 2023)
7
+ * Adyen: Update selectedBrand mapping for Google Pay [jcreiff] #4763
8
+ * Shift4: Add vendorReference field [jcreiff] #4762
9
+ * Shift4: Add OAuth error [aenand] #4760
10
+ * Stripe PI: Add billing address details to Apple Pay and Google Pay tokenization request [BritneyS] #4761
11
+ * Make gem compatible with Ruby 3+ [pi3r] #4768
12
+
13
+ == Version 1.128.0 (April 24th, 2023)
14
+ * CheckoutV2: Add support for Shipping Address [nicolas-maalouf-cko] #4755
15
+ * Element: Include Apple Pay - Google pay methods [jherrera] #4647
16
+ * dLocal: Add transaction query API(s) request [almalee24] #4584
17
+ * MercadoPago: Add transaction inquire request [molbrown] #4588
18
+ * Worldpay: Add transaction inquire request [molbrown] #4592
19
+ * Alelo: Adding homologation changes [heavyblade] #4590
20
+ * Adyen: Map standard error codes for `processing_error`, `config_error`, `invalid_amount`, and `incorrect_address` [ajawadmirza] #4593
21
+ * MerchantE: Add support for recurring transactions [naashton] #4594
22
+ * CyberSource: Add support for `discount_management_indicator`, `purchase_tax_amount`, `installment_total_amount`, and `installment_annual_interest_rate` fields. [rachelkirk] #4595
23
+ * Shift4: Remove `customer` from refund and `clerk` from store requests [ajawadmirza] #4596
24
+ * TransFirst Transaction Express: Update xml prefixing to be compatible with Nokogiri 1.13.4 [dsmcclain] #4582
25
+ * Iveri: Adding support for external MPI 3DS2 [heavyblade] #4598
26
+ * Credorax: Pass Network Transaction ID on MIT [jherreraa] #4600
27
+ * iVeri: Remove schema validation on Live requests [curiousepic] #4606
28
+ * Beanstream: Adding Third Party 3DS fields [heavyblade] #4602
29
+ * Borgun: Add support for 3DS preauth [ajawadmirza] #4603
30
+ * Cardstream: Add third party 3ds2 support [sainterman] #4570
31
+ * Accept both formats of Canadian routing numbers [molbrown] #4568
32
+ * DLocal: Add support for `original_order_id` [rachelkirk] #4605
33
+ * CheckoutV2: Add support for `merchant_initiated_transaction_id` [rachelkirk] #4611
34
+ * CardConnect: Add stored credential & pass any valid `ecomind` field [ajawadmirza] #4609
35
+ * Alelo: Trigger access token refresh on 404 [curiousepic] #4614
36
+ * DLocal: Add Network Tokens [gasb150] #4608
37
+ * Redsys: enable NTID generation with zero-value verify [jcreiff] #4615
38
+ * IPG: Add support for passing in `store_id` on transactions [aenand] #4619
39
+ * Adyen: Field support for Level 2 and level 3 information [sainterman] #4617
40
+ * Add alternate alpha2 country code for Kosovo [jcreiff] #4622
41
+ * CyberSource: Add support for several fields [rachelkirk] #4623
42
+ * Reach: adding gateway [cristian] #4618
43
+ * Orbital: integration improvements [molbrown] #4626
44
+ * iVeri: add new url [almalee24] #4630
45
+ * Payeezy: Enable Apple Pay support [naashton] #4631
46
+ * Payeezy: Scrub Cryptogram [naashton] #4633
47
+ * Checkout: Fix for `[:source][:stored]` in stored credentials [marioarranzr] #4629
48
+ * Mundipagg: send authorization_secret_key on all transaction types [edgarv09] #4635
49
+ * CommerceHub: Add new gateway [naashton] #4640
50
+ * CyberSource: Update installment data method [rachelkirk] #4642
51
+ * Element: fix bug with billing address email [jcreiff] #4644
52
+ * Openpay: set URL by merchant country [edgarv09] #4637
53
+ * Alelo: Improving credentials refresh process [heavyblade] #4616
54
+ * Decidir: Add transaction inquire request [almalee24] #4649
55
+ * EBANX: add soft_descriptor field [jcreiff] #4658
56
+ * CommerceHub: Add Apple Pay and Google Pay [gasb150] #4648
57
+ * Global Collect & Alelo: Fixing year dependent failing tests [heavyblade] #4665
58
+ * Moneris: Add Google Pay [sinourain] #4666
59
+ * Global Collect: Add transaction inquire request [almalee24] #4669
60
+ * Stripe PI: Add Level 3 support [almalee24] #4673
61
+ * Braintree: return additional processor response [jcreiff] #4653
62
+ * Payeezy: name from `billing_address` on `purchase` [naashton] #4674
63
+ * Stripe: add reverse_transfer to void transactions [jcreiff] #4668
64
+ * Global Collect: fix bug on transaction inquire request [almalee24] #4676
65
+ * Credorax: Support google pay and apple pay [edgarv09] #4661
66
+ * Plexo: Add support for 5 new credit card brands (passcard, edenred, anda, tarjeta-d, sodexo) [edgarv09] #4652
67
+ * Authorize.net: Google pay token support [sainterman] #4659
68
+ * Credorax: Add support for Network Tokens [jherreraa] #4679
69
+ * Stripe PI: use MultiResponse in create_setup_intent [jcreiff] #4683
70
+ * Credorax: Correct NTID logic for MIT transactions [aenand] #4686
71
+ * Adyen: Add support for `skip_mpi_data` flag [rachelkirk] #4654
72
+ * Add Canadian Institution Numbers [jcreiff] #4687
73
+ * Tns: update test URL [almalee24] #4698
74
+ * TrustCommerce: Update `authorization_from` to handle `store` response [jherreraa] #4691
75
+ * TrustCommerce: Verify feature added [jherreraa] #4692
76
+ * Rapyd: Add customer object to transactions [javierpedrozaing] #4664
77
+ * CybersourceRest: Add new gateway with authorize and purchase [heavyblade] #4690
78
+ * Litle: Add prelive_url option [aenand] #4710
79
+ * CommerceHub: Fixing verify status and prevent tokenization [heavyblade] #4716
80
+ * Payeezy: Update Stored Credentials [almalee24] #4711
81
+ * CheckoutV2: Add store/unstore [gasb150] #4712
82
+ * CybersourceREST - Refund | Credit [sinourain] #4700
83
+ * Braintree - Add Paypal custom fields [yunnydang] #4713
84
+ * BlueSnap - Add descriptor phone number field [yunnydang] #4717
85
+ * Braintree - Update transaction hash to include processor_authorization_code [yunnydang] #4718
86
+ * CyberSourceRest: Add apple pay, google pay [gasb150] #4708
87
+ * CybersourceREST - Void | Verify [sinourain] #4695
88
+ * Credorax: Set default ECI values for token transactions [sainterman] #4693
89
+ * CyberSourceRest: Add ACH Support [edgarv09] #4722
90
+ * CybersourceREST: Add capture request [heavyblade] #4726
91
+ * Paymentez: Add transaction inquire request [aenand] #4729
92
+ * Ebanx: Add transaction inquire request [almalee24] #4725
93
+ * Ebanx: Add support for Elo & Hipercard [almalee24] #4702
94
+ * CheckoutV2: Add Idempotency key support [yunnydang] #4728
95
+ * Adyen: Add support for shopper_statement field for capture [yunnydang] #4736
96
+ * CheckoutV2: Update idempotency_key name [yunnydang] #4737
97
+ * Payeezy: Enable external 3DS [jherreraa] #4715
98
+ * Ebanx: Remove default email [aenand] #4747
99
+ * CyberSourceRest: Add stored credentials support [jherreraa] #4707
100
+ * Payeezy: Add `last_name` for `add_network_tokenization` [naashton] #4743
101
+ * Stripe PI: Tokenize payment method at Stripe for `verify` [aenand] #4748
102
+ * Kushki: Add support for the months and deferred fields [yunnydang] #4752
103
+ * Borgun: Update TrCurrencyExponent for 3DS transactions with `ISK` [aenand] #4751
104
+ * CyberSourceRest: Add gateway specific fields handling [jherreraa] #4746
105
+ * IPG: Improve error handling [heavyblade] #4753
106
+ * Shift4: Handle access token failed calls [heavyblade] #4745
107
+ * Bogus: Add verify functionality [willemk] #4749
108
+ * Litle: Update successful_from method [almalee24] #4765
109
+
110
+ == Version 1.127.0 (September 20th, 2022)
111
+ * BraintreeBlue: Add venmo profile_id [molbrown] #4512
112
+ * Maestro: Adding missing BIN ranges [bradbroge] #4423
113
+ * Simetrik: Fix integer and float types, update scrub method [rachelkirk] #4405
114
+ * Credorax: Convert country codes for `recipient_country_code` field [ajawadmirza] #4408
115
+ * BlueSnap: Correctly parse `refund-transaction-id` [dsmcclain] #4411
116
+ * Worldpay: Add level II and level III data [javierpedrozaing] #4393
117
+ * Worldpay: extract `issuer_response_code` and `issuer_response_description` from gateway response [dsmcclain] #4412
118
+ * Vantiv: Support `duplicate` field read from saleResponse.duplicate attr [mashton] #4413
119
+ * Ogone: Add support for 3dsv2 [gasb150] #4410
120
+ * BlueSnap: Add support for stored credentials [ajawadmirza] #4414
121
+ * Monei: Add support for `lang` field [drkjc] #4421
122
+ * Wompi: Redirect `refund` to `void` [drkjc] #4424
123
+ * Rapyd: 3DS Support [naashton] #4422
124
+ * Adyen: Update API version [jherreraa] #4418
125
+ * Ogone: Updated home gateway URL [gasb150] #4419
126
+ * Credorax: Update url gateway and credit cards [javierpedrozaing] #4417
127
+ * Kushki: Pass extra_taxes with USD [therufs] #4426
128
+ * DLocal: fix bug with `X-Idempotency-Key` header [dsmcclain] #4431
129
+ * DLocal: Mark support for additional countries [gasb150] #4427
130
+ * Rapyd: Additional Fields [naashton] #4434
131
+ * Braintree: Return generated client token [BritneyS] #4416
132
+ * Simetrik: Update `audience` field [simetrik-frank] #4433
133
+ * CyberSource: Add bank account payment method support [heavyblade] #4428
134
+ * Rapyd: Zero Dollar Auth [naashton] #4435
135
+ * Rapyd: Scrub ACH [naashton] #4436
136
+ * VisaNet Peru: Update `purchase_number` [rachelkirk] #4437
137
+ * CardConnect: Add support for 3ds V2 [javierpedrozaing] #4429
138
+ * Rapyd: Support `store` and `unstore` [naashton] #4439
139
+ * Orbital: Update API version to 9.0 [gasb150] #4440
140
+ * Plexo: Add `meta_data` fields and reorder amount object in response [ajawadmirza] #4441
141
+ * Plexo: Change field name from `meta_data` to `metadata` [ajawadmirza] #4443
142
+ * Simetrik: Update `vat` to be in cents [simetrik-frank] #4425
143
+ * Cybersource: Handle Amex cryptograms [heavyblade] #4445
144
+ * Rapyd: Pass fields to `refund` and `store` [naashton] #4449
145
+ * VPOS: Allow reuse of encryption key [therufs] #4450
146
+ * Orbital: Add `payment_action_ind` field and refund through credit card to support tandem implementation [ajawadmirza] #4420
147
+ * Airwallex: Send `referrer_data` on setup transactions [drkjc] #4453
148
+ * Adyen and StripPI: Updated error messaging [mbreenlyles] #4454
149
+ * Airwallex: Update `referrer_data` field [drkjc] #4455
150
+ * Simetrik: Update `order_id` and `description` to be top level fields [simetrik-frank] #4451
151
+ * Plexo: Update `ip`, `description`, and `email` fields request format and scrub method to not filter cardholder name and reference id [ajawadmirza] #4457
152
+ * Plexo: Update `verify` implementation and add `verify_amount` field [ajawadmirza] #4462
153
+ * Vanco: Update `purchase` to complete a purchase transaction with an existing session id [BritneyS] #4461
154
+ * Authorize.net: Allow custom verify_amount and validate it [jherreraa] #4464
155
+ * Shift4: Add gateway adapter [ali-hassan] #4415
156
+ * Rapyd: Correctly add `billing_address` [naashton] #4465
157
+ * Credorax: Update processor response messages [jcreiff] #4466
158
+ * Shift4: add `customer_reference`, `destination_postal_code`, `product_descriptors` fields and core refactoring [ajawadmirza] #4469
159
+ * Paypal Express: Add checkout status to response object [mbreenlyles] #4467
160
+ * Shift4: Scrub security code [naashton] #4470
161
+ * Shift4: Update `cardOnFile` transaction requests [ajawadmirza] #4471
162
+ * Plexo: Update `success_from` definition [ajawadmirza] #4468
163
+ * Rapyd: Un-nest the payment urls [naashton] #4472
164
+ * Paypal Express: Correct naming mistake for accessor [mbreenlyles] #4473
165
+ * GlobalCollect: Enable Google Pay and Apple Pay [gasb150] #4388
166
+ * Shift4: $0 auth [naashton] #4474
167
+ * CyberSource: Updatie API version to 1.198 and fix 3DS test [cristian] #4456
168
+ * Shift4: add `store` method, `present` field in card, and to pass amount in cents [ajawadmirza] #4475
169
+ * Shift4: add `3ds2` implementation [ajawadmirza] #4476
170
+ * Shift4: update `success_from` definition to consider response code [ajawadmirza] #4477
171
+ * Rapyd: Customer Object [naashton] #4478
172
+ * Shift4: Verify Endopint Fix [naashton] #4479
173
+ * CheckoutV2: Scrub cryptogram and credit card number [ajawadmirza] #4488
174
+ * CheckoutV2: Add `3ds.status` field to send status of 3DS flow of all 3DS transactions [BritneyS] #4492
175
+ * CheckoutV2: Add `challenge_indicator`, `exemption`, `authorization_type`, `processing_channel_id`, and `capture_type` fields [ajawadmirza] #4482
176
+ * Add `mada` card type and associated BINs; add support for `mada` in CheckoutV2 gateway [dsmcclain] #4486
177
+ * Authorize.net: Refactor custom verify amount handling [jherreraa] #4485
178
+ * EBANX: Change amount for Colombia [flaaviaa] #4481
179
+ * Worldpay: Update `required_status_message` and `message_from` methods for response. [rachelkirk] #4493
180
+ * CheckoutV2: Add support for transactions through OAuth [ajawadmirza] #4483
181
+ * Vanco: Update unit test to remove remote call to gateway [ajawadmirza] #4497
182
+ * Shift4: remove support for 3ds2 [ajawadmirza] #4503
183
+ * Rapyd: Add support for stored credential [ajawadmirza] #4487
184
+ * MerchantE: Update `store` and add `verify` method [ajawadmirza] #4507
185
+ * Shift4: Add default `numericId`, add `InterfaceVersion`, `InterfaceName`, and `CompanyName` header fields, change date time format and allow merchant time zone [ajawadmirza] #4509
186
+ * BraintreeBlue: Add support for partial capture [aenand] #4515
187
+ * Rapyd: Change key name to `network_transaction_id` [ajawadmirza] #4514
188
+ * CyberSource: Handle unsupported Network Token brands [heavyblade] #4500
189
+ * Ingenico(Global Collect): Add support for `payment_product_id` [rachelkirk] #4521
190
+ * Adyen: Add network transaction id to store call [jcreiff] #4522
191
+ * Worldpay: Add machine cookie to subsequent calls during 3DS challenge [mbreenlyles] #4513*
192
+ * Shift4: Scrub `securityCode` fix [naashton] #4524
193
+ * Credorax: Update `OpCode` for credit transactions [dsmcclain] #4279
194
+ * CheckoutV2: Add `credit` method [ajawadmirza] #4490
195
+ * Stripe Payment Intents: Add `options` for retrieve_setup_intent [aenand] #4529
196
+ * CheckoutV2: Send payment id via `incremental_authorization` field [ajawadmirza] #4518
197
+ * Shift4: Add card `present` field, use previous transaction authorization for capture, and hardcode header values [ajawadmirza] #4528
198
+ * Orbital: Remove `DPANInd` field for RC transactions [ajawadmirza] #4502
199
+ * EBANX: Add Spreedly tag to payment body [flaaviaa] #4527
200
+ * Shift4: Add `expiration_date` field for refund transactions [ajawadmirza] #4532
201
+ * Improve handling of AVS and CVV Results in Multiresponses [gasb150] #4516
202
+ * Airwallex: Add `skip_3ds` field for create payment transactions [ajawadmirza] #4534
203
+ * Shift4: Typo correction for `initial_transaction` [ajawadmirza] #4537
204
+ * Rapyd: Pass Customer ID and fix `add_token` method [naashton] #4538
205
+ * Shift4: If no timezone is sent on transactions, the code uses the hours and minutes as a timezone offset [ali-hassan] #4536
206
+ * Priority: Add support for general credit and updating cvv and zip [priorityspreedly] #4517
207
+ * Worldpay: Update actions for generated message in `required_status_message` method [rachelkirk] #4530
208
+ * Adyen: Modify handling of countryCode for ACH [jcreiff] #4543
209
+ * CardConnect: update api end-point urls [heavyblade] #4541
210
+ * Vantiv(Litle): Add support for `fraudFilterOverride` field [rachelkirk] #4544
211
+ * Stripe: Add shipping address [jcreiff] #4539
212
+ * PayuLatam: Add extra1, extra2, extra3 fields [jcreiff] #4550
213
+ * Paysafe: Add fundingTransaction object [jcreiff] #4552
214
+ * MerchantE: Add tests for `moto_ecommerce_ind` field [ajawadmirza] #4554
215
+ * Plexo: Update `purchase` method, add flags for header fields, add new fields `billing_address`, `identification_type`, `identification_value`, and `cardholder_birthdate` [ajawadmirza] #4540
216
+ * Rapyd: Remove `BR`, `MX`, and `US` from supported countries [ajawadmirza] #4558
217
+ * Stripe Payment Intents: fix bug with billing address email [jcreiff] #4556
218
+ * Shift4: Add customer to `purchase` & `store` and remove transaction from `store` [ajawadmirza] #4557
219
+ * MerchantE: only add `moto_commerce_ind` to request if it is present [ajawadmirza] #4560
220
+ * Add BpPlus card type along with custom validation logic [dsmcclain] #4559
221
+ * PayTrace: Support ACH implementation for new endpoints and request body [ajawadmirza] #4545
222
+ * Rapyd: No force capture for ACH [naashton] #4562
223
+ * Shift4: Applied checks on Shift4 Time/Timezone offset [ali-hassan] #4561
224
+ * Alelo: Add gateway [heavyblade] #4555
225
+ * Wompi: Allow partial refund amount on void_sync [jcreiff] #4535
226
+ * Shift4: Timezone Offset [naashton] #4566
227
+ * MerchantE: `recurring_pmt_num` and `recurring_pmt_count` fields [ali-hassan] #4553
228
+ * Orbital: Add South African Rand to supported currencies [molbrown] #4569
229
+ * Orbital: Fix CardSecValInd [molbrown] #4563
230
+ * Shift4: Add `usage_indicator`, `indicator`, `scheduled_indicator`, and `transaction_id` fields [ajawadmirza] #4564
231
+ * Shift4: Retrieve `access_token` once [naashton] #4572
232
+ * Redsys: Update Base64 encryption handling for secret key [jcreiff] #4565
233
+ * Shift4: refuse `postalCode` when its null [ajawadmirza] #4574
234
+ * Plexo: Update param key to `refund_type` [ajawadmirza] #4575
235
+ * Shift4: Update request params for `verify`, `capture`, and `refund` [ajawadmirza] #4577
236
+ * CyberSource: Add support for `sec_code` [rachelkirk] #4581
237
+ * BraintreeBlue: Correctly vault payment method token for PayPal Checkout with Vault [almalee24] #4579
238
+ * BpPlus: Allow spaces in card number [ajawadmirza] #4585
239
+ * Shift4: Decline referral transactions and parse message for internal server errors [ajawadmirza] #4583
240
+ * Litle: Update homepage_url [gasb150] #4491
241
+ * Priority: Update credential handling [therufs] #4571
242
+ * Shift4: Fix authorization and remove `entryMode` from verify and store transactions [ajawadmirza] #4589
243
+
244
+ == Version 1.126.0 (April 15th, 2022)
245
+ * Moneris: Add 3DS MPI field support [esmitperez] #4373
246
+ * StripePI: Add ability to change payment_method_type to confirm_intent [aenand] #4300
247
+ * GlobalCollect: Improve support for Naranja and Cabal card types [dsmcclain] #4286
248
+ * Payflow: Add support for stored credentials [ajawadmirza] #4277
249
+ * Orbital: Don't void $0 auths for Verify [javierpedrozaing] #2487
250
+ * StripePI: Enable Apple Pay and Google Pay payment methods [gasb150] #4252
251
+ * PaySafe: Update `unstore` method and authorization for redact [ajawadmirza] #4294
252
+ * CyberSource: Add `national_tax_indicator` fields in authorize and purchase [ajawadmirza] #4299
253
+ * NMI: Update gateway credentials to accept security_key [javierpedrozaing] #4302
254
+ * PaySafe: Fix commit for `unstore` method [ajawadmirza] #4303
255
+ * Ebanx: Add support for `order_number` field [ali-hassan] #4304
256
+ * BlueSnap: Add support for `idempotency_key` field [drkjc] #4305
257
+ * Paymentez: Update `capture` method to verify by otp for pending transactions [ajawadmirza] #4267
258
+ * BlueSnap: Update refund request and endpoint along with merchant transaction support [ajawadmirza] #4307
259
+ * DecidirPlus: Added `authorize`, `capture`, `void`, and `verify` methods [ajawadmirza] #4284
260
+ * Paymentez: Fix `authorize` to call `purchase` for otp flow [ajawadmirza] #4310
261
+ * Orbital: Indicate support for network tokenization [dsmcclain] #4309
262
+ * IPG: remove `uruguay` from supported countries [ajawadmirza] #4311
263
+ * Decidir: Add sub_payments sub-fields to gateway [meagabeth] #4315
264
+ * Priority: Add additional fields to purchase and capture requests [dsmcclain] #4301
265
+ * DecidirPlus: Added `unstore` method [ajawadmirza] #4317
266
+ * Decidir & Decidir Plus: Revise handling of `sub_payment` sub-fields [meagabeth] #4318
267
+ * DecidirPlus: Update `unstore` implementation to get token from params [ajawadmirza] #4320
268
+ * CyberSource: Add option for zero amount verify [gasb150] #4313
269
+ * PayU Latam: Refactor `message_from` method, fix failing remote tests [rachelkirk] #4326
270
+ * Adyen: Add currencies with three decimals places [gasb150] #4322
271
+ * GlobalCollect: Stregthen success criteria for void action [peteroas] #4324
272
+ * Priority Payment Systems - Clean up/refactor gateway file and tests [ali-hassan] #4327
273
+ * SafeCharge: change `verify` to send 0 amount [dsmcclain] #4332
274
+ * DLocal: add support for `force_type` field [dsmcclain] #4336
275
+ * Barclaycard SmartPay: Support more nonstandard currencies [jherreraa] #4335
276
+ * DecidirPlus: `name_override` option on `store` [naashton] #4338
277
+ * Priority: Update `add_purchases_data` to return if `options[:purchases]` is empty [drkjc] #4349
278
+ * Stripe PI: update `shipping` field to `shipping_address` [ajawadmirza] #4347
279
+ * DecidirPlus: Handle `payment_method_id` by `card_brand` [naashton] #4350
280
+ * DecidirPlus: `debit` and `payment_method_id` fields [naashton] #4351
281
+ * Adyen: Include Application ID in adyen authorize and purchase transactions [peteroas] #4343
282
+ * Priority: Add support for `replay_id` field [drkjc] #4352
283
+ * Stripe PI: standardize `shipping_address` fields [dsmcclain] #4355
284
+ * Airwallex: support gateway [therufs] #4342
285
+ * Litle: Translate google_pay as android_pay [javierpedrozaing] #4331
286
+ * Braintree: Add ACH support for store [cristian] #4285
287
+ * Simetrik: Add support for Simetrik gateway [simetrik-frank] #4339
288
+ * EBANX: Change amount for Mexico and Chile [flaaviaa] #4337
289
+ * 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
290
+ * DecidirPlus: Update `error_code_from` to get error reason id [ajawadmirza] #4364
291
+ * Dlocal: Add three_ds mpi support [cristian] #4345
292
+ * Stripe PI: Add `request_three_d_secure` field for `create_setup_intent` [aenand] #4365
293
+ * Adyen: Add `verify_amount` field for verify [ajawadmirza] #4369
294
+ * Stripe PI: Pass options for tokenizing Apple/Google Pay [gasb150] #4368
295
+ * Dlocal: Format 3DS mpi enrollment data correctly [cristian] #4371
296
+ * Airwallex: QA fixes for option handling [therufs] #4367
297
+ * CardConnect: Fixed duplicate(concat) Address sent - card_connect is concat. address1 and 2 causing a AVS error [ahmirza] #4362
298
+ * CyberSource: Remove Pinless Debit Transaction Functionality [peteroas] #4370
299
+ * Litle: Add support for Level 2 and 3 enhanced data [curiousepic] #4360
300
+ * Rapyd: Add gateway support [meagabeth] #4372
301
+ * CyberSource: Update and fix test coverage [peteroas] #4374
302
+ * Airwallex: QA fixes for address and create_setup_intent handling [therufs] #4377
303
+ * Airwallex: add `descriptor` field and update logic for sending `request_id` and `merchant_order_id` [dsmcclain] #4379
304
+ * Visanet Peru: use timestamp instead of random for purchaseNumber [therufs] #4093
305
+ * Orbital: add `verify_amount` field [ajawadmirza] #4376
306
+ * Credorax: add `recipient_street_address`, `recipient_city`, `recipient_province_code`, and `recipient_country_code` fields [ajawadmirza] #4384
307
+ * Airwallex: add support for stored credentials [drkjc] #4382
308
+ * Rapyd: Add metadata and ewallet_id options [naashton] #4387
309
+ * Priority: Add additional fields to request and refactor gateway integration [dsmcclain] #4383
310
+ * Rapyd: Update `type` option to `pm_type` [naashton] #4391
311
+ * Conekta: Fix remote test [javierpedrozaing] #4386
312
+ * NMI: Update post URL [jherreraa] #4380
313
+ * Multiple Gateways: Resolve when/case bug [naashton] #4399
314
+ * Airwallex: Add 3DS MPI support [drkjc] #4395
315
+ * Add Cartes Bancaires card bin ranges [leahriffell] #4398
316
+ * Airwallex: Add support for `original_transaction_id` field [drkjc] #4401
317
+ * Securion Pay: Pass external 3DS data [jherreraa] #4404
318
+ * Airwallex: Update Stored Credentials testing, remove support for `original_transaction_id` field [drkjc] 4407
319
+
6
320
  == Version 1.125.0 (January 20, 2022)
7
321
  * Wompi: support gateway [therufs] #4173
8
322
  * Stripe Payment Intents: Add setup_purchase [aenand] #4178
@@ -86,6 +400,8 @@
86
400
  * Update inline documentation with all supported cardtypes [ali-hassan] #4283
87
401
  * PayWay: Update endpoints, response code [jessiagee] #4281
88
402
  * CyberSource: Add `line_items` for purchase [ajawadmirza] #4282
403
+ * Payflow Pro: Add `stored_credential` fields [ajawadmirza] #4277
404
+ * Decidir Plus: Add `fraud_detection` fields [naashton] #4289
89
405
 
90
406
  == Version 1.124.0 (October 28th, 2021)
91
407
  * Worldpay: Add Support for Submerchant Data on Worldpay [almalee24] #4147
@@ -20,7 +20,7 @@ module ActiveMerchant #:nodoc:
20
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 890
23
+ 376 378 807 853 890 618 842
24
24
  )
25
25
 
26
26
  def name
@@ -60,20 +60,52 @@ module ActiveMerchant #:nodoc:
60
60
  false
61
61
  end
62
62
 
63
+ def valid_routing_number?
64
+ digits = routing_number.to_s.split('').map(&:to_i).select { |d| (0..9).cover?(d) }
65
+ case digits.size
66
+ when 9
67
+ return checksum(digits) == 0 || CAN_INSTITUTION_NUMBERS.include?(routing_number[1..3])
68
+ when 8
69
+ return CAN_INSTITUTION_NUMBERS.include?(routing_number[5..7])
70
+ end
71
+
72
+ false
73
+ end
74
+
63
75
  # Routing numbers may be validated by calculating a checksum and dividing it by 10. The
64
76
  # formula is:
65
77
  # (3(d1 + d4 + d7) + 7(d2 + d5 + d8) + 1(d3 + d6 + d9))mod 10 = 0
66
78
  # See http://en.wikipedia.org/wiki/Routing_transit_number#Internal_checksums
67
- def valid_routing_number?
79
+ def checksum(digits)
80
+ ((3 * (digits[0] + digits[3] + digits[6])) +
81
+ (7 * (digits[1] + digits[4] + digits[7])) +
82
+ (digits[2] + digits[5] + digits[8])) % 10
83
+ end
84
+
85
+ # Always return MICR-formatted routing number for Canadian routing numbers, US routing numbers unchanged
86
+ def micr_format_routing_number
68
87
  digits = routing_number.to_s.split('').map(&:to_i).select { |d| (0..9).cover?(d) }
69
- if digits.size == 9
70
- checksum = ((3 * (digits[0] + digits[3] + digits[6])) +
71
- (7 * (digits[1] + digits[4] + digits[7])) +
72
- (digits[2] + digits[5] + digits[8])) % 10
88
+ case digits.size
89
+ when 9
90
+ if checksum(digits) == 0
91
+ return routing_number
92
+ else
93
+ return routing_number[4..8] + routing_number[1..3]
94
+ end
95
+ when 8
96
+ return routing_number
97
+ end
98
+ end
73
99
 
74
- return checksum == 0 || CAN_INSTITUTION_NUMBERS.include?(routing_number[1..3])
100
+ # Always return electronic-formatted routing number for Canadian routing numbers, US routing numbers unchanged
101
+ def electronic_format_routing_number
102
+ digits = routing_number.to_s.split('').map(&:to_i).select { |d| (0..9).cover?(d) }
103
+ case digits.size
104
+ when 9
105
+ return routing_number
106
+ when 8
107
+ return '0' + routing_number[5..7] + routing_number[0..4]
75
108
  end
76
- false
77
109
  end
78
110
  end
79
111
  end
@@ -32,6 +32,12 @@ module ActiveMerchant #:nodoc:
32
32
  # * Olimpica
33
33
  # * Creditel
34
34
  # * Confiable
35
+ # * Mada
36
+ # * BpPlus
37
+ # * Passcard
38
+ # * Edenred
39
+ # * Anda
40
+ # * Creditos directos (Tarjeta D)
35
41
  #
36
42
  # For testing purposes, use the 'bogus' credit card brand. This skips the vast majority of
37
43
  # validations, allowing you to focus on your core concerns until you're ready to be more concerned
@@ -61,6 +67,8 @@ module ActiveMerchant #:nodoc:
61
67
  class CreditCard < Model
62
68
  include CreditCardMethods
63
69
 
70
+ BRANDS_WITH_SPACES_IN_NUMBER = %w(bp_plus)
71
+
64
72
  class << self
65
73
  # Inherited, but can be overridden w/o changing parent's value
66
74
  attr_accessor :require_verification_value
@@ -76,7 +84,7 @@ module ActiveMerchant #:nodoc:
76
84
  attr_reader :number
77
85
 
78
86
  def number=(value)
79
- @number = (empty?(value) ? value : value.to_s.gsub(/[^\d]/, ''))
87
+ @number = (empty?(value) ? value : filter_number(value))
80
88
  end
81
89
 
82
90
  # Returns or sets the expiry month for the card.
@@ -116,6 +124,12 @@ module ActiveMerchant #:nodoc:
116
124
  # * +'olimpica'+
117
125
  # * +'creditel'+
118
126
  # * +'confiable'+
127
+ # * +'mada'+
128
+ # * +'bp_plus'+
129
+ # * +'passcard'+
130
+ # * +'edenred'+
131
+ # * +'anda'+
132
+ # * +'tarjeta-d'+
119
133
  #
120
134
  # Or, if you wish to test your implementation, +'bogus'+.
121
135
  #
@@ -337,8 +351,21 @@ module ActiveMerchant #:nodoc:
337
351
  icc_data.present?
338
352
  end
339
353
 
354
+ def allow_spaces_in_card?(number = nil)
355
+ BRANDS_WITH_SPACES_IN_NUMBER.include?(self.class.brand?(self.number || number))
356
+ end
357
+
340
358
  private
341
359
 
360
+ def filter_number(value)
361
+ regex = if allow_spaces_in_card?(value)
362
+ /[^\d ]/
363
+ else
364
+ /[^\d]/
365
+ end
366
+ value.to_s.gsub(regex, '')
367
+ end
368
+
342
369
  def validate_essential_attributes #:nodoc:
343
370
  errors = []
344
371