activemerchant 1.42.6 → 1.90.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. checksums.yaml +5 -13
  2. data/CHANGELOG +1420 -2
  3. data/CONTRIBUTORS +106 -0
  4. data/README.md +107 -103
  5. data/lib/active_merchant/billing/apple_pay_payment_token.rb +22 -0
  6. data/lib/active_merchant/billing/avs_result.rb +12 -13
  7. data/lib/active_merchant/billing/base.rb +13 -16
  8. data/lib/active_merchant/billing/check.rb +35 -24
  9. data/lib/active_merchant/billing/compatibility.rb +117 -0
  10. data/lib/active_merchant/billing/credit_card.rb +196 -81
  11. data/lib/active_merchant/billing/credit_card_formatting.rb +6 -4
  12. data/lib/active_merchant/billing/credit_card_methods.rb +199 -75
  13. data/lib/active_merchant/billing/cvv_result.rb +15 -15
  14. data/lib/active_merchant/billing/gateway.rb +171 -39
  15. data/lib/active_merchant/billing/gateways/adyen.rb +380 -0
  16. data/lib/active_merchant/billing/gateways/allied_wallet.rb +205 -0
  17. data/lib/active_merchant/billing/gateways/authorize_net.rb +933 -604
  18. data/lib/active_merchant/billing/gateways/authorize_net_arb.rb +417 -0
  19. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +74 -54
  20. data/lib/active_merchant/billing/gateways/axcessms.rb +181 -0
  21. data/lib/active_merchant/billing/gateways/balanced.rb +130 -370
  22. data/lib/active_merchant/billing/gateways/bank_frick.rb +225 -0
  23. data/lib/active_merchant/billing/gateways/banwire.rb +23 -12
  24. data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +351 -0
  25. data/lib/active_merchant/billing/gateways/barclays_epdq_extra_plus.rb +6 -6
  26. data/lib/active_merchant/billing/gateways/be2bill.rb +2 -2
  27. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +109 -32
  28. data/lib/active_merchant/billing/gateways/beanstream.rb +59 -13
  29. data/lib/active_merchant/billing/gateways/beanstream_interac.rb +12 -9
  30. data/lib/active_merchant/billing/gateways/blue_pay.rb +520 -498
  31. data/lib/active_merchant/billing/gateways/blue_snap.rb +347 -0
  32. data/lib/active_merchant/billing/gateways/bogus.rb +80 -46
  33. data/lib/active_merchant/billing/gateways/borgun.rb +220 -0
  34. data/lib/active_merchant/billing/gateways/bpoint.rb +277 -0
  35. data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +15 -2
  36. data/lib/active_merchant/billing/gateways/braintree.rb +2 -2
  37. data/lib/active_merchant/billing/gateways/braintree_blue.rb +311 -121
  38. data/lib/active_merchant/billing/gateways/braintree_orange.rb +4 -4
  39. data/lib/active_merchant/billing/gateways/bridge_pay.rb +244 -0
  40. data/lib/active_merchant/billing/gateways/cams.rb +230 -0
  41. data/lib/active_merchant/billing/gateways/card_connect.rb +311 -0
  42. data/lib/active_merchant/billing/gateways/card_save.rb +6 -7
  43. data/lib/active_merchant/billing/gateways/card_stream.rb +235 -89
  44. data/lib/active_merchant/billing/gateways/cardknox.rb +327 -0
  45. data/lib/active_merchant/billing/gateways/cardprocess.rb +254 -0
  46. data/lib/active_merchant/billing/gateways/cashnet.rb +219 -0
  47. data/lib/active_merchant/billing/gateways/cc5.rb +50 -8
  48. data/lib/active_merchant/billing/gateways/cecabank.rb +27 -14
  49. data/lib/active_merchant/billing/gateways/cenpos.rb +327 -0
  50. data/lib/active_merchant/billing/gateways/checkout.rb +214 -0
  51. data/lib/active_merchant/billing/gateways/checkout_v2.rb +233 -0
  52. data/lib/active_merchant/billing/gateways/citrus_pay.rb +22 -0
  53. data/lib/active_merchant/billing/gateways/clearhaus.rb +220 -0
  54. data/lib/active_merchant/billing/gateways/commercegate.rb +142 -0
  55. data/lib/active_merchant/billing/gateways/conekta.rb +91 -97
  56. data/lib/active_merchant/billing/gateways/creditcall.rb +271 -0
  57. data/lib/active_merchant/billing/gateways/credorax.rb +356 -0
  58. data/lib/active_merchant/billing/gateways/ct_payment.rb +268 -0
  59. data/lib/active_merchant/billing/gateways/culqi.rb +277 -0
  60. data/lib/active_merchant/billing/gateways/cyber_source.rb +294 -158
  61. data/lib/active_merchant/billing/gateways/d_local.rb +226 -0
  62. data/lib/active_merchant/billing/gateways/data_cash.rb +59 -347
  63. data/lib/active_merchant/billing/gateways/dibs.rb +199 -0
  64. data/lib/active_merchant/billing/gateways/digitzs.rb +292 -0
  65. data/lib/active_merchant/billing/gateways/ebanx.rb +296 -0
  66. data/lib/active_merchant/billing/gateways/efsnet.rb +24 -39
  67. data/lib/active_merchant/billing/gateways/elavon.rb +146 -147
  68. data/lib/active_merchant/billing/gateways/element.rb +356 -0
  69. data/lib/active_merchant/billing/gateways/epay.rb +41 -31
  70. data/lib/active_merchant/billing/gateways/evo_ca.rb +1 -1
  71. data/lib/active_merchant/billing/gateways/eway.rb +79 -78
  72. data/lib/active_merchant/billing/gateways/eway_managed.rb +35 -36
  73. data/lib/active_merchant/billing/gateways/eway_rapid.rb +369 -228
  74. data/lib/active_merchant/billing/gateways/exact.rb +32 -26
  75. data/lib/active_merchant/billing/gateways/ezic.rb +195 -0
  76. data/lib/active_merchant/billing/gateways/fat_zebra.rb +90 -64
  77. data/lib/active_merchant/billing/gateways/federated_canada.rb +6 -14
  78. data/lib/active_merchant/billing/gateways/finansbank.rb +3 -3
  79. data/lib/active_merchant/billing/gateways/first_giving.rb +142 -0
  80. data/lib/active_merchant/billing/gateways/first_pay.rb +128 -122
  81. data/lib/active_merchant/billing/gateways/firstdata_e4.rb +190 -64
  82. data/lib/active_merchant/billing/gateways/firstdata_e4_v27.rb +446 -0
  83. data/lib/active_merchant/billing/gateways/flo2cash.rb +215 -0
  84. data/lib/active_merchant/billing/gateways/flo2cash_simple.rb +20 -0
  85. data/lib/active_merchant/billing/gateways/forte.rb +270 -0
  86. data/lib/active_merchant/billing/gateways/garanti.rb +29 -27
  87. data/lib/active_merchant/billing/gateways/global_collect.rb +340 -0
  88. data/lib/active_merchant/billing/gateways/global_transport.rb +194 -0
  89. data/lib/active_merchant/billing/gateways/hdfc.rb +35 -36
  90. data/lib/active_merchant/billing/gateways/hps.rb +305 -0
  91. data/lib/active_merchant/billing/gateways/iats_payments.rb +271 -16
  92. data/lib/active_merchant/billing/gateways/in_context_paypal_express.rb +15 -0
  93. data/lib/active_merchant/billing/gateways/inspire.rb +29 -32
  94. data/lib/active_merchant/billing/gateways/instapay.rb +5 -6
  95. data/lib/active_merchant/billing/gateways/ipp.rb +175 -0
  96. data/lib/active_merchant/billing/gateways/iridium.rb +247 -41
  97. data/lib/active_merchant/billing/gateways/itransact.rb +4 -5
  98. data/lib/active_merchant/billing/gateways/iveri.rb +251 -0
  99. data/lib/active_merchant/billing/gateways/jetpay.rb +198 -71
  100. data/lib/active_merchant/billing/gateways/jetpay_v2.rb +437 -0
  101. data/lib/active_merchant/billing/gateways/komoju.rb +115 -0
  102. data/lib/active_merchant/billing/gateways/kushki.rb +219 -0
  103. data/lib/active_merchant/billing/gateways/latitude19.rb +411 -0
  104. data/lib/active_merchant/billing/gateways/linkpoint.rb +45 -43
  105. data/lib/active_merchant/billing/gateways/litle.rb +328 -444
  106. data/lib/active_merchant/billing/gateways/mastercard.rb +267 -0
  107. data/lib/active_merchant/billing/gateways/maxipago.rb +145 -115
  108. data/lib/active_merchant/billing/gateways/mercado_pago.rb +277 -0
  109. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +37 -19
  110. data/lib/active_merchant/billing/gateways/merchant_one.rb +13 -15
  111. data/lib/active_merchant/billing/gateways/merchant_partners.rb +245 -0
  112. data/lib/active_merchant/billing/gateways/merchant_ware.rb +57 -60
  113. data/lib/active_merchant/billing/gateways/merchant_ware_version_four.rb +59 -48
  114. data/lib/active_merchant/billing/gateways/merchant_warrior.rb +38 -19
  115. data/lib/active_merchant/billing/gateways/mercury.rb +77 -54
  116. data/lib/active_merchant/billing/gateways/metrics_global.rb +11 -30
  117. data/lib/active_merchant/billing/gateways/micropayment.rb +183 -0
  118. data/lib/active_merchant/billing/gateways/migs.rb +81 -22
  119. data/lib/active_merchant/billing/gateways/modern_payments.rb +3 -3
  120. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +23 -25
  121. data/lib/active_merchant/billing/gateways/monei.rb +307 -0
  122. data/lib/active_merchant/billing/gateways/moneris.rb +146 -64
  123. data/lib/active_merchant/billing/gateways/moneris_us.rb +197 -53
  124. data/lib/active_merchant/billing/gateways/money_movers.rb +6 -15
  125. data/lib/active_merchant/billing/gateways/mundipagg.rb +292 -0
  126. data/lib/active_merchant/billing/gateways/nab_transact.rb +86 -64
  127. data/lib/active_merchant/billing/gateways/ncr_secure_pay.rb +165 -0
  128. data/lib/active_merchant/billing/gateways/net_registry.rb +11 -5
  129. data/lib/active_merchant/billing/gateways/netaxept.rb +21 -22
  130. data/lib/active_merchant/billing/gateways/netbanx.rb +290 -0
  131. data/lib/active_merchant/billing/gateways/netbilling.rb +70 -35
  132. data/lib/active_merchant/billing/gateways/netpay.rb +5 -6
  133. data/lib/active_merchant/billing/gateways/network_merchants.rb +241 -0
  134. data/lib/active_merchant/billing/gateways/nmi.rb +274 -10
  135. data/lib/active_merchant/billing/gateways/ogone.rb +90 -47
  136. data/lib/active_merchant/billing/gateways/omise.rb +324 -0
  137. data/lib/active_merchant/billing/gateways/openpay.rb +48 -20
  138. data/lib/active_merchant/billing/gateways/opp.rb +369 -0
  139. data/lib/active_merchant/billing/gateways/optimal_payment.rb +79 -44
  140. data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +22 -21
  141. data/lib/active_merchant/billing/gateways/orbital.rb +346 -102
  142. data/lib/active_merchant/billing/gateways/pac_net_raven.rb +48 -29
  143. data/lib/active_merchant/billing/gateways/pagarme.rb +246 -0
  144. data/lib/active_merchant/billing/gateways/pago_facil.rb +122 -0
  145. data/lib/active_merchant/billing/gateways/pay_conex.rb +245 -0
  146. data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +67 -48
  147. data/lib/active_merchant/billing/gateways/pay_hub.rb +213 -0
  148. data/lib/active_merchant/billing/gateways/pay_junction.rb +20 -26
  149. data/lib/active_merchant/billing/gateways/pay_junction_v2.rb +188 -0
  150. data/lib/active_merchant/billing/gateways/pay_secure.rb +7 -15
  151. data/lib/active_merchant/billing/gateways/paybox_direct.rb +40 -36
  152. data/lib/active_merchant/billing/gateways/payeezy.rb +410 -0
  153. data/lib/active_merchant/billing/gateways/payex.rb +38 -30
  154. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +62 -36
  155. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +11 -7
  156. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +3 -3
  157. data/lib/active_merchant/billing/gateways/payflow.rb +74 -27
  158. data/lib/active_merchant/billing/gateways/payflow_express.rb +77 -81
  159. data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +2 -3
  160. data/lib/active_merchant/billing/gateways/payflow_uk.rb +5 -6
  161. data/lib/active_merchant/billing/gateways/payment_express.rb +54 -45
  162. data/lib/active_merchant/billing/gateways/paymentez.rb +304 -0
  163. data/lib/active_merchant/billing/gateways/paymill.rb +160 -66
  164. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +54 -7
  165. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +4 -0
  166. data/lib/active_merchant/billing/gateways/paypal/paypal_recurring_api.rb +17 -3
  167. data/lib/active_merchant/billing/gateways/paypal.rb +36 -27
  168. data/lib/active_merchant/billing/gateways/paypal_ca.rb +1 -1
  169. data/lib/active_merchant/billing/gateways/paypal_digital_goods.rb +7 -6
  170. data/lib/active_merchant/billing/gateways/paypal_express.rb +32 -4
  171. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +3 -3
  172. data/lib/active_merchant/billing/gateways/payscout.rb +2 -13
  173. data/lib/active_merchant/billing/gateways/paystation.rb +96 -88
  174. data/lib/active_merchant/billing/gateways/payu_in.rb +248 -0
  175. data/lib/active_merchant/billing/gateways/payu_latam.rb +445 -0
  176. data/lib/active_merchant/billing/gateways/payway.rb +8 -8
  177. data/lib/active_merchant/billing/gateways/pin.rb +74 -18
  178. data/lib/active_merchant/billing/gateways/plugnpay.rb +66 -76
  179. data/lib/active_merchant/billing/gateways/pro_pay.rb +326 -0
  180. data/lib/active_merchant/billing/gateways/psigate.rb +30 -30
  181. data/lib/active_merchant/billing/gateways/psl_card.rb +27 -34
  182. data/lib/active_merchant/billing/gateways/qbms.rb +65 -54
  183. data/lib/active_merchant/billing/gateways/quantum.rb +18 -18
  184. data/lib/active_merchant/billing/gateways/quickbooks.rb +290 -0
  185. data/lib/active_merchant/billing/gateways/quickpay/quickpay_common.rb +184 -0
  186. data/lib/active_merchant/billing/gateways/quickpay/quickpay_v10.rb +295 -0
  187. data/lib/active_merchant/billing/gateways/quickpay/quickpay_v4to7.rb +226 -0
  188. data/lib/active_merchant/billing/gateways/quickpay.rb +10 -350
  189. data/lib/active_merchant/billing/gateways/qvalent.rb +236 -0
  190. data/lib/active_merchant/billing/gateways/realex.rb +78 -48
  191. data/lib/active_merchant/billing/gateways/redsys.rb +310 -170
  192. data/lib/active_merchant/billing/gateways/s5.rb +246 -0
  193. data/lib/active_merchant/billing/gateways/safe_charge.rb +262 -0
  194. data/lib/active_merchant/billing/gateways/sage.rb +415 -119
  195. data/lib/active_merchant/billing/gateways/sage_pay.rb +195 -90
  196. data/lib/active_merchant/billing/gateways/sallie_mae.rb +11 -12
  197. data/lib/active_merchant/billing/gateways/secure_net.rb +51 -43
  198. data/lib/active_merchant/billing/gateways/secure_pay.rb +182 -10
  199. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +25 -14
  200. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +10 -18
  201. data/lib/active_merchant/billing/gateways/securion_pay.rb +264 -0
  202. data/lib/active_merchant/billing/gateways/skip_jack.rb +35 -38
  203. data/lib/active_merchant/billing/gateways/smart_ps.rb +50 -42
  204. data/lib/active_merchant/billing/gateways/so_easy_pay.rb +9 -9
  205. data/lib/active_merchant/billing/gateways/spreedly_core.rb +62 -12
  206. data/lib/active_merchant/billing/gateways/stripe.rb +536 -103
  207. data/lib/active_merchant/billing/gateways/swipe_checkout.rb +12 -18
  208. data/lib/active_merchant/billing/gateways/telr.rb +274 -0
  209. data/lib/active_merchant/billing/gateways/tns.rb +22 -0
  210. data/lib/active_merchant/billing/gateways/trans_first.rb +143 -30
  211. data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +608 -0
  212. data/lib/active_merchant/billing/gateways/transact_pro.rb +224 -0
  213. data/lib/active_merchant/billing/gateways/transax.rb +5 -6
  214. data/lib/active_merchant/billing/gateways/transnational.rb +2 -232
  215. data/lib/active_merchant/billing/gateways/trexle.rb +218 -0
  216. data/lib/active_merchant/billing/gateways/trust_commerce.rb +86 -57
  217. data/lib/active_merchant/billing/gateways/usa_epay.rb +4 -4
  218. data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +196 -89
  219. data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +157 -32
  220. data/lib/active_merchant/billing/gateways/vanco.rb +294 -0
  221. data/lib/active_merchant/billing/gateways/verifi.rb +42 -49
  222. data/lib/active_merchant/billing/gateways/viaklix.rb +11 -24
  223. data/lib/active_merchant/billing/gateways/visanet_peru.rb +233 -0
  224. data/lib/active_merchant/billing/gateways/webpay.rb +26 -28
  225. data/lib/active_merchant/billing/gateways/wepay.rb +237 -0
  226. data/lib/active_merchant/billing/gateways/wirecard.rb +153 -31
  227. data/lib/active_merchant/billing/gateways/world_net.rb +344 -0
  228. data/lib/active_merchant/billing/gateways/worldpay.rb +207 -63
  229. data/lib/active_merchant/billing/gateways/worldpay_online_payments.rb +215 -0
  230. data/lib/active_merchant/billing/gateways/worldpay_us.rb +221 -0
  231. data/lib/active_merchant/billing/gateways.rb +8 -11
  232. data/lib/active_merchant/billing/model.rb +30 -0
  233. data/lib/active_merchant/billing/network_tokenization_credit_card.rb +39 -0
  234. data/lib/active_merchant/billing/payment_token.rb +21 -0
  235. data/lib/active_merchant/billing/rails.rb +3 -0
  236. data/lib/active_merchant/billing/response.rb +31 -24
  237. data/lib/active_merchant/billing.rb +7 -1
  238. data/lib/active_merchant/connection.rb +195 -0
  239. data/lib/active_merchant/country.rb +335 -0
  240. data/lib/active_merchant/empty.rb +20 -0
  241. data/lib/active_merchant/errors.rb +35 -0
  242. data/lib/active_merchant/net_http_ssl_connection.rb +10 -0
  243. data/lib/active_merchant/network_connection_retries.rb +80 -0
  244. data/lib/active_merchant/post_data.rb +25 -0
  245. data/lib/active_merchant/posts_data.rb +92 -0
  246. data/lib/active_merchant/version.rb +1 -1
  247. data/lib/active_merchant.rb +23 -27
  248. data/lib/activemerchant.rb +1 -1
  249. data/lib/certs/cacert.pem +3988 -0
  250. data/lib/support/gateway_support.rb +7 -9
  251. data/lib/support/outbound_hosts.rb +13 -10
  252. data/lib/support/ssl_verify.rb +6 -7
  253. data/lib/support/ssl_version.rb +87 -0
  254. metadata +148 -323
  255. checksums.yaml.gz.sig +0 -0
  256. data/gem-public_cert.pem +0 -21
  257. data/lib/active_merchant/billing/expiry_date.rb +0 -34
  258. data/lib/active_merchant/billing/gateways/app55.rb +0 -185
  259. data/lib/active_merchant/billing/gateways/barclays_epdq.rb +0 -314
  260. data/lib/active_merchant/billing/gateways/certo_direct.rb +0 -277
  261. data/lib/active_merchant/billing/gateways/ideal/ideal_base.rb +0 -249
  262. data/lib/active_merchant/billing/gateways/ideal/ideal_rabobank.pem +0 -13
  263. data/lib/active_merchant/billing/gateways/ideal/ideal_response.rb +0 -29
  264. data/lib/active_merchant/billing/gateways/ideal_rabobank.rb +0 -66
  265. data/lib/active_merchant/billing/gateways/orbital/avs_result.rb +0 -93
  266. data/lib/active_merchant/billing/gateways/orbital/cvv_result.rb +0 -34
  267. data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +0 -93
  268. data/lib/active_merchant/billing/gateways/sage/sage_core.rb +0 -114
  269. data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +0 -102
  270. data/lib/active_merchant/billing/gateways/samurai.rb +0 -118
  271. data/lib/active_merchant/billing/gateways/vindicia.rb +0 -361
  272. data/lib/active_merchant/billing/integrations/a1agregator/helper.rb +0 -31
  273. data/lib/active_merchant/billing/integrations/a1agregator/notification.rb +0 -186
  274. data/lib/active_merchant/billing/integrations/a1agregator/status.rb +0 -38
  275. data/lib/active_merchant/billing/integrations/a1agregator.rb +0 -26
  276. data/lib/active_merchant/billing/integrations/action_view_helper.rb +0 -74
  277. data/lib/active_merchant/billing/integrations/alipay/helper.rb +0 -34
  278. data/lib/active_merchant/billing/integrations/alipay/notification.rb +0 -101
  279. data/lib/active_merchant/billing/integrations/alipay.rb +0 -18
  280. data/lib/active_merchant/billing/integrations/authorize_net_sim/helper.rb +0 -229
  281. data/lib/active_merchant/billing/integrations/authorize_net_sim/notification.rb +0 -340
  282. data/lib/active_merchant/billing/integrations/authorize_net_sim.rb +0 -38
  283. data/lib/active_merchant/billing/integrations/bit_pay/helper.rb +0 -64
  284. data/lib/active_merchant/billing/integrations/bit_pay/notification.rb +0 -74
  285. data/lib/active_merchant/billing/integrations/bit_pay/return.rb +0 -10
  286. data/lib/active_merchant/billing/integrations/bit_pay.rb +0 -30
  287. data/lib/active_merchant/billing/integrations/bogus/helper.rb +0 -17
  288. data/lib/active_merchant/billing/integrations/bogus/notification.rb +0 -11
  289. data/lib/active_merchant/billing/integrations/bogus/return.rb +0 -10
  290. data/lib/active_merchant/billing/integrations/bogus.rb +0 -23
  291. data/lib/active_merchant/billing/integrations/chronopay/helper.rb +0 -120
  292. data/lib/active_merchant/billing/integrations/chronopay/notification.rb +0 -158
  293. data/lib/active_merchant/billing/integrations/chronopay/return.rb +0 -10
  294. data/lib/active_merchant/billing/integrations/chronopay.rb +0 -23
  295. data/lib/active_merchant/billing/integrations/citrus/helper.rb +0 -40
  296. data/lib/active_merchant/billing/integrations/citrus/notification.rb +0 -133
  297. data/lib/active_merchant/billing/integrations/citrus/return.rb +0 -40
  298. data/lib/active_merchant/billing/integrations/citrus.rb +0 -51
  299. data/lib/active_merchant/billing/integrations/direc_pay/helper.rb +0 -200
  300. data/lib/active_merchant/billing/integrations/direc_pay/notification.rb +0 -76
  301. data/lib/active_merchant/billing/integrations/direc_pay/return.rb +0 -32
  302. data/lib/active_merchant/billing/integrations/direc_pay/status.rb +0 -37
  303. data/lib/active_merchant/billing/integrations/direc_pay.rb +0 -41
  304. data/lib/active_merchant/billing/integrations/directebanking/helper.rb +0 -90
  305. data/lib/active_merchant/billing/integrations/directebanking/notification.rb +0 -120
  306. data/lib/active_merchant/billing/integrations/directebanking/return.rb +0 -11
  307. data/lib/active_merchant/billing/integrations/directebanking.rb +0 -47
  308. data/lib/active_merchant/billing/integrations/doku/helper.rb +0 -102
  309. data/lib/active_merchant/billing/integrations/doku/notification.rb +0 -69
  310. data/lib/active_merchant/billing/integrations/doku/return.rb +0 -10
  311. data/lib/active_merchant/billing/integrations/doku.rb +0 -24
  312. data/lib/active_merchant/billing/integrations/dotpay/helper.rb +0 -77
  313. data/lib/active_merchant/billing/integrations/dotpay/notification.rb +0 -86
  314. data/lib/active_merchant/billing/integrations/dotpay/return.rb +0 -11
  315. data/lib/active_merchant/billing/integrations/dotpay.rb +0 -22
  316. data/lib/active_merchant/billing/integrations/dwolla/common.rb +0 -23
  317. data/lib/active_merchant/billing/integrations/dwolla/helper.rb +0 -43
  318. data/lib/active_merchant/billing/integrations/dwolla/notification.rb +0 -64
  319. data/lib/active_merchant/billing/integrations/dwolla/return.rb +0 -49
  320. data/lib/active_merchant/billing/integrations/dwolla.rb +0 -23
  321. data/lib/active_merchant/billing/integrations/e_payment_plans/helper.rb +0 -34
  322. data/lib/active_merchant/billing/integrations/e_payment_plans/notification.rb +0 -84
  323. data/lib/active_merchant/billing/integrations/e_payment_plans.rb +0 -48
  324. data/lib/active_merchant/billing/integrations/easy_pay/common.rb +0 -40
  325. data/lib/active_merchant/billing/integrations/easy_pay/helper.rb +0 -36
  326. data/lib/active_merchant/billing/integrations/easy_pay/notification.rb +0 -59
  327. data/lib/active_merchant/billing/integrations/easy_pay.rb +0 -30
  328. data/lib/active_merchant/billing/integrations/epay/helper.rb +0 -55
  329. data/lib/active_merchant/billing/integrations/epay/notification.rb +0 -110
  330. data/lib/active_merchant/billing/integrations/epay.rb +0 -21
  331. data/lib/active_merchant/billing/integrations/first_data/helper.rb +0 -61
  332. data/lib/active_merchant/billing/integrations/first_data/notification.rb +0 -56
  333. data/lib/active_merchant/billing/integrations/first_data.rb +0 -38
  334. data/lib/active_merchant/billing/integrations/gestpay/common.rb +0 -42
  335. data/lib/active_merchant/billing/integrations/gestpay/helper.rb +0 -70
  336. data/lib/active_merchant/billing/integrations/gestpay/notification.rb +0 -85
  337. data/lib/active_merchant/billing/integrations/gestpay/return.rb +0 -10
  338. data/lib/active_merchant/billing/integrations/gestpay.rb +0 -25
  339. data/lib/active_merchant/billing/integrations/helper.rb +0 -117
  340. data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +0 -58
  341. data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +0 -59
  342. data/lib/active_merchant/billing/integrations/hi_trust/return.rb +0 -68
  343. data/lib/active_merchant/billing/integrations/hi_trust.rb +0 -27
  344. data/lib/active_merchant/billing/integrations/ipay88/helper.rb +0 -118
  345. data/lib/active_merchant/billing/integrations/ipay88/notification.rb +0 -103
  346. data/lib/active_merchant/billing/integrations/ipay88/return.rb +0 -29
  347. data/lib/active_merchant/billing/integrations/ipay88.rb +0 -23
  348. data/lib/active_merchant/billing/integrations/liqpay/helper.rb +0 -43
  349. data/lib/active_merchant/billing/integrations/liqpay/notification.rb +0 -89
  350. data/lib/active_merchant/billing/integrations/liqpay/return.rb +0 -83
  351. data/lib/active_merchant/billing/integrations/liqpay.rb +0 -30
  352. data/lib/active_merchant/billing/integrations/maksuturva/helper.rb +0 -119
  353. data/lib/active_merchant/billing/integrations/maksuturva/notification.rb +0 -48
  354. data/lib/active_merchant/billing/integrations/maksuturva.rb +0 -86
  355. data/lib/active_merchant/billing/integrations/moneybookers/helper.rb +0 -75
  356. data/lib/active_merchant/billing/integrations/moneybookers/notification.rb +0 -123
  357. data/lib/active_merchant/billing/integrations/moneybookers.rb +0 -26
  358. data/lib/active_merchant/billing/integrations/nochex/helper.rb +0 -68
  359. data/lib/active_merchant/billing/integrations/nochex/notification.rb +0 -94
  360. data/lib/active_merchant/billing/integrations/nochex/return.rb +0 -10
  361. data/lib/active_merchant/billing/integrations/nochex.rb +0 -88
  362. data/lib/active_merchant/billing/integrations/notification.rb +0 -71
  363. data/lib/active_merchant/billing/integrations/paxum/common.rb +0 -24
  364. data/lib/active_merchant/billing/integrations/paxum/helper.rb +0 -42
  365. data/lib/active_merchant/billing/integrations/paxum/notification.rb +0 -33
  366. data/lib/active_merchant/billing/integrations/paxum.rb +0 -44
  367. data/lib/active_merchant/billing/integrations/pay_fast/common.rb +0 -42
  368. data/lib/active_merchant/billing/integrations/pay_fast/helper.rb +0 -50
  369. data/lib/active_merchant/billing/integrations/pay_fast/notification.rb +0 -134
  370. data/lib/active_merchant/billing/integrations/pay_fast/return.rb +0 -10
  371. data/lib/active_merchant/billing/integrations/pay_fast.rb +0 -70
  372. data/lib/active_merchant/billing/integrations/paydollar/helper.rb +0 -41
  373. data/lib/active_merchant/billing/integrations/paydollar/notification.rb +0 -60
  374. data/lib/active_merchant/billing/integrations/paydollar/return.rb +0 -15
  375. data/lib/active_merchant/billing/integrations/paydollar.rb +0 -59
  376. data/lib/active_merchant/billing/integrations/payflow_link/helper.rb +0 -116
  377. data/lib/active_merchant/billing/integrations/payflow_link/notification.rb +0 -78
  378. data/lib/active_merchant/billing/integrations/payflow_link.rb +0 -21
  379. data/lib/active_merchant/billing/integrations/paypal/helper.rb +0 -119
  380. data/lib/active_merchant/billing/integrations/paypal/notification.rb +0 -227
  381. data/lib/active_merchant/billing/integrations/paypal/return.rb +0 -10
  382. data/lib/active_merchant/billing/integrations/paypal.rb +0 -39
  383. data/lib/active_merchant/billing/integrations/paypal_payments_advanced/helper.rb +0 -15
  384. data/lib/active_merchant/billing/integrations/paypal_payments_advanced.rb +0 -20
  385. data/lib/active_merchant/billing/integrations/paysbuy/helper.rb +0 -15
  386. data/lib/active_merchant/billing/integrations/paysbuy/notification.rb +0 -39
  387. data/lib/active_merchant/billing/integrations/paysbuy.rb +0 -36
  388. data/lib/active_merchant/billing/integrations/payu_in/helper.rb +0 -76
  389. data/lib/active_merchant/billing/integrations/payu_in/notification.rb +0 -154
  390. data/lib/active_merchant/billing/integrations/payu_in/return.rb +0 -36
  391. data/lib/active_merchant/billing/integrations/payu_in.rb +0 -36
  392. data/lib/active_merchant/billing/integrations/payu_in_paisa/helper.rb +0 -19
  393. data/lib/active_merchant/billing/integrations/payu_in_paisa/notification.rb +0 -13
  394. data/lib/active_merchant/billing/integrations/payu_in_paisa/return.rb +0 -16
  395. data/lib/active_merchant/billing/integrations/payu_in_paisa.rb +0 -30
  396. data/lib/active_merchant/billing/integrations/platron/helper.rb +0 -32
  397. data/lib/active_merchant/billing/integrations/platron/notification.rb +0 -113
  398. data/lib/active_merchant/billing/integrations/platron.rb +0 -28
  399. data/lib/active_merchant/billing/integrations/pxpay/helper.rb +0 -112
  400. data/lib/active_merchant/billing/integrations/pxpay/notification.rb +0 -157
  401. data/lib/active_merchant/billing/integrations/pxpay/return.rb +0 -25
  402. data/lib/active_merchant/billing/integrations/pxpay.rb +0 -31
  403. data/lib/active_merchant/billing/integrations/quickpay/helper.rb +0 -96
  404. data/lib/active_merchant/billing/integrations/quickpay/notification.rb +0 -137
  405. data/lib/active_merchant/billing/integrations/quickpay.rb +0 -21
  406. data/lib/active_merchant/billing/integrations/rbkmoney/helper.rb +0 -23
  407. data/lib/active_merchant/billing/integrations/rbkmoney/notification.rb +0 -91
  408. data/lib/active_merchant/billing/integrations/rbkmoney.rb +0 -17
  409. data/lib/active_merchant/billing/integrations/return.rb +0 -42
  410. data/lib/active_merchant/billing/integrations/robokassa/common.rb +0 -19
  411. data/lib/active_merchant/billing/integrations/robokassa/helper.rb +0 -50
  412. data/lib/active_merchant/billing/integrations/robokassa/notification.rb +0 -55
  413. data/lib/active_merchant/billing/integrations/robokassa/return.rb +0 -17
  414. data/lib/active_merchant/billing/integrations/robokassa.rb +0 -49
  415. data/lib/active_merchant/billing/integrations/sage_pay_form/encryption.rb +0 -33
  416. data/lib/active_merchant/billing/integrations/sage_pay_form/helper.rb +0 -136
  417. data/lib/active_merchant/billing/integrations/sage_pay_form/notification.rb +0 -210
  418. data/lib/active_merchant/billing/integrations/sage_pay_form/return.rb +0 -31
  419. data/lib/active_merchant/billing/integrations/sage_pay_form.rb +0 -37
  420. data/lib/active_merchant/billing/integrations/two_checkout/helper.rb +0 -107
  421. data/lib/active_merchant/billing/integrations/two_checkout/notification.rb +0 -171
  422. data/lib/active_merchant/billing/integrations/two_checkout/return.rb +0 -58
  423. data/lib/active_merchant/billing/integrations/two_checkout.rb +0 -44
  424. data/lib/active_merchant/billing/integrations/valitor/helper.rb +0 -86
  425. data/lib/active_merchant/billing/integrations/valitor/notification.rb +0 -13
  426. data/lib/active_merchant/billing/integrations/valitor/response_fields.rb +0 -97
  427. data/lib/active_merchant/billing/integrations/valitor/return.rb +0 -13
  428. data/lib/active_merchant/billing/integrations/valitor.rb +0 -33
  429. data/lib/active_merchant/billing/integrations/verkkomaksut/helper.rb +0 -88
  430. data/lib/active_merchant/billing/integrations/verkkomaksut/notification.rb +0 -59
  431. data/lib/active_merchant/billing/integrations/verkkomaksut.rb +0 -20
  432. data/lib/active_merchant/billing/integrations/web_pay/common.rb +0 -50
  433. data/lib/active_merchant/billing/integrations/web_pay/helper.rb +0 -68
  434. data/lib/active_merchant/billing/integrations/web_pay/notification.rb +0 -51
  435. data/lib/active_merchant/billing/integrations/web_pay.rb +0 -45
  436. data/lib/active_merchant/billing/integrations/webmoney/common.rb +0 -17
  437. data/lib/active_merchant/billing/integrations/webmoney/helper.rb +0 -40
  438. data/lib/active_merchant/billing/integrations/webmoney/notification.rb +0 -47
  439. data/lib/active_merchant/billing/integrations/webmoney.rb +0 -43
  440. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/common.rb +0 -104
  441. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/helper.rb +0 -145
  442. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/notification.rb +0 -101
  443. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/return.rb +0 -35
  444. data/lib/active_merchant/billing/integrations/wirecard_checkout_page.rb +0 -39
  445. data/lib/active_merchant/billing/integrations/world_pay/helper.rb +0 -101
  446. data/lib/active_merchant/billing/integrations/world_pay/notification.rb +0 -160
  447. data/lib/active_merchant/billing/integrations/world_pay.rb +0 -34
  448. data/lib/active_merchant/billing/integrations.rb +0 -17
  449. data.tar.gz.sig +0 -0
  450. metadata.gz.sig +0 -1
