activemerchant 1.100.0 → 1.133.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (267) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +1057 -0
  3. data/README.md +11 -9
  4. data/lib/active_merchant/billing/avs_result.rb +9 -9
  5. data/lib/active_merchant/billing/base.rb +0 -13
  6. data/lib/active_merchant/billing/check.rb +49 -17
  7. data/lib/active_merchant/billing/compatibility.rb +5 -4
  8. data/lib/active_merchant/billing/credit_card.rb +55 -8
  9. data/lib/active_merchant/billing/credit_card_formatting.rb +1 -0
  10. data/lib/active_merchant/billing/credit_card_methods.rb +209 -36
  11. data/lib/active_merchant/billing/cvv_result.rb +0 -1
  12. data/lib/active_merchant/billing/gateway.rb +38 -36
  13. data/lib/active_merchant/billing/gateways/adyen.rb +399 -78
  14. data/lib/active_merchant/billing/gateways/airwallex.rb +370 -0
  15. data/lib/active_merchant/billing/gateways/alelo.rb +256 -0
  16. data/lib/active_merchant/billing/gateways/allied_wallet.rb +14 -14
  17. data/lib/active_merchant/billing/gateways/authorize_net.rb +200 -130
  18. data/lib/active_merchant/billing/gateways/authorize_net_arb.rb +27 -20
  19. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +48 -51
  20. data/lib/active_merchant/billing/gateways/axcessms.rb +13 -15
  21. data/lib/active_merchant/billing/gateways/balanced.rb +43 -36
  22. data/lib/active_merchant/billing/gateways/bambora_apac.rb +16 -20
  23. data/lib/active_merchant/billing/gateways/bank_frick.rb +13 -13
  24. data/lib/active_merchant/billing/gateways/banwire.rb +5 -5
  25. data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +43 -30
  26. data/lib/active_merchant/billing/gateways/barclays_epdq_extra_plus.rb +1 -1
  27. data/lib/active_merchant/billing/gateways/be2bill.rb +5 -5
  28. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +37 -36
  29. data/lib/active_merchant/billing/gateways/beanstream.rb +21 -3
  30. data/lib/active_merchant/billing/gateways/beanstream_interac.rb +1 -1
  31. data/lib/active_merchant/billing/gateways/blue_pay.rb +53 -28
  32. data/lib/active_merchant/billing/gateways/blue_snap.rb +176 -54
  33. data/lib/active_merchant/billing/gateways/bogus.rb +24 -20
  34. data/lib/active_merchant/billing/gateways/borgun.rb +92 -38
  35. data/lib/active_merchant/billing/gateways/bpoint.rb +15 -15
  36. data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +8 -2
  37. data/lib/active_merchant/billing/gateways/braintree/token_nonce.rb +113 -0
  38. data/lib/active_merchant/billing/gateways/braintree.rb +1 -1
  39. data/lib/active_merchant/billing/gateways/braintree_blue.rb +387 -175
  40. data/lib/active_merchant/billing/gateways/bridge_pay.rb +13 -13
  41. data/lib/active_merchant/billing/gateways/cams.rb +10 -10
  42. data/lib/active_merchant/billing/gateways/card_connect.rb +33 -14
  43. data/lib/active_merchant/billing/gateways/card_save.rb +3 -4
  44. data/lib/active_merchant/billing/gateways/card_stream.rb +67 -40
  45. data/lib/active_merchant/billing/gateways/cardknox.rb +13 -13
  46. data/lib/active_merchant/billing/gateways/cardprocess.rb +4 -2
  47. data/lib/active_merchant/billing/gateways/cashnet.rb +28 -12
  48. data/lib/active_merchant/billing/gateways/cc5.rb +9 -9
  49. data/lib/active_merchant/billing/gateways/cecabank.rb +38 -38
  50. data/lib/active_merchant/billing/gateways/cenpos.rb +29 -28
  51. data/lib/active_merchant/billing/gateways/checkout.rb +7 -9
  52. data/lib/active_merchant/billing/gateways/checkout_v2.rb +316 -68
  53. data/lib/active_merchant/billing/gateways/citrus_pay.rb +1 -2
  54. data/lib/active_merchant/billing/gateways/clearhaus.rb +32 -33
  55. data/lib/active_merchant/billing/gateways/commerce_hub.rb +370 -0
  56. data/lib/active_merchant/billing/gateways/commercegate.rb +4 -4
  57. data/lib/active_merchant/billing/gateways/conekta.rb +8 -6
  58. data/lib/active_merchant/billing/gateways/creditcall.rb +18 -17
  59. data/lib/active_merchant/billing/gateways/credorax.rb +152 -63
  60. data/lib/active_merchant/billing/gateways/ct_payment.rb +15 -14
  61. data/lib/active_merchant/billing/gateways/culqi.rb +30 -28
  62. data/lib/active_merchant/billing/gateways/cyber_source/cyber_source_common.rb +36 -0
  63. data/lib/active_merchant/billing/gateways/cyber_source.rb +496 -187
  64. data/lib/active_merchant/billing/gateways/cyber_source_rest.rb +454 -0
  65. data/lib/active_merchant/billing/gateways/d_local.rb +148 -31
  66. data/lib/active_merchant/billing/gateways/data_cash.rb +34 -37
  67. data/lib/active_merchant/billing/gateways/decidir.rb +134 -21
  68. data/lib/active_merchant/billing/gateways/decidir_plus.rb +344 -0
  69. data/lib/active_merchant/billing/gateways/dibs.rb +10 -10
  70. data/lib/active_merchant/billing/gateways/digitzs.rb +11 -8
  71. data/lib/active_merchant/billing/gateways/ebanx.rb +90 -40
  72. data/lib/active_merchant/billing/gateways/efsnet.rb +36 -36
  73. data/lib/active_merchant/billing/gateways/elavon.rb +349 -194
  74. data/lib/active_merchant/billing/gateways/element.rb +71 -21
  75. data/lib/active_merchant/billing/gateways/epay.rb +43 -43
  76. data/lib/active_merchant/billing/gateways/evo_ca.rb +12 -13
  77. data/lib/active_merchant/billing/gateways/eway.rb +9 -9
  78. data/lib/active_merchant/billing/gateways/eway_managed.rb +55 -56
  79. data/lib/active_merchant/billing/gateways/eway_rapid.rb +37 -22
  80. data/lib/active_merchant/billing/gateways/exact.rb +19 -20
  81. data/lib/active_merchant/billing/gateways/ezic.rb +9 -9
  82. data/lib/active_merchant/billing/gateways/fat_zebra.rb +24 -19
  83. data/lib/active_merchant/billing/gateways/federated_canada.rb +6 -7
  84. data/lib/active_merchant/billing/gateways/finansbank.rb +3 -3
  85. data/lib/active_merchant/billing/gateways/first_giving.rb +5 -4
  86. data/lib/active_merchant/billing/gateways/first_pay.rb +7 -7
  87. data/lib/active_merchant/billing/gateways/firstdata_e4.rb +39 -38
  88. data/lib/active_merchant/billing/gateways/firstdata_e4_v27.rb +51 -31
  89. data/lib/active_merchant/billing/gateways/flo2cash.rb +24 -24
  90. data/lib/active_merchant/billing/gateways/flo2cash_simple.rb +1 -1
  91. data/lib/active_merchant/billing/gateways/forte.rb +38 -22
  92. data/lib/active_merchant/billing/gateways/garanti.rb +12 -15
  93. data/lib/active_merchant/billing/gateways/global_collect.rb +333 -89
  94. data/lib/active_merchant/billing/gateways/global_transport.rb +8 -9
  95. data/lib/active_merchant/billing/gateways/hdfc.rb +22 -23
  96. data/lib/active_merchant/billing/gateways/hps.rb +171 -50
  97. data/lib/active_merchant/billing/gateways/iats_payments.rb +47 -25
  98. data/lib/active_merchant/billing/gateways/in_context_paypal_express.rb +1 -1
  99. data/lib/active_merchant/billing/gateways/inspire.rb +22 -27
  100. data/lib/active_merchant/billing/gateways/instapay.rb +5 -8
  101. data/lib/active_merchant/billing/gateways/ipg.rb +420 -0
  102. data/lib/active_merchant/billing/gateways/ipp.rb +9 -9
  103. data/lib/active_merchant/billing/gateways/iridium.rb +30 -31
  104. data/lib/active_merchant/billing/gateways/itransact.rb +11 -10
  105. data/lib/active_merchant/billing/gateways/iveri.rb +62 -23
  106. data/lib/active_merchant/billing/gateways/ixopay.rb +320 -0
  107. data/lib/active_merchant/billing/gateways/jetpay.rb +10 -17
  108. data/lib/active_merchant/billing/gateways/jetpay_v2.rb +13 -18
  109. data/lib/active_merchant/billing/gateways/komoju.rb +1 -1
  110. data/lib/active_merchant/billing/gateways/kushki.rb +100 -22
  111. data/lib/active_merchant/billing/gateways/latitude19.rb +20 -19
  112. data/lib/active_merchant/billing/gateways/linkpoint.rb +71 -72
  113. data/lib/active_merchant/billing/gateways/litle.rb +181 -45
  114. data/lib/active_merchant/billing/gateways/mastercard.rb +16 -22
  115. data/lib/active_merchant/billing/gateways/maxipago.rb +2 -2
  116. data/lib/active_merchant/billing/gateways/mercado_pago.rb +89 -18
  117. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +58 -24
  118. data/lib/active_merchant/billing/gateways/merchant_one.rb +7 -10
  119. data/lib/active_merchant/billing/gateways/merchant_partners.rb +19 -19
  120. data/lib/active_merchant/billing/gateways/merchant_ware.rb +18 -22
  121. data/lib/active_merchant/billing/gateways/merchant_ware_version_four.rb +15 -17
  122. data/lib/active_merchant/billing/gateways/merchant_warrior.rb +46 -8
  123. data/lib/active_merchant/billing/gateways/mercury.rb +19 -23
  124. data/lib/active_merchant/billing/gateways/metrics_global.rb +24 -33
  125. data/lib/active_merchant/billing/gateways/micropayment.rb +11 -12
  126. data/lib/active_merchant/billing/gateways/migs/migs_codes.rb +7 -7
  127. data/lib/active_merchant/billing/gateways/migs.rb +18 -21
  128. data/lib/active_merchant/billing/gateways/mit.rb +260 -0
  129. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +10 -12
  130. data/lib/active_merchant/billing/gateways/moka.rb +290 -0
  131. data/lib/active_merchant/billing/gateways/monei.rb +236 -150
  132. data/lib/active_merchant/billing/gateways/moneris.rb +122 -53
  133. data/lib/active_merchant/billing/gateways/money_movers.rb +6 -7
  134. data/lib/active_merchant/billing/gateways/mundipagg.rb +69 -23
  135. data/lib/active_merchant/billing/gateways/nab_transact.rb +18 -20
  136. data/lib/active_merchant/billing/gateways/ncr_secure_pay.rb +10 -12
  137. data/lib/active_merchant/billing/gateways/net_registry.rb +8 -9
  138. data/lib/active_merchant/billing/gateways/netaxept.rb +12 -12
  139. data/lib/active_merchant/billing/gateways/netbanx.rb +128 -46
  140. data/lib/active_merchant/billing/gateways/netbilling.rb +18 -21
  141. data/lib/active_merchant/billing/gateways/netpay.rb +5 -4
  142. data/lib/active_merchant/billing/gateways/network_merchants.rb +7 -10
  143. data/lib/active_merchant/billing/gateways/nmi.rb +69 -27
  144. data/lib/active_merchant/billing/gateways/ogone.rb +62 -31
  145. data/lib/active_merchant/billing/gateways/omise.rb +15 -16
  146. data/lib/active_merchant/billing/gateways/openpay.rb +33 -15
  147. data/lib/active_merchant/billing/gateways/opp.rb +39 -33
  148. data/lib/active_merchant/billing/gateways/optimal_payment.rb +43 -42
  149. data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +3 -5
  150. data/lib/active_merchant/billing/gateways/orbital.rb +623 -362
  151. data/lib/active_merchant/billing/gateways/pac_net_raven.rb +20 -20
  152. data/lib/active_merchant/billing/gateways/pagarme.rb +16 -23
  153. data/lib/active_merchant/billing/gateways/pago_facil.rb +4 -6
  154. data/lib/active_merchant/billing/gateways/pay_arc.rb +392 -0
  155. data/lib/active_merchant/billing/gateways/pay_conex.rb +17 -17
  156. data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +30 -33
  157. data/lib/active_merchant/billing/gateways/pay_hub.rb +10 -10
  158. data/lib/active_merchant/billing/gateways/pay_junction.rb +31 -31
  159. data/lib/active_merchant/billing/gateways/pay_junction_v2.rb +36 -18
  160. data/lib/active_merchant/billing/gateways/pay_secure.rb +10 -11
  161. data/lib/active_merchant/billing/gateways/pay_trace.rb +450 -0
  162. data/lib/active_merchant/billing/gateways/paybox_direct.rb +64 -40
  163. data/lib/active_merchant/billing/gateways/payeezy.rb +130 -27
  164. data/lib/active_merchant/billing/gateways/payex.rb +24 -25
  165. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +17 -17
  166. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +1 -1
  167. data/lib/active_merchant/billing/gateways/payflow.rb +103 -25
  168. data/lib/active_merchant/billing/gateways/payflow_express.rb +4 -4
  169. data/lib/active_merchant/billing/gateways/payflow_uk.rb +1 -1
  170. data/lib/active_merchant/billing/gateways/payment_express.rb +22 -18
  171. data/lib/active_merchant/billing/gateways/paymentez.rb +89 -24
  172. data/lib/active_merchant/billing/gateways/paymill.rb +14 -16
  173. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +2 -1
  174. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +4 -0
  175. data/lib/active_merchant/billing/gateways/paypal.rb +13 -5
  176. data/lib/active_merchant/billing/gateways/paypal_ca.rb +1 -1
  177. data/lib/active_merchant/billing/gateways/paypal_digital_goods.rb +1 -1
  178. data/lib/active_merchant/billing/gateways/paypal_express.rb +4 -1
  179. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +1 -1
  180. data/lib/active_merchant/billing/gateways/paysafe.rb +420 -0
  181. data/lib/active_merchant/billing/gateways/payscout.rb +8 -9
  182. data/lib/active_merchant/billing/gateways/paystation.rb +6 -9
  183. data/lib/active_merchant/billing/gateways/payu_in.rb +20 -19
  184. data/lib/active_merchant/billing/gateways/payu_latam.rb +70 -37
  185. data/lib/active_merchant/billing/gateways/payway.rb +22 -22
  186. data/lib/active_merchant/billing/gateways/payway_dot_com.rb +253 -0
  187. data/lib/active_merchant/billing/gateways/pin.rb +60 -21
  188. data/lib/active_merchant/billing/gateways/plexo.rb +308 -0
  189. data/lib/active_merchant/billing/gateways/plugnpay.rb +20 -21
  190. data/lib/active_merchant/billing/gateways/priority.rb +392 -0
  191. data/lib/active_merchant/billing/gateways/pro_pay.rb +13 -14
  192. data/lib/active_merchant/billing/gateways/psigate.rb +29 -29
  193. data/lib/active_merchant/billing/gateways/psl_card.rb +7 -8
  194. data/lib/active_merchant/billing/gateways/qbms.rb +25 -26
  195. data/lib/active_merchant/billing/gateways/quantum.rb +9 -11
  196. data/lib/active_merchant/billing/gateways/quickbooks.rb +126 -39
  197. data/lib/active_merchant/billing/gateways/quickpay/quickpay_common.rb +98 -98
  198. data/lib/active_merchant/billing/gateways/quickpay/quickpay_v10.rb +19 -23
  199. data/lib/active_merchant/billing/gateways/quickpay/quickpay_v4to7.rb +3 -3
  200. data/lib/active_merchant/billing/gateways/quickpay.rb +0 -1
  201. data/lib/active_merchant/billing/gateways/qvalent.rb +36 -20
  202. data/lib/active_merchant/billing/gateways/rapyd.rb +319 -0
  203. data/lib/active_merchant/billing/gateways/reach.rb +277 -0
  204. data/lib/active_merchant/billing/gateways/realex.rb +42 -16
  205. data/lib/active_merchant/billing/gateways/redsys.rb +191 -86
  206. data/lib/active_merchant/billing/gateways/s5.rb +10 -9
  207. data/lib/active_merchant/billing/gateways/safe_charge.rb +70 -33
  208. data/lib/active_merchant/billing/gateways/sage.rb +19 -21
  209. data/lib/active_merchant/billing/gateways/sage_pay.rb +57 -57
  210. data/lib/active_merchant/billing/gateways/sallie_mae.rb +3 -4
  211. data/lib/active_merchant/billing/gateways/secure_net.rb +19 -26
  212. data/lib/active_merchant/billing/gateways/secure_pay.rb +24 -33
  213. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +18 -20
  214. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +4 -5
  215. data/lib/active_merchant/billing/gateways/securion_pay.rb +48 -7
  216. data/lib/active_merchant/billing/gateways/shift4.rb +345 -0
  217. data/lib/active_merchant/billing/gateways/simetrik.rb +368 -0
  218. data/lib/active_merchant/billing/gateways/skip_jack.rb +19 -19
  219. data/lib/active_merchant/billing/gateways/smart_ps.rb +26 -32
  220. data/lib/active_merchant/billing/gateways/so_easy_pay.rb +24 -25
  221. data/lib/active_merchant/billing/gateways/spreedly_core.rb +27 -21
  222. data/lib/active_merchant/billing/gateways/stripe.rb +126 -53
  223. data/lib/active_merchant/billing/gateways/stripe_payment_intents.rb +441 -113
  224. data/lib/active_merchant/billing/gateways/swipe_checkout.rb +7 -8
  225. data/lib/active_merchant/billing/gateways/telr.rb +17 -18
  226. data/lib/active_merchant/billing/gateways/tns.rb +3 -7
  227. data/lib/active_merchant/billing/gateways/trans_first.rb +10 -9
  228. data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +28 -24
  229. data/lib/active_merchant/billing/gateways/transact_pro.rb +13 -15
  230. data/lib/active_merchant/billing/gateways/transax.rb +1 -2
  231. data/lib/active_merchant/billing/gateways/trexle.rb +5 -2
  232. data/lib/active_merchant/billing/gateways/trust_commerce.rb +57 -47
  233. data/lib/active_merchant/billing/gateways/usa_epay.rb +1 -2
  234. data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +176 -184
  235. data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +60 -48
  236. data/lib/active_merchant/billing/gateways/vanco.rb +17 -8
  237. data/lib/active_merchant/billing/gateways/verifi.rb +13 -14
  238. data/lib/active_merchant/billing/gateways/viaklix.rb +9 -14
  239. data/lib/active_merchant/billing/gateways/visanet_peru.rb +26 -21
  240. data/lib/active_merchant/billing/gateways/vpos.rb +223 -0
  241. data/lib/active_merchant/billing/gateways/webpay.rb +4 -4
  242. data/lib/active_merchant/billing/gateways/wepay.rb +14 -16
  243. data/lib/active_merchant/billing/gateways/wirecard.rb +14 -16
  244. data/lib/active_merchant/billing/gateways/wompi.rb +197 -0
  245. data/lib/active_merchant/billing/gateways/world_net.rb +36 -35
  246. data/lib/active_merchant/billing/gateways/worldpay.rb +556 -190
  247. data/lib/active_merchant/billing/gateways/worldpay_online_payments.rb +47 -54
  248. data/lib/active_merchant/billing/gateways/worldpay_us.rb +16 -16
  249. data/lib/active_merchant/billing/network_tokenization_credit_card.rb +2 -2
  250. data/lib/active_merchant/billing/response.rb +25 -6
  251. data/lib/active_merchant/billing/three_d_secure_eci_mapper.rb +27 -0
  252. data/lib/active_merchant/billing.rb +1 -0
  253. data/lib/active_merchant/connection.rb +14 -15
  254. data/lib/active_merchant/country.rb +3 -1
  255. data/lib/active_merchant/errors.rb +4 -1
  256. data/lib/active_merchant/net_http_ssl_connection.rb +1 -0
  257. data/lib/active_merchant/network_connection_retries.rb +15 -17
  258. data/lib/active_merchant/post_data.rb +3 -2
  259. data/lib/active_merchant/posts_data.rb +2 -2
  260. data/lib/active_merchant/version.rb +1 -1
  261. data/lib/active_merchant.rb +2 -2
  262. data/lib/certs/cacert.pem +1587 -2361
  263. data/lib/support/gateway_support.rb +1 -1
  264. data/lib/support/ssl_verify.rb +3 -7
  265. data/lib/support/ssl_version.rb +2 -3
  266. metadata +86 -34
  267. data/lib/active_merchant/billing/gateways/moneris_us.rb +0 -352
