activemerchant 1.105.0 → 1.107.4

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 (173) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +99 -1
  3. data/README.md +2 -2
  4. data/lib/active_merchant/billing/credit_card_methods.rb +12 -3
  5. data/lib/active_merchant/billing/gateway.rb +22 -22
  6. data/lib/active_merchant/billing/gateways/adyen.rb +18 -7
  7. data/lib/active_merchant/billing/gateways/allied_wallet.rb +2 -2
  8. data/lib/active_merchant/billing/gateways/authorize_net.rb +19 -19
  9. data/lib/active_merchant/billing/gateways/authorize_net_arb.rb +11 -11
  10. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +35 -35
  11. data/lib/active_merchant/billing/gateways/axcessms.rb +3 -3
  12. data/lib/active_merchant/billing/gateways/bambora_apac.rb +1 -1
  13. data/lib/active_merchant/billing/gateways/bank_frick.rb +1 -1
  14. data/lib/active_merchant/billing/gateways/banwire.rb +2 -2
  15. data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +5 -5
  16. data/lib/active_merchant/billing/gateways/be2bill.rb +4 -4
  17. data/lib/active_merchant/billing/gateways/beanstream.rb +1 -1
  18. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +27 -27
  19. data/lib/active_merchant/billing/gateways/beanstream_interac.rb +1 -1
  20. data/lib/active_merchant/billing/gateways/blue_pay.rb +8 -8
  21. data/lib/active_merchant/billing/gateways/blue_snap.rb +5 -2
  22. data/lib/active_merchant/billing/gateways/bogus.rb +20 -20
  23. data/lib/active_merchant/billing/gateways/borgun.rb +17 -6
  24. data/lib/active_merchant/billing/gateways/bpoint.rb +1 -1
  25. data/lib/active_merchant/billing/gateways/braintree_blue.rb +81 -77
  26. data/lib/active_merchant/billing/gateways/bridge_pay.rb +3 -3
  27. data/lib/active_merchant/billing/gateways/card_connect.rb +1 -1
  28. data/lib/active_merchant/billing/gateways/card_stream.rb +19 -19
  29. data/lib/active_merchant/billing/gateways/cc5.rb +7 -7
  30. data/lib/active_merchant/billing/gateways/cecabank.rb +3 -3
  31. data/lib/active_merchant/billing/gateways/cenpos.rb +3 -3
  32. data/lib/active_merchant/billing/gateways/checkout_v2.rb +20 -9
  33. data/lib/active_merchant/billing/gateways/clearhaus.rb +1 -1
  34. data/lib/active_merchant/billing/gateways/commercegate.rb +2 -2
  35. data/lib/active_merchant/billing/gateways/conekta.rb +1 -1
  36. data/lib/active_merchant/billing/gateways/creditcall.rb +4 -4
  37. data/lib/active_merchant/billing/gateways/ct_payment.rb +1 -1
  38. data/lib/active_merchant/billing/gateways/culqi.rb +2 -2
  39. data/lib/active_merchant/billing/gateways/cyber_source.rb +154 -91
  40. data/lib/active_merchant/billing/gateways/d_local.rb +4 -2
  41. data/lib/active_merchant/billing/gateways/data_cash.rb +33 -33
  42. data/lib/active_merchant/billing/gateways/decidir.rb +7 -2
  43. data/lib/active_merchant/billing/gateways/ebanx.rb +14 -2
  44. data/lib/active_merchant/billing/gateways/efsnet.rb +23 -23
  45. data/lib/active_merchant/billing/gateways/elavon.rb +70 -18
  46. data/lib/active_merchant/billing/gateways/element.rb +12 -4
  47. data/lib/active_merchant/billing/gateways/epay.rb +40 -40
  48. data/lib/active_merchant/billing/gateways/evo_ca.rb +11 -11
  49. data/lib/active_merchant/billing/gateways/eway.rb +3 -3
  50. data/lib/active_merchant/billing/gateways/eway_managed.rb +40 -40
  51. data/lib/active_merchant/billing/gateways/eway_rapid.rb +7 -7
  52. data/lib/active_merchant/billing/gateways/exact.rb +11 -11
  53. data/lib/active_merchant/billing/gateways/fat_zebra.rb +3 -2
  54. data/lib/active_merchant/billing/gateways/federated_canada.rb +5 -5
  55. data/lib/active_merchant/billing/gateways/firstdata_e4.rb +21 -21
  56. data/lib/active_merchant/billing/gateways/firstdata_e4_v27.rb +20 -20
  57. data/lib/active_merchant/billing/gateways/flo2cash.rb +4 -4
  58. data/lib/active_merchant/billing/gateways/forte.rb +8 -7
  59. data/lib/active_merchant/billing/gateways/garanti.rb +8 -8
  60. data/lib/active_merchant/billing/gateways/global_collect.rb +30 -24
  61. data/lib/active_merchant/billing/gateways/hdfc.rb +3 -3
  62. data/lib/active_merchant/billing/gateways/hps.rb +5 -3
  63. data/lib/active_merchant/billing/gateways/iats_payments.rb +32 -15
  64. data/lib/active_merchant/billing/gateways/inspire.rb +7 -7
  65. data/lib/active_merchant/billing/gateways/instapay.rb +3 -3
  66. data/lib/active_merchant/billing/gateways/ipp.rb +1 -1
  67. data/lib/active_merchant/billing/gateways/iridium.rb +12 -10
  68. data/lib/active_merchant/billing/gateways/itransact.rb +7 -7
  69. data/lib/active_merchant/billing/gateways/iveri.rb +6 -3
  70. data/lib/active_merchant/billing/gateways/ixopay.rb +22 -0
  71. data/lib/active_merchant/billing/gateways/jetpay.rb +4 -4
  72. data/lib/active_merchant/billing/gateways/jetpay_v2.rb +5 -5
  73. data/lib/active_merchant/billing/gateways/kushki.rb +34 -5
  74. data/lib/active_merchant/billing/gateways/latitude19.rb +2 -2
  75. data/lib/active_merchant/billing/gateways/linkpoint.rb +62 -62
  76. data/lib/active_merchant/billing/gateways/litle.rb +8 -3
  77. data/lib/active_merchant/billing/gateways/mastercard.rb +2 -2
  78. data/lib/active_merchant/billing/gateways/mercado_pago.rb +1 -0
  79. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +5 -5
  80. data/lib/active_merchant/billing/gateways/merchant_one.rb +2 -2
  81. data/lib/active_merchant/billing/gateways/merchant_partners.rb +4 -4
  82. data/lib/active_merchant/billing/gateways/merchant_ware.rb +12 -12
  83. data/lib/active_merchant/billing/gateways/merchant_ware_version_four.rb +11 -11
  84. data/lib/active_merchant/billing/gateways/merchant_warrior.rb +12 -2
  85. data/lib/active_merchant/billing/gateways/mercury.rb +9 -9
  86. data/lib/active_merchant/billing/gateways/metrics_global.rb +15 -15
  87. data/lib/active_merchant/billing/gateways/migs.rb +13 -13
  88. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +7 -7
  89. data/lib/active_merchant/billing/gateways/monei.rb +19 -19
  90. data/lib/active_merchant/billing/gateways/moneris.rb +10 -10
  91. data/lib/active_merchant/billing/gateways/money_movers.rb +5 -5
  92. data/lib/active_merchant/billing/gateways/mundipagg.rb +1 -1
  93. data/lib/active_merchant/billing/gateways/nab_transact.rb +15 -15
  94. data/lib/active_merchant/billing/gateways/ncr_secure_pay.rb +1 -1
  95. data/lib/active_merchant/billing/gateways/net_registry.rb +6 -6
  96. data/lib/active_merchant/billing/gateways/netaxept.rb +4 -4
  97. data/lib/active_merchant/billing/gateways/netbanx.rb +14 -14
  98. data/lib/active_merchant/billing/gateways/netbilling.rb +12 -12
  99. data/lib/active_merchant/billing/gateways/netpay.rb +2 -2
  100. data/lib/active_merchant/billing/gateways/network_merchants.rb +5 -5
  101. data/lib/active_merchant/billing/gateways/ogone.rb +7 -7
  102. data/lib/active_merchant/billing/gateways/openpay.rb +2 -2
  103. data/lib/active_merchant/billing/gateways/opp.rb +13 -7
  104. data/lib/active_merchant/billing/gateways/optimal_payment.rb +13 -9
  105. data/lib/active_merchant/billing/gateways/orbital.rb +54 -12
  106. data/lib/active_merchant/billing/gateways/pac_net_raven.rb +7 -7
  107. data/lib/active_merchant/billing/gateways/pay_conex.rb +2 -2
  108. data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +16 -16
  109. data/lib/active_merchant/billing/gateways/pay_junction.rb +16 -16
  110. data/lib/active_merchant/billing/gateways/pay_junction_v2.rb +18 -2
  111. data/lib/active_merchant/billing/gateways/pay_secure.rb +6 -6
  112. data/lib/active_merchant/billing/gateways/paybox_direct.rb +36 -36
  113. data/lib/active_merchant/billing/gateways/payflow.rb +7 -7
  114. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +12 -12
  115. data/lib/active_merchant/billing/gateways/payflow_express.rb +4 -4
  116. data/lib/active_merchant/billing/gateways/payment_express.rb +9 -9
  117. data/lib/active_merchant/billing/gateways/paymill.rb +3 -3
  118. data/lib/active_merchant/billing/gateways/paypal.rb +1 -1
  119. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +5 -5
  120. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +1 -1
  121. data/lib/active_merchant/billing/gateways/payscout.rb +5 -5
  122. data/lib/active_merchant/billing/gateways/paystation.rb +2 -2
  123. data/lib/active_merchant/billing/gateways/payu_latam.rb +3 -3
  124. data/lib/active_merchant/billing/gateways/payway.rb +12 -12
  125. data/lib/active_merchant/billing/gateways/pin.rb +16 -16
  126. data/lib/active_merchant/billing/gateways/plugnpay.rb +10 -10
  127. data/lib/active_merchant/billing/gateways/psigate.rb +26 -26
  128. data/lib/active_merchant/billing/gateways/psl_card.rb +4 -4
  129. data/lib/active_merchant/billing/gateways/qbms.rb +23 -23
  130. data/lib/active_merchant/billing/gateways/quantum.rb +4 -4
  131. data/lib/active_merchant/billing/gateways/quickpay/quickpay_common.rb +95 -95
  132. data/lib/active_merchant/billing/gateways/quickpay/quickpay_v10.rb +9 -9
  133. data/lib/active_merchant/billing/gateways/quickpay/quickpay_v4to7.rb +2 -2
  134. data/lib/active_merchant/billing/gateways/qvalent.rb +1 -1
  135. data/lib/active_merchant/billing/gateways/realex.rb +17 -10
  136. data/lib/active_merchant/billing/gateways/redsys.rb +24 -16
  137. data/lib/active_merchant/billing/gateways/safe_charge.rb +1 -1
  138. data/lib/active_merchant/billing/gateways/sage.rb +10 -10
  139. data/lib/active_merchant/billing/gateways/sage_pay.rb +35 -35
  140. data/lib/active_merchant/billing/gateways/sallie_mae.rb +2 -2
  141. data/lib/active_merchant/billing/gateways/secure_net.rb +9 -9
  142. data/lib/active_merchant/billing/gateways/secure_pay.rb +13 -13
  143. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +16 -16
  144. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +2 -2
  145. data/lib/active_merchant/billing/gateways/skip_jack.rb +8 -8
  146. data/lib/active_merchant/billing/gateways/smart_ps.rb +16 -16
  147. data/lib/active_merchant/billing/gateways/so_easy_pay.rb +6 -6
  148. data/lib/active_merchant/billing/gateways/spreedly_core.rb +4 -4
  149. data/lib/active_merchant/billing/gateways/stripe.rb +15 -10
  150. data/lib/active_merchant/billing/gateways/stripe_payment_intents.rb +50 -9
  151. data/lib/active_merchant/billing/gateways/swipe_checkout.rb +2 -2
  152. data/lib/active_merchant/billing/gateways/trans_first.rb +4 -4
  153. data/lib/active_merchant/billing/gateways/trust_commerce.rb +19 -19
  154. data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +110 -110
  155. data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +29 -29
  156. data/lib/active_merchant/billing/gateways/verifi.rb +10 -10
  157. data/lib/active_merchant/billing/gateways/viaklix.rb +6 -6
  158. data/lib/active_merchant/billing/gateways/visanet_peru.rb +6 -6
  159. data/lib/active_merchant/billing/gateways/webpay.rb +2 -2
  160. data/lib/active_merchant/billing/gateways/wirecard.rb +6 -6
  161. data/lib/active_merchant/billing/gateways/worldpay.rb +22 -20
  162. data/lib/active_merchant/billing/gateways/worldpay_online_payments.rb +32 -32
  163. data/lib/active_merchant/billing/gateways/worldpay_us.rb +2 -2
  164. data/lib/active_merchant/billing/network_tokenization_credit_card.rb +1 -1
  165. data/lib/active_merchant/connection.rb +1 -1
  166. data/lib/active_merchant/network_connection_retries.rb +3 -3
  167. data/lib/active_merchant/post_data.rb +1 -1
  168. data/lib/active_merchant/version.rb +1 -1
  169. data/lib/certs/cacert.pem +75 -0
  170. data/lib/support/ssl_verify.rb +2 -2
  171. data/lib/support/ssl_version.rb +2 -2
  172. metadata +4 -4
  173. data/lib/active_merchant/billing/gateways/moneris_us.rb +0 -352
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ecb10bc188ad1b7d0286f0122d7c3643ba8c8b83aa2b3903ba2f582b1f43cad4
4
- data.tar.gz: 5e28f570774addd9001a555b861757b0bf41aecdaa8c918d3f2926e32d41a7a8
3
+ metadata.gz: df13edc6e4df78bc1172d0d699d41e21c6b9941ade9b2594602009cc4b78de66
4
+ data.tar.gz: 18c2f0264c1ae1edc34a6da0bf4c1244aa5135dfa72cef2c67f53cc4ea6c43a5
5
5
  SHA512:
6
- metadata.gz: da6fcbbd82d25fc8563ee47ec292d2fe276b445fdfe0b1194fdff5c9dddd8c091774f9abb95427721891bac3646e60d6018c2cbf50895c41c1a7aff772792d9b
7
- data.tar.gz: d312d2bbdf0dc874a72519e8d4784c52bf0e663328ac4404ff6a1f92bdea1a9e9a50a0ae9732909275c4a177afce05370474cdef3fc0b02c5aa91ca0096164ff
6
+ metadata.gz: 1e0359cf05cd83b90ef3621b5c9656011e9361f610b7b0b381ee6af749358f2d597c74aace2a63a18d660a7d1842ca8b509b2a18918a637cc2b2ff2206b378e5
7
+ data.tar.gz: eeb3bc4faa2b4f4c25115715c16d520f39b5f8eade99c8dc3091b2347839b9fa9fb785d90bcb0b0851c05282d3bebd2ad4f19b070a1a13f38c43d363d7ea089f
data/CHANGELOG CHANGED
@@ -1,5 +1,103 @@
1
1
  = ActiveMerchant CHANGELOG
2
2
 
3
+ == HEAD
4
+
5
+ == Version 1.107.4 (Jun 2, 2020)
6
+ * Elavon: Implement true verify action [leila-alderman] #3610
7
+ * Vantiv Express: Implement true verify [leila-alderman] #3617
8
+ * Litle: Pass expiration data for basis payment method [therufs] #3606
9
+ * Stripe Payment Intents: Error handling and backwards compatibility within refund [britth] #3627
10
+ * HPS: Prevent errors when account_type or account_holder_type are nil [britth] #3628
11
+ * D Local: Handle invalid country code errors [curiousepic] #3626
12
+ * Stripe Payment Intents: Utilize execute_threed flag to determine success [britth] #3625
13
+ * Elavon: Add Level 3 fields [leila-alderman] #3632
14
+ * CyberSource: Stored Credential fixes [curiousepic] #3624
15
+ * CyberSource: Fix invalid and missing field tests [curiousepic] #3634
16
+ * CyberSource: Pass stored credentials with purchase [curiousepic] #3636
17
+ * Mercado Pago: Add payment_method_option_id field [schwarzgeist] #3635
18
+ * Stripe: Provide error when attempting an authorize with ACH [britth] #3633
19
+ * EBANX: Send original order id as merchant_payment_code metadata [miguelxpn] #3637
20
+ * Element: Add card_present_code field [schwarzgeist] #3623
21
+ * Orbital: Add support for Level 3 fields [leila-alderman] #3639
22
+ * Firstdata: Strip newline characters from address [bittercoder] #3643
23
+ * Forte: add sec_code attribute for echeck [wsmoak] #3640
24
+
25
+ == Version 1.107.3 (May 8, 2020)
26
+ * Realex: Ignore IPv6 unsupported addresses [elfassy] #3622
27
+ * Cybersource: Set partnerSolutionID after the business rules, fixes 500 error [pi3r] #3621
28
+
29
+ == Version 1.107.2 (May 7, 2020)
30
+ * Cybersource: Send a specific card brand commerceIndicator for 3DS [pi3r] #3620
31
+ * Cybersource: Send application_id as partnerSolutionID [pi3r] #3620
32
+ * Iridium: Localize zero-decimal currencies [chinhle23] #3587
33
+ * iVeri: Fix `verify` action [chinhle23] #3588
34
+ * Ixopay: Properly support three-decimal currencies [chinhle23] #3589
35
+ * Kushki: support `auth` and `capture` [therufs] #3591
36
+ * PaymentExpress: Update references to Windcave to reflect rebranding [britth] #3595
37
+ * Decidir: Improve handling of error responses from the gateway [naashton] #3594
38
+ * CyberSource: Added support for MerchantInformation CyberSource-specific fields [apfranzen] #3592
39
+ * ePay: Send unique order ids for remote tests [curiousepic] #3593
40
+ * Checkout V2: Send more informative error messages for 4xx errors [britth] #3601
41
+ * Elavon: Add ssl_dynamic_dba field [apfranzen] #3600
42
+ * iATS Payments: Update gateway to v3 and add support for additional GSFs [naashton] #3599
43
+ * Remove deprecated `rubyforge_project` attribute and tidy up unit test output [fatcatt316] #3598
44
+ * Elavon: Cleanup inadvertant field removal (avs_address) in #3600 [apfranzen] #3602
45
+ * EBANX: Fix transaction amount for verify transaction [miguelxpn] #3603
46
+ * iATS Payments: Update gateway to accept `email`, `phone`, and `country` fields [naashton] #3607
47
+ * Braintree: Fix response for failed refunds when falling back to voids [jasonwebster] #3608
48
+ * Worldpay: Fix response for failed refunds when falling back to voids [jasonwebster] #3609
49
+ * iATS Payments: Add support for Customer Code payment method [molbrown] #3611
50
+ * HPS: Add Google Pay support [MSmedal] #3597
51
+ * Adyen: Parse appropriate message for 3DS2 authorization calls [britth] #3619
52
+ * CyberSource: Add error details response fields [schwarzgeist] #3629
53
+
54
+ == Version 1.107.1 (Apr 1, 2020)
55
+ * Add `allowed_push_host` to gemspec [mdeloupy]
56
+
57
+ == Version 1.107.0 (Apr 1, 2020)
58
+ * Stripe Payment Intents: Early return failed `payment_methods` response [chinhle23] #3570
59
+ * Borgun: Support `passengerItineraryData` [therufs] #3572
60
+ * Ingenico GlobalCollect: support optional `requires_approval` field [fatcatt316] #3571
61
+ * CenPOS: Update failing remote tests [britth] #3575
62
+ * Realex: Update remote tests [britth] #3576
63
+ * FirstData e4 v27: Properly tag stored credential initiation field in request [britth] #3578
64
+ * Orbital: Fix stored credentials [chinhle23] #3579
65
+ * Acapture(Opp): Update gateway credentials [molbrown] #3574
66
+ * Ingenico GlobalCollect: support `requires_approval` field [fatcatt316] #3577
67
+ * CyberSource: Fix `void` for `purchase` transactions [chinhle23] #3581
68
+ * Checkout V2: Begin to add support for using network tokens for transactions. [arbianchi] #3580
69
+ * Opp: Update remote test fixtures [ccarruitero] #3582
70
+ * Optimal Payment: Add support for store [britth] #3585
71
+ * SecurePay Australia : Update test URL (#3586)
72
+
73
+ == Version 1.106.0 (Mar 10, 2020)
74
+ * PayJunctionV2: Send billing address in `auth` and `purchase` transactions [naashton] #3538
75
+ * Adyen: Fix some remote tests [curiousepic] #3541
76
+ * Redsys: Properly escape cardholder name and description fields in 3DS requests [britth] #3537
77
+ * RuboCop: Fix Style/HashSyntax [leila-alderman] #3540
78
+ * Paypal: Fix OrderTotal elements in `add_payment_details` [chinhle23] #3544
79
+ * Stripe Payment Intents: Add tests for "Idempotency-Key" header [fatcatt316] #3542
80
+ * Paypal: Fix RuboCop Style/HashSyntax violations [chinhle23] #3547
81
+ * Rubocop corrections for space around operators [cdmackeyfree] #3543
82
+ * Fat Zebra: Add `is_billing` in post for `store` call [chinhle23] #3551
83
+ * SafeCharge: Adds four supported countries [carrigan] #3550
84
+ * Ixopay: Support stored credentials [leila-alderman] #3549
85
+ * BlueSnap: Adds localized currency support [carrigan] #3552
86
+ * CheckoutV2: Use status as message for 3DS txns in progress [britth] #3545
87
+ * Stripe Payment Intents: Prevent idempotency key errors for compound actions [britth] #3554
88
+ * Adyen: Add tests for voiding with idempotency keys [jknipp] #3553
89
+ * Fat Zebra: Fix `store` call [chinhle23] #3556
90
+ * Update README to include Adyen [haolime] #3452
91
+ * PayJunctionv2: Fix billing address fields [leila-alderman] #3557
92
+ * Adyen: Fail unexpected 3DS responses [curiousepic] #3546
93
+ * Merchant Warrior: Add support for setting soft descriptors [daBayrus] #3558
94
+ * Adyen: Fix stored credentials [chinhle23] #3560
95
+ * Update BIN ranges for Alelo and Maestro cards [leila-alderman] #3559
96
+ * EBANX: Fix declines if order id is bigger than 40 chars [miguelxpn] #3563
97
+ * Moneris US: Remove gateway [chinhle23] #3561
98
+ * Decidir: Decidir: Improving the response message when encountering errors [naashton] #3564
99
+ * PayBox: Added USERTrust RSA Certification Authority and Sectigo RSA Organization Validation Secure Server CA [baldowl] #3567
100
+
3
101
  == Version 1.105.0 (Feb 20, 2020)
4
102
  * Credorax: Fix `3ds_transtype` setting in post [chinhle23] #3531
5
103
  * Bambora Apac: Send void amount in options [leila-alderman] #3532
@@ -12,7 +110,6 @@
12
110
  * Decidir: Add support for fraud_detection, site_id, and establishment_name [fatcatt316] #3527
13
111
  * HPS: support eCheck [therufs] #3500
14
112
  * EBANX: Add metadata information in post [miguelxpn] #3522
15
- * Paypal: Fix OrderTotal elements in `add_payment_details` [chinhle23] #3517
16
113
  * Worldpay: Add `riskData` GSF [fatcatt316] #3514
17
114
  * EBANX: Fix `scrub` [chinhle23] #3521
18
115
  * Worldpay: Remove unnecessary .tag! methods [leila-alderman] #3519
@@ -20,6 +117,7 @@
20
117
  * Authorize.net: Trim supported countries to AU, CA, US [fatcatt316] #3516
21
118
  * Credorax: Allow optional 3DS 2 fields [jeremywrowe] #3515
22
119
  * Stripe: Remove outdated 'customer options' deprecation [alexdunae] #3401
120
+ * Added support for fraud review in CyberSource gateway [greg-burgoon] #3536
23
121
 
24
122
  == Version 1.104.0 (Jan 29, 2020)
25
123
  * Adyen: add `recurring_contract_type` GSF [therufs] #3460
data/README.md CHANGED
@@ -91,6 +91,7 @@ guide and [Standardized 3DS Fields](https://github.com/activemerchant/active_mer
91
91
 
92
92
  The [ActiveMerchant Wiki](https://github.com/activemerchant/active_merchant/wikis) contains a [table of features supported by each gateway](https://github.com/activemerchant/active_merchant/wiki/Gateway-Feature-Matrix).
93
93
 
94
+ * [Adyen](https://www.adyen.com/) - US, AT, AU, BE, BG, BR, CH, CY, CZ, DE, DK, EE, ES, FI, FR, GB, GI, GR, HK, HU, IE, IS, IT, LI, LT, LU, LV, MC, MT, MX, NL, NO, PL, PT, RO, SE, SG, SK, SI
94
95
  * [Authorize.Net CIM](http://www.authorize.net/) - US
95
96
  * [Authorize.Net](http://www.authorize.net/) - AU, CA, US
96
97
  * [Axcess MS](http://www.axcessms.com/) - AD, AT, BE, BG, BR, CA, CH, CY, CZ, DE, DK, EE, ES, FI, FO, FR, GB, GI, GR, HR, HU, IE, IL, IM, IS, IT, LI, LT, LU, LV, MC, MT, MX, NL, NO, PL, PT, RO, RU, SE, SI, SK, TR, US, VA
@@ -159,7 +160,6 @@ The [ActiveMerchant Wiki](https://github.com/activemerchant/active_merchant/wiki
159
160
  * [Modern Payments](http://www.modpay.com) - US
160
161
  * [MONEI](http://www.monei.net/) - AD, AT, BE, BG, CA, CH, CY, CZ, DE, DK, EE, ES, FI, FO, FR, GB, GI, GR, HU, IE, IL, IS, IT, LI, LT, LU, LV, MT, NL, NO, PL, PT, RO, SE, SI, SK, TR, US, VA
161
162
  * [Moneris](http://www.moneris.com/) - CA
162
- * [Moneris (US)](http://www.monerisusa.com/) - US
163
163
  * [MoneyMovers](http://mmoa.us/) - US
164
164
  * [NAB Transact](http://transact.nab.com.au) - AU
165
165
  * [NELiX TransaX](https://www.nelixtransax.com/) - US
@@ -183,7 +183,7 @@ The [ActiveMerchant Wiki](https://github.com/activemerchant/active_merchant/wiki
183
183
  * [Paybox Direct](http://www.paybox.com/) - FR
184
184
  * [Payeezy](https://developer.payeezy.com/) - CA, US
185
185
  * [Payex](http://payex.com/) - DK, FI, NO, SE
186
- * [PaymentExpress](http://www.paymentexpress.com/) - AU, CA, DE, ES, FR, GB, HK, IE, MY, NL, NZ, SG, US, ZA
186
+ * [Windcave (formerly PaymentExpress)](https://www.windcave.com/) - AU, CA, DE, ES, FR, GB, HK, IE, MY, NL, NZ, SG, US, ZA
187
187
  * [PAYMILL](https://paymill.com) - AD, AT, BE, BG, 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, VA
188
188
  * [PayPal Express Checkout](https://www.paypal.com/webapps/mpp/express-checkout) - US, CA, SG, AU
189
189
  * [PayPal Express Checkout (UK)](https://www.paypal.com/uk/webapps/mpp/express-checkout) - GB
@@ -13,7 +13,12 @@ module ActiveMerchant #:nodoc:
13
13
  'diners_club' => ->(num) { num =~ /^3(0[0-5]|[68]\d)\d{11}$/ },
14
14
  'jcb' => ->(num) { num =~ /^35(28|29|[3-8]\d)\d{12}$/ },
15
15
  'dankort' => ->(num) { num =~ /^5019\d{12}$/ },
16
- 'maestro' => ->(num) { (12..19).cover?(num&.size) && in_bin_range?(num.slice(0, 6), MAESTRO_RANGES) },
16
+ 'maestro' => lambda { |num|
17
+ (12..19).cover?(num&.size) && (
18
+ in_bin_range?(num.slice(0, 6), MAESTRO_RANGES) ||
19
+ MAESTRO_BINS.any? { |bin| num.slice(0, bin.size) == bin }
20
+ )
21
+ },
17
22
  'forbrugsforeningen' => ->(num) { num =~ /^600722\d{10}$/ },
18
23
  'sodexo' => ->(num) { num =~ /^(606071|603389|606070|606069|606068|600818)\d{10}$/ },
19
24
  'vr' => ->(num) { num =~ /^(627416|637036)\d{10}$/ },
@@ -65,6 +70,10 @@ module ActiveMerchant #:nodoc:
65
70
  (510000..559999),
66
71
  ]
67
72
 
73
+ MAESTRO_BINS = Set.new(
74
+ ['500033', '581149']
75
+ )
76
+
68
77
  # https://www.mastercard.us/content/dam/mccom/global/documents/mastercard-rules.pdf, page 73
69
78
  MAESTRO_RANGES = [
70
79
  (561200..561269),
@@ -111,7 +120,7 @@ module ActiveMerchant #:nodoc:
111
120
  405886..405886, 430471..430471, 438061..438061, 438064..438064, 470063..470066,
112
121
  496067..496067, 506699..506704, 506706..506706, 506713..506714, 506716..506716,
113
122
  506749..506750, 506752..506752, 506754..506756, 506758..506762, 506764..506767,
114
- 506770..506771, 509015..509019, 509880..509882, 509884..509885, 509987..509988
123
+ 506770..506771, 509015..509019, 509880..509882, 509884..509885, 509987..509992
115
124
  ]
116
125
 
117
126
  CABAL_RANGES = [
@@ -344,7 +353,7 @@ module ActiveMerchant #:nodoc:
344
353
  def valid_naranja_algo?(numbers) #:nodoc:
345
354
  num_array = numbers.to_s.chars.map(&:to_i)
346
355
  multipliers = [4, 3, 2, 7, 6, 5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
347
- num_sum = num_array[0..14].zip(multipliers).map { |a, b| a*b }.reduce(:+)
356
+ num_sum = num_array[0..14].zip(multipliers).map { |a, b| a * b }.reduce(:+)
348
357
  intermediate = 11 - (num_sum % 11)
349
358
  final_num = intermediate > 9 ? 0 : intermediate
350
359
  final_num == num_array[15]
@@ -80,22 +80,22 @@ module ActiveMerchant #:nodoc:
80
80
  # as network tokenization.
81
81
 
82
82
  STANDARD_ERROR_CODE = {
83
- :incorrect_number => 'incorrect_number',
84
- :invalid_number => 'invalid_number',
85
- :invalid_expiry_date => 'invalid_expiry_date',
86
- :invalid_cvc => 'invalid_cvc',
87
- :expired_card => 'expired_card',
88
- :incorrect_cvc => 'incorrect_cvc',
89
- :incorrect_zip => 'incorrect_zip',
90
- :incorrect_address => 'incorrect_address',
91
- :incorrect_pin => 'incorrect_pin',
92
- :card_declined => 'card_declined',
93
- :processing_error => 'processing_error',
94
- :call_issuer => 'call_issuer',
95
- :pickup_card => 'pick_up_card',
96
- :config_error => 'config_error',
97
- :test_mode_live_card => 'test_mode_live_card',
98
- :unsupported_feature => 'unsupported_feature',
83
+ incorrect_number: 'incorrect_number',
84
+ invalid_number: 'invalid_number',
85
+ invalid_expiry_date: 'invalid_expiry_date',
86
+ invalid_cvc: 'invalid_cvc',
87
+ expired_card: 'expired_card',
88
+ incorrect_cvc: 'incorrect_cvc',
89
+ incorrect_zip: 'incorrect_zip',
90
+ incorrect_address: 'incorrect_address',
91
+ incorrect_pin: 'incorrect_pin',
92
+ card_declined: 'card_declined',
93
+ processing_error: 'processing_error',
94
+ call_issuer: 'call_issuer',
95
+ pickup_card: 'pick_up_card',
96
+ config_error: 'config_error',
97
+ test_mode_live_card: 'test_mode_live_card',
98
+ unsupported_feature: 'unsupported_feature',
99
99
  }
100
100
 
101
101
  cattr_reader :implementations
@@ -223,11 +223,11 @@ module ActiveMerchant #:nodoc:
223
223
 
224
224
  def user_agent
225
225
  @@ua ||= JSON.dump({
226
- :bindings_version => ActiveMerchant::VERSION,
227
- :lang => 'ruby',
228
- :lang_version => "#{RUBY_VERSION} p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE})",
229
- :platform => RUBY_PLATFORM,
230
- :publisher => 'active_merchant'
226
+ bindings_version: ActiveMerchant::VERSION,
227
+ lang: 'ruby',
228
+ lang_version: "#{RUBY_VERSION} p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE})",
229
+ platform: RUBY_PLATFORM,
230
+ publisher: 'active_merchant'
231
231
  })
232
232
  end
233
233
 
@@ -320,7 +320,7 @@ module ActiveMerchant #:nodoc:
320
320
  raise ArgumentError.new("Missing required parameter: #{param.first}") unless hash.has_key?(param.first)
321
321
 
322
322
  valid_options = param[1..-1]
323
- raise ArgumentError.new("Parameter: #{param.first} must be one of #{valid_options.to_sentence(:words_connector => 'or')}") unless valid_options.include?(hash[param.first])
323
+ raise ArgumentError.new("Parameter: #{param.first} must be one of #{valid_options.to_sentence(words_connector: 'or')}") unless valid_options.include?(hash[param.first])
324
324
  else
325
325
  raise ArgumentError.new("Missing required parameter: #{param}") unless hash.has_key?(param)
326
326
  end
@@ -261,7 +261,9 @@ module ActiveMerchant #:nodoc:
261
261
  end
262
262
 
263
263
  def add_shopper_interaction(post, payment, options={})
264
- if options.dig(:stored_credential, :initial_transaction) || (payment.respond_to?(:verification_value) && payment.verification_value) || payment.is_a?(NetworkTokenizationCreditCard)
264
+ if (options.dig(:stored_credential, :initial_transaction) && options.dig(:stored_credential, :initiator) == 'cardholder') ||
265
+ (payment.respond_to?(:verification_value) && payment.verification_value && options.dig(:stored_credential, :initial_transaction).nil?) ||
266
+ payment.is_a?(NetworkTokenizationCreditCard)
265
267
  shopper_interaction = 'Ecommerce'
266
268
  else
267
269
  shopper_interaction = 'ContAuth'
@@ -273,8 +275,12 @@ module ActiveMerchant #:nodoc:
273
275
  def add_recurring_processing_model(post, options)
274
276
  return unless options.dig(:stored_credential, :reason_type) || options[:recurring_processing_model]
275
277
 
276
- if options.dig(:stored_credential, :reason_type) && options[:stored_credential][:reason_type] == 'unscheduled'
277
- recurring_processing_model = 'CardOnFile'
278
+ if options.dig(:stored_credential, :reason_type) == 'unscheduled'
279
+ if options.dig(:stored_credential, :initiator) == 'merchant'
280
+ recurring_processing_model = 'UnscheduledCardOnFile'
281
+ else
282
+ recurring_processing_model = 'CardOnFile'
283
+ end
278
284
  else
279
285
  recurring_processing_model = 'Subscription'
280
286
  end
@@ -471,7 +477,7 @@ module ActiveMerchant #:nodoc:
471
477
  raw_response = e.response.body
472
478
  response = parse(raw_response)
473
479
  end
474
- success = success_from(action, response)
480
+ success = success_from(action, response, options)
475
481
  Response.new(
476
482
  success,
477
483
  message_from(action, response),
@@ -479,7 +485,7 @@ module ActiveMerchant #:nodoc:
479
485
  authorization: authorization_from(action, parameters, response),
480
486
  test: test?,
481
487
  error_code: success ? nil : error_code_from(response),
482
- avs_result: AVSResult.new(:code => avs_code_from(response)),
488
+ avs_result: AVSResult.new(code: avs_code_from(response)),
483
489
  cvv_result: CVVResult.new(cvv_result_from(response))
484
490
  )
485
491
  end
@@ -520,7 +526,12 @@ module ActiveMerchant #:nodoc:
520
526
  headers
521
527
  end
522
528
 
523
- def success_from(action, response)
529
+ def success_from(action, response, options)
530
+ if ['RedirectShopper', 'ChallengeShopper'].include?(response.dig('resultCode')) && !options[:execute_threed] && !options[:threed_dynamic]
531
+ response['refusalReason'] = 'Received unexpected 3DS authentication response. Use the execute_threed and/or threed_dynamic options to initiate a proper 3DS flow.'
532
+ return false
533
+ end
534
+
524
535
  case action.to_s
525
536
  when 'authorise', 'authorise3d'
526
537
  ['Authorised', 'Received', 'RedirectShopper'].include?(response['resultCode'])
@@ -538,7 +549,7 @@ module ActiveMerchant #:nodoc:
538
549
  end
539
550
 
540
551
  def message_from(action, response)
541
- return authorize_message_from(response) if action.to_s == 'authorise' || action.to_s == 'authorise3d'
552
+ return authorize_message_from(response) if %w(authorise authorise3d authorise3ds2).include?(action.to_s)
542
553
 
543
554
  response['response'] || response['message'] || response['result']
544
555
  end
@@ -152,8 +152,8 @@ module ActiveMerchant #:nodoc:
152
152
  message_from(succeeded, response),
153
153
  response,
154
154
  authorization: response['id'],
155
- :avs_result => AVSResult.new(code: response['avs_response']),
156
- :cvv_result => CVVResult.new(response['cvv2_response']),
155
+ avs_result: AVSResult.new(code: response['avs_response']),
156
+ cvv_result: CVVResult.new(response['cvv2_response']),
157
157
  test: test?
158
158
  )
159
159
  rescue JSON::ParserError
@@ -58,21 +58,21 @@ module ActiveMerchant
58
58
  }
59
59
 
60
60
  MARKET_TYPE = {
61
- :moto => '1',
62
- :retail => '2'
61
+ moto: '1',
62
+ retail: '2'
63
63
  }
64
64
 
65
65
  DEVICE_TYPE = {
66
- :unknown => '1',
67
- :unattended_terminal => '2',
68
- :self_service_terminal => '3',
69
- :electronic_cash_register => '4',
70
- :personal_computer_terminal => '5',
71
- :airpay => '6',
72
- :wireless_pos => '7',
73
- :website => '8',
74
- :dial_terminal => '9',
75
- :virtual_terminal => '10'
66
+ unknown: '1',
67
+ unattended_terminal: '2',
68
+ self_service_terminal: '3',
69
+ electronic_cash_register: '4',
70
+ personal_computer_terminal: '5',
71
+ airpay: '6',
72
+ wireless_pos: '7',
73
+ website: '8',
74
+ dial_terminal: '9',
75
+ virtual_terminal: '10'
76
76
  }
77
77
 
78
78
  class_attribute :duplicate_window
@@ -221,13 +221,13 @@ module ActiveMerchant
221
221
 
222
222
  def supports_network_tokenization?
223
223
  card = Billing::NetworkTokenizationCreditCard.new({
224
- :number => '4111111111111111',
225
- :month => 12,
226
- :year => 20,
227
- :first_name => 'John',
228
- :last_name => 'Smith',
229
- :brand => 'visa',
230
- :payment_cryptogram => 'EHuWW9PiBkWvqE5juRwDzAUFBAk='
224
+ number: '4111111111111111',
225
+ month: 12,
226
+ year: 20,
227
+ first_name: 'John',
228
+ last_name: 'Smith',
229
+ brand: 'visa',
230
+ payment_cryptogram: 'EHuWW9PiBkWvqE5juRwDzAUFBAk='
231
231
  })
232
232
 
233
233
  request = post_data(:authorize) do |xml|
@@ -39,10 +39,10 @@ module ActiveMerchant #:nodoc:
39
39
  AUTHORIZE_NET_ARB_NAMESPACE = 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'
40
40
 
41
41
  RECURRING_ACTIONS = {
42
- :create => 'ARBCreateSubscription',
43
- :update => 'ARBUpdateSubscription',
44
- :cancel => 'ARBCancelSubscription',
45
- :status => 'ARBGetSubscriptionStatus'
42
+ create: 'ARBCreateSubscription',
43
+ update: 'ARBUpdateSubscription',
44
+ cancel: 'ARBCancelSubscription',
45
+ status: 'ARBGetSubscriptionStatus'
46
46
  }
47
47
 
48
48
  # Creates a new AuthorizeNetArbGateway
@@ -126,7 +126,7 @@ module ActiveMerchant #:nodoc:
126
126
  # * <tt>subscription_id</tt> -- A string containing the +subscription_id+ of the recurring payment already in place
127
127
  # for a given credit card. (REQUIRED)
128
128
  def cancel_recurring(subscription_id)
129
- request = build_recurring_request(:cancel, :subscription_id => subscription_id)
129
+ request = build_recurring_request(:cancel, subscription_id: subscription_id)
130
130
  recurring_commit(:cancel, request)
131
131
  end
132
132
 
@@ -139,7 +139,7 @@ module ActiveMerchant #:nodoc:
139
139
  # * <tt>subscription_id</tt> -- A string containing the +subscription_id+ of the recurring payment already in place
140
140
  # for a given credit card. (REQUIRED)
141
141
  def status_recurring(subscription_id)
142
- request = build_recurring_request(:status, :subscription_id => subscription_id)
142
+ request = build_recurring_request(:status, subscription_id: subscription_id)
143
143
  recurring_commit(:status, request)
144
144
  end
145
145
 
@@ -149,9 +149,9 @@ module ActiveMerchant #:nodoc:
149
149
  def build_recurring_request(action, options = {})
150
150
  raise StandardError, "Invalid Automated Recurring Billing Action: #{action}" unless RECURRING_ACTIONS.include?(action)
151
151
 
152
- xml = Builder::XmlMarkup.new(:indent => 2)
153
- xml.instruct!(:xml, :version => '1.0', :encoding => 'utf-8')
154
- xml.tag!("#{RECURRING_ACTIONS[action]}Request", :xmlns => AUTHORIZE_NET_ARB_NAMESPACE) do
152
+ xml = Builder::XmlMarkup.new(indent: 2)
153
+ xml.instruct!(:xml, version: '1.0', encoding: 'utf-8')
154
+ xml.tag!("#{RECURRING_ACTIONS[action]}Request", xmlns: AUTHORIZE_NET_ARB_NAMESPACE) do
155
155
  add_merchant_authentication(xml)
156
156
  # Merchant-assigned reference ID for the request
157
157
  xml.tag!('refId', options[:ref_id]) if options[:ref_id]
@@ -394,8 +394,8 @@ module ActiveMerchant #:nodoc:
394
394
  success = response[:result_code] == 'Ok'
395
395
 
396
396
  Response.new(success, message, response,
397
- :test => test_mode,
398
- :authorization => response[:subscription_id]
397
+ test: test_mode,
398
+ authorization: response[:subscription_id]
399
399
  )
400
400
  end
401
401