@@ -2,32 +2,66 @@ module ActiveMerchant #:nodoc:
2
2
  module Billing #:nodoc:
3
3
  class FirstdataE4Gateway < Gateway
4
4
  # TransArmor support requires v11 or lower
5
- self.test_url = "https://api.demo.globalgatewaye4.firstdata.com/transaction/v11"
6
- self.live_url = "https://api.globalgatewaye4.firstdata.com/transaction/v11"
5
+ self.test_url = 'https://api.demo.globalgatewaye4.firstdata.com/transaction/v11'
6
+ self.live_url = 'https://api.globalgatewaye4.firstdata.com/transaction/v11'
7
7
 
8
8
  TRANSACTIONS = {
9
- :sale => "00",
10
- :authorization => "01",
11
- :capture => "32",
12
- :void => "33",
13
- :credit => "34",
14
- :store => "05"
9
+ sale: '00',
10
+ authorization: '01',
11
+ verify: '05',
12
+ capture: '32',
13
+ void: '33',
14
+ credit: '34',
15
+ store: '05'
15
16
  }
16
17
 
17
18
  POST_HEADERS = {
18
- "Accepts" => "application/xml",
19
- "Content-Type" => "application/xml"
19
+ 'Accepts' => 'application/xml',
20
+ 'Content-Type' => 'application/xml'
20
21
  }