@@ -1,25 +1,24 @@
1
1
  module ActiveMerchant #:nodoc:
2
2
  module Billing #:nodoc:
3
3
  class SecureNetGateway < Gateway
4
-
5
4
  API_VERSION = '4.0'
6
5
 
7
6
  TRANSACTIONS = {
8
- :auth_only => '0000',
9
- :auth_capture => '0100',
10
- :prior_auth_capture => '0200',
11
- :void => '0400',
12
- :credit => '0500'
7
+ auth_only: '0000',
8
+ auth_capture: '0100',
9
+ prior_auth_capture: '0200',
10
+ void: '0400',
11
+ credit: '0500'
13
12
  }
14
13
 
15
14
  XML_ATTRIBUTES = {
16
- 'xmlns' => 'http://gateway.securenet.com/API/Contracts',
17
- 'xmlns:i' => 'http://www.w3.org/2001/XMLSchema-instance'
18
- }
15
+ 'xmlns' => 'http://gateway.securenet.com/API/Contracts',
16
+ 'xmlns:i' => 'http://www.w3.org/2001/XMLSchema-instance'
17
+ }
19
18
  NIL_ATTRIBUTE = { 'i:nil' => 'true' }
20
19
 
21
20
  self.supported_countries = ['US']
22
- self.supported_cardtypes = [:visa, :master, :american_express, :discover]
21
+ self.supported_cardtypes = %i[visa master american_express discover]
23
22
  self.homepage_url = 'http://www.securenet.com/'
