activemerchant 1.105.0 → 1.107.4

Sign up to get free protection for your applications and to get access to all the features.
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