21
22
 
22
- SUCCESS = "true"
23
+ SUCCESS = 'true'
23
24
 
24
25
  SENSITIVE_FIELDS = [:verification_str2, :expiry_date, :card_number]
25
26
 
26
- self.supported_cardtypes = [:visa, :master, :american_express, :jcb, :discover]
27
- self.supported_countries = ["CA", "US"]
28
- self.default_currency = "USD"
29
- self.homepage_url = "http://www.firstdata.com"
30
- self.display_name = "FirstData Global Gateway e4"
27
+ BRANDS = {
28
+ :visa => 'Visa',
29
+ :master => 'Mastercard',
30
+ :american_express => 'American Express',
31
+ :jcb => 'JCB',
32
+ :discover => 'Discover'
33
+ }
34
+
35
+ E4_BRANDS = BRANDS.merge({:mastercard => 'Mastercard'})
36
+
37
+ DEFAULT_ECI = '07'
38
+
39
+ self.supported_cardtypes = BRANDS.keys
40
+ self.supported_countries = ['CA', 'US']
41
+ self.default_currency = 'USD'
42
+ self.homepage_url = 'http://www.firstdata.com'
43
+ self.display_name = 'FirstData Global Gateway e4'
44
+
45
+ STANDARD_ERROR_CODE_MAPPING = {
46
+ # Bank error codes: https://firstdata.zendesk.com/entries/471297-First-Data-Global-Gateway-e4-Bank-Response-Codes
47
+ '201' => STANDARD_ERROR_CODE[:incorrect_number],
48
+ '531' => STANDARD_ERROR_CODE[:invalid_cvc],
49
+ '503' => STANDARD_ERROR_CODE[:invalid_cvc],
50
+ '811' => STANDARD_ERROR_CODE[:invalid_cvc],
51
+ '605' => STANDARD_ERROR_CODE[:invalid_expiry_date],
52
+ '522' => STANDARD_ERROR_CODE[:expired_card],
53
+ '303' => STANDARD_ERROR_CODE[:card_declined],
54
+ '530' => STANDARD_ERROR_CODE[:card_declined],
55
+ '401' => STANDARD_ERROR_CODE[:call_issuer],
56
+ '402' => STANDARD_ERROR_CODE[:call_issuer],
57
+ '501' => STANDARD_ERROR_CODE[:pickup_card],
58
+ # Ecommerce error codes -- https://firstdata.zendesk.com/entries/451980-ecommerce-response-codes-etg-codes
59
+ '22' => STANDARD_ERROR_CODE[:invalid_number],
60
+ '25' => STANDARD_ERROR_CODE[:invalid_expiry_date],
61
+ '31' => STANDARD_ERROR_CODE[:incorrect_cvc],
62
+ '44' => STANDARD_ERROR_CODE[:incorrect_zip],
63
+ '42' => STANDARD_ERROR_CODE[:processing_error]
64
+ }
31
65
 