24
23
  self.display_name = 'SecureNet'
25
24
 
@@ -28,8 +27,8 @@ module ActiveMerchant #:nodoc:
28
27
 
29
28
  APPROVED, DECLINED = 1, 2
30
29
 
31
- CARD_CODE_ERRORS = %w( N S )
32
- AVS_ERRORS = %w( A E N R W Z )
30
+ CARD_CODE_ERRORS = %w(N S)
31
+ AVS_ERRORS = %w(A E N R W Z)
33
32
 
34
33
  def initialize(options = {})
35
34
  requires!(options, :login, :password)
@@ -81,11 +80,10 @@ module ActiveMerchant #:nodoc:
81
80
  response = parse(data)
82
81
 
83
82
  Response.new(success?(response), message_from(response), response,
84
- :test => test?,
85
- :authorization => build_authorization(response),
86
- :avs_result => { :code => response[:avs_result_code] },
87
- :cvv_result => response[:card_code_response_code]
88
- )
83
+ test: test?,
84
+ authorization: build_authorization(response),
85
+ avs_result: { code: response[:avs_result_code] },
86
+ cvv_result: response[:card_code_response_code])
89
87
  end
90
88
 
91
89
  def build_request(request)
@@ -136,13 +134,9 @@ module ActiveMerchant #:nodoc:
136
134
  end