32
66
  # Create a new FirstdataE4Gateway
33
67
  #
@@ -66,6 +100,10 @@ module ActiveMerchant #:nodoc:
66
100
  commit(:credit, build_capture_or_credit_request(money, authorization, options))
67
101
  end
68
102
 
103
+ def verify(credit_card, options = {})
104
+ commit(:verify, build_sale_or_authorization_request(0, credit_card, options))
105
+ end
106
+
69
107
  # Tokenize a credit card with TransArmor
70
108
  #
71
109
  # The TransArmor token and other card data necessary for subsequent
@@ -93,13 +131,35 @@ module ActiveMerchant #:nodoc:
93
131
  commit(:store, build_store_request(credit_card, options), credit_card)
94
132
  end
95
133
 
134
+ def verify_credentials
135
+ response = void('0')
136
+ response.message != 'Unauthorized Request. Bad or missing credentials.'
137
+ end
138
+
139
+ def supports_scrubbing?
140
+ true
141
+ end
142
+
143
+ def scrub(transcript)
144
+ transcript.
145
+ gsub(%r((<Card_Number>).+(</Card_Number>)), '\1[FILTERED]\2').
146
+ gsub(%r((<VerificationStr2>).+(</VerificationStr2>)), '\1[FILTERED]\2').
147
+ gsub(%r((<Password>).+(</Password>))i, '\1[FILTERED]\2').
148
+ gsub(%r((<CAVV>).+(</CAVV>)), '\1[FILTERED]\2').
149
+ gsub(%r((Card Number : ).*\d)i, '\1[FILTERED]')
150
+ end
151
+
152
+ def supports_network_tokenization?
153
+ true
154
+ end
155
+
96
156
  private