137
135
 
138
136
  def add_customer_data(xml, options)
139
- if options.has_key? :customer
140
- xml.tag! 'CUSTOMERID', options[:customer]
141
- end
137
+ xml.tag! 'CUSTOMERID', options[:customer] if options.has_key? :customer
142
138
 
143
- if options.has_key? :ip
144
- xml.tag! 'CUSTOMERIP', options[:ip]
145
- end
139
+ xml.tag! 'CUSTOMERIP', options[:ip] if options.has_key? :ip
146
140
  end
147
141
 
148
142
  def add_address(xml, creditcard, options)
@@ -161,7 +155,7 @@ module ActiveMerchant #:nodoc:
161
155
  xml.tag! 'FIRSTNAME', creditcard.first_name
162
156
  xml.tag! 'LASTNAME', creditcard.last_name
163
157
  xml.tag! 'PHONE', address[:phone].to_s
164
- xml.tag! 'STATE', address[:state].blank? ? 'n/a' : address[:state]
158
+ xml.tag! 'STATE', address[:state].blank? ? 'n/a' : address[:state]
165
159
  xml.tag! 'ZIP', address[:zip].to_s
166
160
  end
167
161
  end
@@ -182,7 +176,7 @@ module ActiveMerchant #:nodoc:
182
176
  xml.tag! 'LASTNAME', address[:last_name].to_s
183
177
  end
184
178
 
185
- xml.tag! 'STATE', address[:state].blank? ? 'n/a' : address[:state]
179
+ xml.tag! 'STATE', address[:state].blank? ? 'n/a' : address[:state]
186
180
  xml.tag! 'ZIP', address[:zip].to_s
187
181
  end
188
182
  else
@@ -261,7 +255,6 @@ module ActiveMerchant #:nodoc:
261
255
  def build_authorization(response)
262
256
  [response[:transactionid], response[:transactionamount], response[:last4_digits]].join('|')
263
257
  end
264
-
265
258
  end
266
259
  end
267
260
  end
@@ -17,12 +17,12 @@ module ActiveMerchant #:nodoc:
17
17
  self.default_currency = 'USD'
18
18
 
19
19
  self.supported_countries = %w(US CA GB AU)
20
- self.supported_cardtypes = [:visa, :master, :american_express, :discover, :diners_club, :jcb]
20
+ self.supported_cardtypes = %i[visa master american_express discover diners_club jcb]
21
21
  self.homepage_url = 'http://www.securepay.com/'
22
22
  self.display_name = 'SecurePay'
23
23
 
24
- CARD_CODE_ERRORS = %w( N S )
25
- AVS_ERRORS = %w( A E N R W Z )
24
+ CARD_CODE_ERRORS = %w(N S)
25
+ AVS_ERRORS = %w(A E N R W Z)
26
26
  AVS_REASON_CODES = %w(27 45)
27
27
  TRANSACTION_ALREADY_ACTIONED = %w(310 311)
28
28
 
@@ -57,12 +57,11 @@ module ActiveMerchant #:nodoc:
57
57
  message = message_from(response)
58
58
 