97
157
 
98
158
  def build_request(action, body)
99
159
  xml = Builder::XmlMarkup.new
100
160
 
101
161
  xml.instruct!
102
- xml.tag! "Transaction" do
162
+ xml.tag! 'Transaction', xmlns: 'http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/encodedTypes' do
103
163
  add_credentials(xml)
104
164
  add_transaction_type(xml, action)
105
165
  xml << body
@@ -111,16 +171,18 @@ module ActiveMerchant #:nodoc:
111
171
  def build_sale_or_authorization_request(money, credit_card_or_store_authorization, options)
112
172
  xml = Builder::XmlMarkup.new
113
173
 
114
- add_amount(xml, money)
174
+ add_amount(xml, money, options)
115
175
 
116
176
  if credit_card_or_store_authorization.is_a? String
117
- add_credit_card_token(xml, credit_card_or_store_authorization)
177
+ add_credit_card_token(xml, credit_card_or_store_authorization, options)
118
178
  else
119
179
  add_credit_card(xml, credit_card_or_store_authorization, options)
120
180
  end
121
181
 
122
182
  add_customer_data(xml, options)
123
183
  add_invoice(xml, options)
184
+ add_tax_fields(xml, options)
185
+ add_level_3(xml, options)
124
186
 
125
187
  xml.target!
126
188
  end
@@ -129,8 +191,9 @@ module ActiveMerchant #:nodoc:
129
191
  xml = Builder::XmlMarkup.new
130
192
 
131
193
  add_identification(xml, identification)
132
- add_amount(xml, money)
194
+ add_amount(xml, money, options)
133
195
  add_customer_data(xml, options)
196
+ add_card_authentication_data(xml, options)
134
197
 
135
198
  xml.target!
136
199
  end
@@ -145,32 +208,53 @@ module ActiveMerchant #:nodoc:
145
208
  end
146
209
 
147
210
  def add_credentials(xml)
148
- xml.tag! "ExactID", @options[:login]
149
- xml.tag! "Password", @options[:password]
211
+ xml.tag! 'ExactID', @options[:login]
212
+ xml.tag! 'Password', @options[:password]
150
213
  end
151
214
 
152
215
  def add_transaction_type(xml, action)
153
- xml.tag! "Transaction_Type", TRANSACTIONS[action]
216
+ xml.tag! 'Transaction_Type', TRANSACTIONS[action]
154
217
  end
155
218
 
156
219
  def add_identification(xml, identification)
157
- authorization_num, transaction_tag, _ = identification.split(";")
220
+ authorization_num, transaction_tag, _ = identification.split(';')
158
221
 