59
59
  Response.new(success?(response), message, response,
60
- :test => test?,
61
- :authorization => response[:transaction_id],
62
- :fraud_review => fraud_review?(response),
63
- :avs_result => { :code => response[:avs_result_code] },
64
- :cvv_result => response[:card_code]
65
- )
60
+ test: test?,
61
+ authorization: response[:transaction_id],
62
+ fraud_review: fraud_review?(response),
63
+ avs_result: { code: response[:avs_result_code] },
64
+ cvv_result: response[:card_code])
66
65
  end
67
66
 
68
67
  def success?(response)
@@ -77,14 +76,14 @@ module ActiveMerchant #:nodoc:
77
76
  fields = split(body)
78
77
 
79
78
  results = {
80
- :response_code => fields[RESPONSE_CODE].to_i,
81
- :response_reason_code => fields[RESPONSE_REASON_CODE],
82
- :response_reason_text => fields[RESPONSE_REASON_TEXT],
83
- :avs_result_code => fields[AVS_RESULT_CODE],
84
- :transaction_id => fields[TRANSACTION_ID],
85
- :card_code => fields[CARD_CODE_RESPONSE_CODE],
86
- :authorization_code => fields[AUTHORIZATION_CODE],
87
- :cardholder_authentication_code => fields[CARDHOLDER_AUTH_CODE]
79
+ response_code: fields[RESPONSE_CODE].to_i,
80
+ response_reason_code: fields[RESPONSE_REASON_CODE],
81
+ response_reason_text: fields[RESPONSE_REASON_TEXT],
82
+ avs_result_code: fields[AVS_RESULT_CODE],
83
+ transaction_id: fields[TRANSACTION_ID],
84
+ card_code: fields[CARD_CODE_RESPONSE_CODE],
85
+ authorization_code: fields[AUTHORIZATION_CODE],
86
+ cardholder_authentication_code: fields[CARDHOLDER_AUTH_CODE]
88
87
  }
89
88
  results
90
89
  end
@@ -115,7 +114,7 @@ module ActiveMerchant #:nodoc:
115
114
  post[:description] = options[:description]
116
115
  end
117
116
 
118
- def add_creditcard(post, creditcard, options={})
117
+ def add_creditcard(post, creditcard, options = {})
119
118
  post[:card_num] = creditcard.number
120
119
  post[:card_code] = creditcard.verification_value if creditcard.verification_value?
121
120
  post[:exp_date] = expdate(creditcard)
@@ -123,7 +122,7 @@ module ActiveMerchant #:nodoc:
123
122
  post[:last_name] = creditcard.last_name
124
123
  end
125
124
 
126
- def add_payment_source(params, source, options={})
125
+ def add_payment_source(params, source, options = {})
127
126
  add_creditcard(params, source, options)
128
127
  end
129
128
 
@@ -137,17 +136,11 @@ module ActiveMerchant #:nodoc:
137
136
  post[:cust_id] = options[:customer] if Float(options[:customer]) rescue nil
138
137
  end
139
138
 
140
- if options.has_key? :ip
141
- post[:customer_ip] = options[:ip]
142
- end
139
+ post[:customer_ip] = options[:ip] if options.has_key? :ip
143
140
 
144
- if options.has_key? :cardholder_authentication_value
145
- post[:cardholder_authentication_value] = options[:cardholder_authentication_value]
146
- end
141
+ post[:cardholder_authentication_value] = options[:cardholder_authentication_value] if options.has_key? :cardholder_authentication_value
147
142
 
148
- if options.has_key? :authentication_indicator
149
- post[:authentication_indicator] = options[:authentication_indicator]
150
- end
143
+ post[:authentication_indicator] = options[:authentication_indicator] if options.has_key? :authentication_indicator
151
144
  end
152
145
 
153
146
  # x_duplicate_window won't be sent by default, because sending it changes the response.
@@ -165,7 +158,7 @@ module ActiveMerchant #:nodoc:
165
158
  post[:zip] = address[:zip].to_s
166
159
  post[:city] = address[:city].to_s
167
160
  post[:country] = address[:country].to_s
168
- post[:state] = address[:state].blank? ? 'n/a' : address[:state]
161
+ post[:state] = address[:state].blank? ? 'n/a' : address[:state]
169
162
  end
170
163
 
171
164
  if address = options[:shipping_address]
@@ -177,16 +170,14 @@ module ActiveMerchant #:nodoc:
177
170
  post[:ship_to_zip] = address[:zip].to_s
178
171
  post[:ship_to_city] = address[:city].to_s
179
172
  post[:ship_to_country] = address[:country].to_s
180
- post[:ship_to_state] = address[:state].blank? ? 'n/a' : address[:state]
173
+ post[:ship_to_state] = address[:state].blank? ? 'n/a' : address[:state]
181
174
  end
182
175
  end
183
176
 
184
177
  def message_from(results)
185
178
  if results[:response_code] == DECLINED
186
179
  return CVVResult.messages[results[:card_code]] if CARD_CODE_ERRORS.include?(results[:card_code])
187
- if AVS_REASON_CODES.include?(results[:response_reason_code]) && AVS_ERRORS.include?(results[:avs_result_code])
188
- return AVSResult.messages[results[:avs_result_code]]
189
- end
180
+ return AVSResult.messages[results[:avs_result_code]] if AVS_REASON_CODES.include?(results[:response_reason_code]) && AVS_ERRORS.include?(results[:avs_result_code])
190
181
  end
191
182
 
192
183
  (results[:response_reason_text] ? results[:response_reason_text].chomp('.') : '')