159
- xml.tag! "Authorization_Num", authorization_num
160
- xml.tag! "Transaction_Tag", transaction_tag
222
+ xml.tag! 'Authorization_Num', authorization_num
223
+ xml.tag! 'Transaction_Tag', transaction_tag
161
224
  end
162
225
 
163
- def add_amount(xml, money)
164
- xml.tag! "DollarAmount", amount(money)
226
+ def add_amount(xml, money, options)
227
+ currency_code = options[:currency] || default_currency
228
+ xml.tag! 'DollarAmount', localized_amount(money, currency_code)
229
+ xml.tag! 'Currency', currency_code
165
230
  end
166
231
 
167
232
  def add_credit_card(xml, credit_card, options)
168
- xml.tag! "Card_Number", credit_card.number
169
- xml.tag! "Expiry_Date", expdate(credit_card)
170
- xml.tag! "CardHoldersName", credit_card.name
171
- xml.tag! "CardType", credit_card.brand
233
+ if credit_card.respond_to?(:track_data) && credit_card.track_data.present?
234
+ xml.tag! 'Track1', credit_card.track_data
235
+ xml.tag! 'Ecommerce_Flag', 'R'
236
+ else
237
+ xml.tag! 'Card_Number', credit_card.number
238
+ xml.tag! 'Expiry_Date', expdate(credit_card)
239
+ xml.tag! 'CardHoldersName', credit_card.name
240
+ xml.tag! 'CardType', card_type(credit_card.brand)
241
+
242
+ add_credit_card_eci(xml, credit_card, options)
243
+ add_credit_card_verification_strings(xml, credit_card, options)
244
+ end
245
+ end
246
+
247
+ def add_credit_card_eci(xml, credit_card, options)
248
+ eci = if credit_card.is_a?(NetworkTokenizationCreditCard) && credit_card.source == :apple_pay && card_brand(credit_card) == 'discover'
249
+ # Discover requires any Apple Pay transaction, regardless of in-app
250
+ # or web, and regardless of the ECI contained in the PKPaymentToken,
251
+ # to have an ECI value explicitly of 04.
252
+ '04'
253
+ else
254
+ (credit_card.respond_to?(:eci) ? credit_card.eci : nil) || options[:eci] || DEFAULT_ECI
255
+ end
172
256
 
173
- add_credit_card_verification_strings(xml, credit_card, options)
257
+ xml.tag! 'Ecommerce_Flag', eci.to_s =~ /^[0-9]+$/ ? eci.to_s.rjust(2, '0') : eci
174
258
  end
175
259
 
176
260
  def add_credit_card_verification_strings(xml, credit_card, options)
@@ -178,17 +262,40 @@ module ActiveMerchant #:nodoc:
178
262
  if address
179
263
  address_values = []
180
264
  [:address1, :zip, :city, :state, :country].each { |part| address_values << address[part].to_s }
181
- xml.tag! "VerificationStr1", address_values.join("|")
265
+ xml.tag! 'VerificationStr1', address_values.join('|')
182
266
  end
183
267
 
184
- if credit_card.verification_value?
185
- xml.tag! "CVD_Presence_Ind", "1"
186
- xml.tag! "VerificationStr2", credit_card.verification_value
268
+ if credit_card.is_a?(NetworkTokenizationCreditCard)
269
+ add_network_tokenization_credit_card(xml, credit_card)
270
+ else
271
+ if credit_card.verification_value?
272
+ xml.tag! 'CVD_Presence_Ind', '1'
273
+ xml.tag! 'VerificationStr2', credit_card.verification_value
274
+ end
275
+
276
+ add_card_authentication_data(xml, options)
187
277
  end
188
278
  end
189
279
 
190
- def add_credit_card_token(xml, store_authorization)
191
- params = store_authorization.split(";")
280
+ def add_network_tokenization_credit_card(xml, credit_card)
281
+ case card_brand(credit_card).to_sym
282
+ when :american_express
283
+ cryptogram = Base64.decode64(credit_card.payment_cryptogram)
284
+ xml.tag!('XID', Base64.encode64(cryptogram[20...40]))
285
+ xml.tag!('CAVV', Base64.encode64(cryptogram[0...20]))
286
+ else
287
+ xml.tag!('XID', credit_card.transaction_id) if credit_card.transaction_id
288
+ xml.tag!('CAVV', credit_card.payment_cryptogram)
289
+ end
290
+ end
291
+
292
+ def add_card_authentication_data(xml, options)
293
+ xml.tag! 'CAVV', options[:cavv]
294
+ xml.tag! 'XID', options[:xid]
295
+ end
296
+
297
+ def add_credit_card_token(xml, store_authorization, options)
298
+ params = store_authorization.split(';')
192
299
  credit_card = CreditCard.new(
193
300
  :brand => params[1],
194
301
  :first_name => params[2],
@@ -196,33 +303,47 @@ module ActiveMerchant #:nodoc:
196
303
  :month => params[4],
197
304
  :year => params[5])