@@ -8,14 +8,14 @@ module ActiveMerchant #:nodoc:
8
8
 
9
9
  class_attribute :test_periodic_url, :live_periodic_url
10
10
 
11
- self.test_url = 'https://api.securepay.com.au/test/payment'
11
+ self.test_url = 'https://test.api.securepay.com.au/xmlapi/payment'
12
12
  self.live_url = 'https://api.securepay.com.au/xmlapi/payment'
13
13
 
14
14
  self.test_periodic_url = 'https://test.securepay.com.au/xmlapi/periodic'
15
15
  self.live_periodic_url = 'https://api.securepay.com.au/xmlapi/periodic'
16
16
 
17
17
  self.supported_countries = ['AU']
18
- self.supported_cardtypes = [:visa, :master, :american_express, :diners_club, :jcb]
18
+ self.supported_cardtypes = %i[visa master american_express diners_club jcb]
19
19
 
20
20
  # The homepage URL of the gateway
21
21
  self.homepage_url = 'http://securepay.com.au'
@@ -35,26 +35,26 @@ module ActiveMerchant #:nodoc:
35
35
  # 10 Preauthorise
36
36
  # 11 Preauth Complete (Advice)
37
37
  TRANSACTIONS = {
38
- :purchase => 0,
39
- :authorization => 10,
40
- :capture => 11,
41
- :void => 6,
42
- :refund => 4
38
+ purchase: 0,
39
+ authorization: 10,
40
+ capture: 11,
41
+ void: 6,
42
+ refund: 4
43
43
  }
44
44
 
45
45
  PERIODIC_ACTIONS = {
46
- :add_triggered => 'add',
47
- :remove_triggered => 'delete',
48
- :trigger => 'trigger'
46
+ add_triggered: 'add',
47
+ remove_triggered: 'delete',
48
+ trigger: 'trigger'
49
49
  }
50
50
 
51
51
  PERIODIC_TYPES = {
52
- :add_triggered => 4,
53
- :remove_triggered => nil,
54
- :trigger => nil
52
+ add_triggered: 4,
53
+ remove_triggered: nil,
54
+ trigger: nil
55
55
  }
56
56
 
57
- SUCCESS_CODES = [ '00', '08', '11', '16', '77' ]
57
+ SUCCESS_CODES = %w[00 08 11 16 77]
58
58
 
59
59
  def initialize(options = {})
60
60
  requires!(options, :login, :password)
@@ -184,9 +184,8 @@ module ActiveMerchant #:nodoc:
184
184
  response = parse(ssl_post(test? ? self.test_url : self.live_url, build_request(action, request)))
185
185
 
186
186
  Response.new(success?(response), message_from(response), response,
187
- :test => test?,
188
- :authorization => authorization_from(response)
189
- )
187
+ test: test?,
188
+ authorization: authorization_from(response))
190
189
  end
191
190
 
192
191
  def build_periodic_item(action, money, credit_card, options)
@@ -241,9 +240,8 @@ module ActiveMerchant #:nodoc:
241
240
  response = parse(ssl_post(test? ? self.test_periodic_url : self.live_periodic_url, my_request))
242
241
 
243
242
  Response.new(success?(response), message_from(response), response,
244
- :test => test?,
245
- :authorization => authorization_from(response)
246
- )
243
+ test: test?,
244
+ authorization: authorization_from(response))
247
245
  end
248
246
 
249
247
  def success?(response)
@@ -2,7 +2,7 @@ module ActiveMerchant #:nodoc:
2
2
  module Billing #:nodoc:
3
3
  class SecurePayTechGateway < Gateway
4
4
  class SecurePayTechPostData < PostData
5
- self.required_fields = [ :OrderReference, :CardNumber, :CardExpiry, :CardHolderName, :CardType, :MerchantID, :MerchantKey, :Amount, :Currency ]
5
+ self.required_fields = %i[OrderReference CardNumber CardExpiry CardHolderName CardType MerchantID MerchantKey Amount Currency]
6
6
  end
7
7
 
8
8
  self.live_url = self.test_url = 'https://tx.securepaytech.com/web/HttpPostPurchase'
@@ -21,7 +21,7 @@ module ActiveMerchant #:nodoc:
21
21
 
22
22
  self.default_currency = 'NZD'
23
23
  self.supported_countries = ['NZ']
24
- self.supported_cardtypes = [:visa, :master, :american_express, :diners_club]
24
+ self.supported_cardtypes = %i[visa master american_express diners_club]
25
25
  self.homepage_url = 'http://www.securepaytech.com/'
26
26
  self.display_name = 'SecurePayTech'
27
27
 
@@ -85,9 +85,8 @@ module ActiveMerchant #:nodoc:
85
85
  response = parse(ssl_post(self.live_url, post_data(action, post)))
86
86
 
87
87
  Response.new(response[:result_code] == 1, message_from(response), response,
88
- :test => test?,
89
- :authorization => response[:merchant_transaction_reference]
90
- )
88
+ test: test?,
89
+ authorization: response[:merchant_transaction_reference])
91
90
  end
92
91
 
93
92
  def message_from(result)
@@ -9,7 +9,7 @@ module ActiveMerchant #:nodoc:
9
9
 
10
10
  self.default_currency = 'USD'
11
11
  self.money_format = :cents
12
- self.supported_cardtypes = [:visa, :master, :american_express, :discover, :jcb, :diners_club]
12
+ self.supported_cardtypes = %i[visa master american_express discover jcb diners_club]
13
13
 