198
305
 
199
- xml.tag! "TransarmorToken", params[0]
200
- xml.tag! "Expiry_Date", expdate(credit_card)
201
- xml.tag! "CardHoldersName", credit_card.name
202
- xml.tag! "CardType", credit_card.brand
306
+ xml.tag! 'TransarmorToken', params[0]
307
+ xml.tag! 'Expiry_Date', expdate(credit_card)
308
+ xml.tag! 'CardHoldersName', credit_card.name
309
+ xml.tag! 'CardType', card_type(credit_card.brand)
310
+ add_card_authentication_data(xml, options)
203
311
  end
204
312
 
205
313
  def add_customer_data(xml, options)
206
- xml.tag! "Customer_Ref", options[:customer] if options[:customer]
207
- xml.tag! "Client_IP", options[:ip] if options[:ip]
208
- xml.tag! "Client_Email", options[:email] if options[:email]
314
+ xml.tag! 'Customer_Ref', options[:customer] if options[:customer]
315
+ xml.tag! 'Client_IP', options[:ip] if options[:ip]
316
+ xml.tag! 'Client_Email', options[:email] if options[:email]
209
317
  end
210
318
 
211
319
  def add_address(xml, options)
212
320
  if address = (options[:billing_address] || options[:address])
213
- xml.tag! "ZipCode", address[:zip]
321
+ xml.tag! 'ZipCode', address[:zip]
214
322
  end
215
323
  end
216
324
 
217
325
  def add_invoice(xml, options)
218
- xml.tag! "Reference_No", options[:order_id]
219
- xml.tag! "Reference_3", options[:description] if options[:description]
326
+ xml.tag! 'Reference_No', options[:order_id]
327
+ xml.tag! 'Reference_3', options[:description] if options[:description]
328
+ end
329
+
330
+ def add_tax_fields(xml, options)
331
+ xml.tag! 'Tax1Amount', options[:tax1_amount] if options[:tax1_amount]
332
+ xml.tag! 'Tax1Number', options[:tax1_number] if options[:tax1_number]
333
+ end
334
+
335
+ def add_level_3(xml, options)
336
+ xml.tag!('Level3') { |x| x << options[:level_3] } if options[:level_3]
220
337
  end
221
338
 
222
339
  def expdate(credit_card)
223
340
  "#{format(credit_card.month, :two_digits)}#{format(credit_card.year, :two_digits)}"
224
341
  end
225
342
 
343
+ def card_type(credit_card_brand)
344
+ E4_BRANDS[credit_card_brand.to_sym] if credit_card_brand
345
+ end
346
+
226
347
  def commit(action, request, credit_card = nil)
227
348
  url = (test? ? self.test_url : self.live_url)
228
349
  begin
@@ -233,9 +354,10 @@ module ActiveMerchant #:nodoc:
233
354
 
234
355
  Response.new(successful?(response), message_from(response), response,
235
356
  :test => test?,
236
- :authorization => response_authorization(action, response, credit_card),
357
+ :authorization => successful?(response) ? response_authorization(action, response, credit_card) : '',
237
358
  :avs_result => {:code => response[:avs]},
238
- :cvv_result => response[:cvv2]
359
+ :cvv_result => response[:cvv2],
360
+ :error_code => standard_error_code(response)
239
361
  )
240
362
  end
241
363
 
@@ -256,10 +378,10 @@ module ActiveMerchant #:nodoc:
256
378
  [
257
379
  response[:authorization_num],
258
380
  response[:transaction_tag],
259
- (response[:dollar_amount].to_f * 100).to_i
260
- ].join(";")
381
+ (response[:dollar_amount].to_f * 100).round
382
+ ].join(';')
261
383
  else
262
- ""
384
+ ''
263
385
  end
264
386
  end
265
387
 
@@ -272,7 +394,7 @@ module ActiveMerchant #:nodoc:
272
394
  credit_card.last_name,
273
395
  credit_card.month,
274
396
  credit_card.year
275
- ].map { |value| value.to_s.gsub(/;/, "") }.join(";")
397
+ ].map { |value| value.to_s.gsub(/;/, '') }.join(';')
276
398
  else
277
399
  raise StandardError, "TransArmor support is not enabled on your #{display_name} account"
278
400
  end
@@ -280,16 +402,16 @@ module ActiveMerchant #:nodoc:
280
402
 
281
403
  def money_from_authorization(auth)
282
404
  _, _, amount = auth.split(/;/, 3)
283
- amount.to_i # return the # of cents, no need to divide
405
+ amount.to_i
284
406
  end
285
407
 
286
408
  def message_from(response)
287
409
  if(response[:faultcode] && response[:faultstring])
288
410
  response[:faultstring]
289
- elsif(response[:error_number] && response[:error_number] != "0")
411
+ elsif(response[:error_number] && response[:error_number] != '0')
290
412
  response[:error_description]
291
413
  else
292
- result = (response[:exact_message] || "")
414
+ result = (response[:exact_message] || '')
293
415
  result << " - #{response[:bank_message]}" if response[:bank_message].present?
294
416
  result
295
417
  end
@@ -297,29 +419,33 @@ module ActiveMerchant #:nodoc:
297
419
 
298
420
  def parse_error(error)
299
421
  {
300
- :transaction_approved => "false",
422
+ :transaction_approved => 'false',
301
423
  :error_number => error.code,
302
- :error_description => error.body
424
+ :error_description => error.body,
425
+ :ecommerce_error_code => error.body.gsub(/[^\d]/, '')
303
426
  }
304
427
  end
305
428
 
429
+ def standard_error_code(response)
430
+ STANDARD_ERROR_CODE_MAPPING[response[:bank_resp_code] || response[:ecommerce_error_code]]
431
+ end
432
+
306
433
  def parse(xml)
307
434
  response = {}
308
435
  xml = REXML::Document.new(xml)
309
436
 
310
- if root = REXML::XPath.first(xml, "//TransactionResult")
437
+ if root = REXML::XPath.first(xml, '//TransactionResult')
311
438
  parse_elements(response, root)
312
439
  end
313
440
 
314
- response.delete_if{ |k,v| SENSITIVE_FIELDS.include?(k) }
441
+ response.delete_if { |k, v| SENSITIVE_FIELDS.include?(k) }
315
442
  end
316
443
 
317
444
  def parse_elements(response, root)
318
445
  root.elements.to_a.each do |node|
319
- response[node.name.gsub(/EXact/, "Exact").underscore.to_sym] = (node.text || "").strip
446
+ response[node.name.gsub(/EXact/, 'Exact').underscore.to_sym] = (node.text || '').strip
320
447
  end
321
448
  end
322
449
  end
323
450
  end
324
451
  end
325
-