14
14
  self.homepage_url = 'https://securionpay.com/'
15
15
  self.display_name = 'SecurionPay'
@@ -31,17 +31,17 @@ module ActiveMerchant #:nodoc:
31
31
  'expired_token' => STANDARD_ERROR_CODE[:card_declined]
32
32
  }
33
33
 
34
- def initialize(options={})
34
+ def initialize(options = {})
35
35
  requires!(options, :secret_key)
36
36
  super
37
37
  end
38
38
 
39
- def purchase(money, payment, options={})
39
+ def purchase(money, payment, options = {})
40
40
  post = create_post_for_auth_or_purchase(money, payment, options)
41
41
  commit('charges', post, options)
42
42
  end
43
43
 
44
- def authorize(money, payment, options={})
44
+ def authorize(money, payment, options = {})
45
45
  post = create_post_for_auth_or_purchase(money, payment, options)
46
46
  post[:captured] = 'false'
47
47
  commit('charges', post, options)
@@ -63,7 +63,7 @@ module ActiveMerchant #:nodoc:
63
63
  commit("charges/#{CGI.escape(authorization)}/refund", {}, options)
64
64
  end
65
65
 
66
- def verify(credit_card, options={})
66
+ def verify(credit_card, options = {})
67
67
  MultiResponse.run(:use_first_response) do |r|
68
68
  r.process { authorize(100, credit_card, options) }
69
69
  r.process(:ignore_result) { void(r.authorization, options) }
@@ -133,6 +133,7 @@ module ActiveMerchant #:nodoc:
133
133
  add_creditcard(post, payment, options)
134
134
  add_customer(post, payment, options)
135
135
  add_customer_data(post, options)
136
+ add_external_three_ds(post, options)
136
137
  if options[:email]
137
138
  post[:metadata] = {}
138
139
  post[:metadata][:email] = options[:email]
@@ -140,6 +141,40 @@ module ActiveMerchant #:nodoc:
140
141
  post
141
142
  end
142
143
 
144
+ def add_external_three_ds(post, options)
145
+ return if options[:three_d_secure].blank?
146
+
147
+ post[:threeDSecure] = {
148
+ external: {
149
+ version: options[:three_d_secure][:version],
150
+ authenticationValue: options[:three_d_secure][:cavv],
151
+ acsTransactionId: options[:three_d_secure][:acs_transaction_id],
152
+ status: options[:three_d_secure][:authentication_response_status],
153
+ eci: options[:three_d_secure][:eci]
154
+ }.merge(xid_or_ds_trans_id(options[:three_d_secure]))
155
+ }
156
+ end
157
+
158
+ def xid_or_ds_trans_id(three_ds)
159
+ if three_ds[:version].to_f >= 2.0
160
+ { dsTransactionId: three_ds[:ds_transaction_id] }
161
+ else
162
+ { xid: three_ds[:xid] }
163
+ end
164
+ end
165
+
166
+ def validate_three_ds_params(three_ds)
167
+ errors = {}
168
+ supported_version = %w{1.0.2 2.1.0 2.2.0}.include?(three_ds[:version])
169
+ supported_auth_response = ['Y', 'N', 'U', 'R', 'E', 'A', nil].include?(three_ds[:status])
170
+
171
+ errors[:three_ds_version] = 'ThreeDs version not supported' unless supported_version
172
+ errors[:auth_response] = 'Authentication response value not supported' unless supported_auth_response
173
+ errors.compact!
174
+
175
+ errors.present? ? Response.new(false, 'ThreeDs data is invalid', errors) : nil
176
+ end
177
+
143
178
  def add_amount(post, money, options, include_currency = false)
144
179
  currency = (options[:currency] || default_currency)
145
180
  post[:amount] = localized_amount(money, currency)
@@ -166,6 +201,7 @@ module ActiveMerchant #:nodoc:
166
201
 
167
202
  def add_address(post, options)
168
203
  return unless post[:card]&.kind_of?(Hash)
204
+
169
205
  if address = options[:billing_address]
170
206
  post[:card][:addressLine1] = address[:address1] if address[:address1]
171
207
  post[:card][:addressLine2] = address[:address2] if address[:address2]
@@ -181,6 +217,11 @@ module ActiveMerchant #:nodoc:
181
217
  end
182
218
 
183
219
  def commit(url, parameters = nil, options = {}, method = nil)
220
+ if parameters.present? && parameters[:threeDSecure].present?
221
+ three_ds_errors = validate_three_ds_params(parameters[:threeDSecure][:external])
222
+ return three_ds_errors if three_ds_errors
223
+ end
224
+
184
225
  response = api_request(url, parameters, options, method)
185
226
  success = !response.key?('error')
186
227
 
@@ -189,8 +230,7 @@ module ActiveMerchant #:nodoc:
189
230
  response,
190
231
  test: test?,
191
232
  authorization: (success ? response['id'] : response['error']['charge']),
192
- error_code: (success ? nil : STANDARD_ERROR_CODE_MAPPING[response['error']['code']])
193
- )
233
+ error_code: (success ? nil : STANDARD_ERROR_CODE_MAPPING[response['error']['code']]))
194
234
  end
195
235
 
196
236
  def headers(options = {})
@@ -214,6 +254,7 @@ module ActiveMerchant #:nodoc:
214
254
 
215
255
  params.map do |key, value|
216
256
  next if value.blank?
257
+
217
258
  if value.is_a?(Hash)
218
259
  h = {}
219
260
  value.each do |k, v|