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
@@ -0,0 +1,292 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ class MundipaggGateway < Gateway
4
+ self.live_url = 'https://api.mundipagg.com/core/v1'
5
+
6
+ self.supported_countries = ['US']
7
+ self.default_currency = 'USD'
8
+ self.supported_cardtypes = [:visa, :master, :american_express, :discover]
9
+
10
+ self.homepage_url = 'https://www.mundipagg.com/'
11
+ self.display_name = 'Mundipagg'
12
+
13
+ STANDARD_ERROR_CODE_MAPPING = {
14
+ '400' => STANDARD_ERROR_CODE[:processing_error],
15
+ '401' => STANDARD_ERROR_CODE[:config_error],
16
+ '404' => STANDARD_ERROR_CODE[:processing_error],
17
+ '412' => STANDARD_ERROR_CODE[:processing_error],
18
+ '422' => STANDARD_ERROR_CODE[:processing_error],
19
+ '500' => STANDARD_ERROR_CODE[:processing_error]
20
+ }
21
+
22
+ STANDARD_ERROR_MESSAGE_MAPPING = {
23
+ '400' => 'Invalid request;',
24
+ '401' => 'Invalid API key;',
25
+ '404' => 'The requested resource does not exist;',
26
+ '412' => 'Valid parameters but request failed;',
27
+ '422' => 'Invalid parameters;',
28
+ '500' => 'An internal error occurred;'
29
+ }
30
+
31
+ def initialize(options={})
32
+ requires!(options, :api_key)
33
+ super
34
+ end
35
+
36
+ def purchase(money, payment, options={})
37
+ post = {}
38
+ add_invoice(post, money, options)
39
+ add_customer_data(post, options) unless payment.is_a?(String)
40
+ add_shipping_address(post, options)
41
+ add_payment(post, payment, options)
42
+
43
+ commit('sale', post)
44
+ end
45
+
46
+ def authorize(money, payment, options={})
47
+ post = {}
48
+ add_invoice(post, money, options)
49
+ add_customer_data(post, options) unless payment.is_a?(String)
50
+ add_shipping_address(post, options)
51
+ add_payment(post, payment, options)
52
+ add_capture_flag(post, payment)
53
+ commit('authonly', post)
54
+ end
55
+
56
+ def capture(money, authorization, options={})
57
+ post = {}
58
+ post[:code] = authorization
59
+ add_invoice(post, money, options)
60
+ commit('capture', post, authorization)
61
+ end
62
+
63
+ def refund(money, authorization, options={})
64
+ add_invoice(post={}, money, options)
65
+ commit('refund', post, authorization)
66
+ end
67
+
68
+ def void(authorization, options={})
69
+ commit('void', nil, authorization)
70
+ end
71
+
72
+ def store(payment, options={})
73
+ post = {}
74
+ options.update(name: payment.name)
75
+ options = add_customer(options) unless options[:customer_id]
76
+ add_payment(post, payment, options)
77
+ commit('store', post, options[:customer_id])
78
+ end
79
+
80
+ def verify(credit_card, options={})
81
+ MultiResponse.run(:use_first_response) do |r|
82
+ r.process { authorize(100, credit_card, options) }
83
+ r.process(:ignore_result) { void(r.authorization, options) }
84
+ end
85
+ end
86
+
87
+ def supports_scrubbing?
88
+ true
89
+ end
90
+
91
+ def scrub(transcript)
92
+ transcript.
93
+ gsub(%r((Authorization: Basic )\w+), '\1[FILTERED]').
94
+ gsub(%r(("cvv\\":\\")\d*), '\1[FILTERED]').
95
+ gsub(%r((card\\":{\\"number\\":\\")\d*), '\1[FILTERED]')
96
+ end
97
+
98
+ private
99
+
100
+ def add_customer(options)
101
+ post = {}
102
+ post[:name] = options[:name]
103
+ customer = commit('customer', post)
104
+ options.update(customer_id: customer.authorization)
105
+ end
106
+
107
+ def add_customer_data(post, options)
108
+ post[:customer] = {}
109
+ post[:customer][:email] = options[:email]
110
+ end
111
+
112
+ def add_billing_address(post, type, options)
113
+ if address = (options[:billing_address] || options[:address])
114
+ billing = {}
115
+ address = options[:billing_address] || options[:address]
116
+ billing[:street] = address[:address1].match(/\D+/)[0].strip if address[:address1]
117
+ billing[:number] = address[:address1].match(/\d+/)[0] if address[:address1]
118
+ billing[:compliment] = address[:address2] if address[:address2]
119
+ billing[:city] = address[:city] if address[:city]
120
+ billing[:state] = address[:state] if address[:state]
121
+ billing[:country] = address[:country] if address[:country]
122
+ billing[:zip_code] = address[:zip] if address[:zip]
123
+ billing[:neighborhood] = address[:neighborhood]
124
+ post[:payment][type.to_sym][:card][:billing_address] = billing
125
+ end
126
+ end
127
+
128
+ def add_shipping_address(post, options)
129
+ if address = options[:shipping_address]
130
+ post[:address] = {}
131
+ post[:address][:street] = address[:address1].match(/\D+/)[0].strip if address[:address1]
132
+ post[:address][:number] = address[:address1].match(/\d+/)[0] if address[:address1]
133
+ post[:address][:compliment] = address[:address2] if address[:address2]
134
+ post[:address][:city] = address[:city] if address[:city]
135
+ post[:address][:state] = address[:state] if address[:state]
136
+ post[:address][:country] = address[:country] if address[:country]
137
+ post[:address][:zip_code] = address[:zip] if address[:zip]
138
+ end
139
+ end
140
+
141
+ def add_invoice(post, money, options)
142
+ post[:amount] = money
143
+ post[:currency] = (options[:currency] || currency(money))
144
+ end
145
+
146
+ def add_capture_flag(post, payment)
147
+ if voucher?(payment)
148
+ post[:payment][:voucher][:capture] = false
149
+ else
150
+ post[:payment][:credit_card][:capture] = false
151
+ end
152
+ end
153
+
154
+ def add_payment(post, payment, options)
155
+ post[:customer][:name] = payment.name if post[:customer]
156
+ post[:customer_id] = parse_auth(payment)[0] if payment.is_a?(String)
157
+ post[:payment] = {}
158
+ post[:payment][:gateway_affiliation_id] = @options[:gateway_id] if @options[:gateway_id]
159
+ post[:payment][:metadata] = { mundipagg_payment_method_code: '1' } if test?
160
+ if voucher?(payment)
161
+ add_voucher(post, payment, options)
162
+ else
163
+ add_credit_card(post, payment, options)
164
+ end
165
+ end
166
+
167
+ def add_credit_card(post, payment, options)
168
+ post[:payment][:payment_method] = 'credit_card'
169
+ post[:payment][:credit_card] = {}
170
+ if payment.is_a?(String)
171
+ post[:payment][:credit_card][:card_id] = parse_auth(payment)[1]
172
+ else
173
+ post[:payment][:credit_card][:card] = {}
174
+ post[:payment][:credit_card][:card][:number] = payment.number
175
+ post[:payment][:credit_card][:card][:holder_name] = payment.name
176
+ post[:payment][:credit_card][:card][:exp_month] = payment.month
177
+ post[:payment][:credit_card][:card][:exp_year] = payment.year
178
+ post[:payment][:credit_card][:card][:cvv] = payment.verification_value
179
+ post[:payment][:credit_card][:card][:holder_document] = options[:holder_document] if options[:holder_document]
180
+ add_billing_address(post, 'credit_card', options)
181
+ end
182
+ end
183
+
184
+ def add_voucher(post, payment, options)
185
+ post[:currency] = 'BRL'
186
+ post[:payment][:payment_method] = 'voucher'
187
+ post[:payment][:voucher] = {}
188
+ post[:payment][:voucher][:card] = {}
189
+ post[:payment][:voucher][:card][:number] = payment.number
190
+ post[:payment][:voucher][:card][:holder_name] = payment.name
191
+ post[:payment][:voucher][:card][:holder_document] = options[:holder_document]
192
+ post[:payment][:voucher][:card][:exp_month] = payment.month
193
+ post[:payment][:voucher][:card][:exp_year] = payment.year
194
+ post[:payment][:voucher][:card][:cvv] = payment.verification_value
195
+ add_billing_address(post, 'voucher', options)
196
+ end
197
+
198
+ def voucher?(payment)
199
+ return false if payment.is_a?(String)
200
+ %w[sodexo vr].include? card_brand(payment)
201
+ end
202
+
203
+ def headers
204
+ {
205
+ 'Authorization' => 'Basic ' + Base64.strict_encode64("#{@options[:api_key]}:"),
206
+ 'Content-Type' => 'application/json',
207
+ 'Accept' => 'application/json'
208
+ }
209
+ end
210
+
211
+ def parse(body)
212
+ JSON.parse(body)
213
+ end
214
+
215
+ def url_for(action, auth = nil)
216
+ url = live_url
217
+ case action
218
+ when 'store'
219
+ "#{url}/customers/#{auth}/cards/"
220
+ when 'customer'
221
+ "#{url}/customers/"
222
+ when 'refund', 'void'
223
+ "#{url}/charges/#{auth}/"
224
+ when 'capture'
225
+ "#{url}/charges/#{auth}/capture/"
226
+ else
227
+ "#{url}/charges/"
228
+ end
229
+ end
230
+
231
+ def commit(action, parameters, auth = nil)
232
+ url = url_for(action, auth)
233
+ parameters.merge!(parameters[:payment][:credit_card].delete(:card)).delete(:payment) if action == 'store'
234
+ response = if %w[refund void].include? action
235
+ parse(ssl_request(:delete, url, post_data(parameters), headers))
236
+ else
237
+ parse(ssl_post(url, post_data(parameters), headers))
238
+ end
239
+
240
+ Response.new(
241
+ success_from(response),
242
+ message_from(response),
243
+ response,
244
+ authorization: authorization_from(response, action),
245
+ avs_result: AVSResult.new(code: response['some_avs_response_key']),
246
+ cvv_result: CVVResult.new(response['some_cvv_response_key']),
247
+ test: test?,
248
+ error_code: error_code_from(response)
249
+ )
250
+ rescue ResponseError => e
251
+ message = get_error_message(e)
252
+ return Response.new(
253
+ false,
254
+ "#{STANDARD_ERROR_MESSAGE_MAPPING[e.response.code]} #{message}",
255
+ parse(e.response.body),
256
+ test: test?,
257
+ error_code: STANDARD_ERROR_CODE_MAPPING[e.response.code]
258
+ )
259
+ end
260
+
261
+ def success_from(response)
262
+ %w[pending paid processing canceled active].include? response['status']
263
+ end
264
+
265
+ def get_error_message(error)
266
+ JSON.parse(error.response.body)['message']
267
+ end
268
+
269
+ def message_from(response)
270
+ return response['message'] if response['message']
271
+ return response['last_transaction']['acquirer_message'] if response['last_transaction']
272
+ end
273
+
274
+ def authorization_from(response, action)
275
+ return "#{response['customer']['id']}|#{response['id']}" if action == 'store'
276
+ response['id']
277
+ end
278
+
279
+ def parse_auth(auth)
280
+ auth.split('|')
281
+ end
282
+
283
+ def post_data(parameters = {})
284
+ parameters.to_json
285
+ end
286
+
287
+ def error_code_from(response)
288
+ STANDARD_ERROR_CODE[:processing_error] unless success_from(response)
289
+ end
290
+ end
291
+ end
292
+ end
@@ -6,50 +6,41 @@ module ActiveMerchant #:nodoc:
6
6
  # be a rebadged Securepay Australia service, though some differences exist.
7
7
  class NabTransactGateway < Gateway
8
8
  API_VERSION = 'xml-4.2'
9
- PERIODIC_API_VERSION = "spxml-4.2"
9
+ PERIODIC_API_VERSION = 'spxml-4.2'
10
10
 
11
11
  class_attribute :test_periodic_url, :live_periodic_url
12
12
 
13
- self.test_url = 'https://transact.nab.com.au/test/xmlapi/payment'
13
+ self.test_url = 'https://demo.transact.nab.com.au/xmlapi/payment'
14
14
  self.live_url = 'https://transact.nab.com.au/live/xmlapi/payment'
15
15
  self.test_periodic_url = 'https://transact.nab.com.au/xmlapidemo/periodic'
16
16
  self.live_periodic_url = 'https://transact.nab.com.au/xmlapi/periodic'
17
17
 
18
18
  self.supported_countries = ['AU']
19
-
20
- # The card types supported by the payment gateway
21
- # Note that support for Diners, Amex, and JCB require extra
22
- # steps in setting up your account, as detailed in the NAB Transact API
23
19
  self.supported_cardtypes = [:visa, :master, :american_express, :diners_club, :jcb]
24
20
 
25
21
  self.homepage_url = 'http://transact.nab.com.au'
26
22
  self.display_name = 'NAB Transact'
27
-
28
- cattr_accessor :request_timeout
29
- self.request_timeout = 60
30
-
31
23
  self.money_format = :cents
32
24
  self.default_currency = 'AUD'
33
25
 
34
- #Transactions currently accepted by NAB Transact XML API
26
+ # Transactions currently accepted by NAB Transact XML API
35
27
  TRANSACTIONS = {
36
- :purchase => 0, #Standard Payment
37
- :refund => 4, #Refund
38
- :void => 6, #Client Reversal (Void)
39
- :authorization => 10, #Preauthorise
40
- :capture => 11 #Preauthorise Complete (Advice)
28
+ :purchase => 0, # Standard Payment
29
+ :refund => 4, # Refund
30
+ :void => 6, # Client Reversal (Void)
31
+ :unmatched_refund => 666, # Unmatched Refund
32
+ :authorization => 10, # Preauthorise
33
+ :capture => 11 # Preauthorise Complete (Advice)
41
34
  }
42
35
 
43
36
  PERIODIC_TYPES = {
44
37
  :addcrn => 5,
45
- :editcrn => 5,
46
38
  :deletecrn => 5,
47
39
  :trigger => 8
48
40
  }
49
41
 
50
42
  SUCCESS_CODES = [ '00', '08', '11', '16', '77' ]
51
43
 
52
-
53
44
  def initialize(options = {})
54
45
  requires!(options, :login, :password)
55
46
  super
@@ -57,15 +48,16 @@ module ActiveMerchant #:nodoc:
57
48
 
58
49
  def purchase(money, credit_card_or_stored_id, options = {})
59
50
  if credit_card_or_stored_id.respond_to?(:number)
60
- #Credit card for instant payment
61
51
  commit :purchase, build_purchase_request(money, credit_card_or_stored_id, options)
62
52
  else
63
- #Triggered payment for an existing stored credit card
64
- options[:billing_id] = credit_card_or_stored_id.to_s
65
- commit_periodic build_periodic_item(:trigger, money, nil, options)
53
+ commit_periodic(:trigger, build_purchase_using_stored_card_request(money, credit_card_or_stored_id, options))
66
54
  end
67
55
  end
68
56
 
57
+ def credit(money, credit_card, options = {})
58
+ commit :unmatched_refund, build_purchase_request(money, credit_card, options)
59
+ end
60
+
69
61
  def refund(money, authorization, options = {})
70
62
  commit :refund, build_reference_request(money, authorization, options)
71
63
  end
@@ -78,14 +70,24 @@ module ActiveMerchant #:nodoc:
78
70
  commit :capture, build_reference_request(money, authorization, options)
79
71
  end
80
72
 
81
- def store(creditcard, options = {})
82
- requires!(options, :billing_id, :amount)
83
- commit_periodic(build_periodic_item(:addcrn, options[:amount], creditcard, options))
73
+ def store(credit_card, options = {})
74
+ commit_periodic(:addcrn, build_store_request(credit_card, options))
84
75
  end
85
76
 
86
77
  def unstore(identification, options = {})
87
- options[:billing_id] = identification
88
- commit_periodic(build_periodic_item(:deletecrn, options[:amount], nil, options))
78
+ commit_periodic(:deletecrn, build_unstore_request(identification, options))
79
+ end
80
+
81
+ def supports_scrubbing?
82
+ true
83
+ end
84
+
85
+ def scrub(transcript)
86
+ return '' if transcript.blank?
87
+ transcript.
88
+ gsub(%r((<cardNumber>)[^<]+(<))i, '\1[FILTERED]\2').
89
+ gsub(%r((<cvv>)[^<]+(<))i, '\1[FILTERED]\2').
90
+ gsub(%r((<password>)[^<]+(<))i, '\1[FILTERED]\2')
89
91
  end
90
92
 
91
93
  private
@@ -101,7 +103,7 @@ module ActiveMerchant #:nodoc:
101
103
 
102
104
  def build_purchase_request(money, credit_card, options)
103
105
  xml = Builder::XmlMarkup.new
104
- xml.tag! 'amount', amount(money)
106
+ xml.tag! 'amount', localized_amount(money, options[:currency] || currency(money))
105
107
  xml.tag! 'currency', options[:currency] || currency(money)
106
108
  xml.tag! 'purchaseOrderNo', options[:order_id].to_s.gsub(/[ ']/, '')
107
109
 
@@ -121,7 +123,7 @@ module ActiveMerchant #:nodoc:
121
123
 
122
124
  transaction_id, order_id, preauth_id, original_amount = reference.split('*')
123
125
 
124
- xml.tag! 'amount', (money ? amount(money) : original_amount)
126
+ xml.tag! 'amount', (money ? localized_amount(money, options[:currency] || currency(money)) : original_amount)
125
127
  xml.tag! 'currency', options[:currency] || currency(money)
126
128
  xml.tag! 'txnID', transaction_id
127
129
  xml.tag! 'purchaseOrderNo', order_id
@@ -132,7 +134,7 @@ module ActiveMerchant #:nodoc:
132
134
  xml.target!
133
135
  end
134
136
 
135
- #Generate payment request XML
137
+ # Generate payment request XML
136
138
  # - API is set to allow multiple Txn's but currently only allows one
137
139
  # - txnSource = 23 - (XML)
138
140
  def build_request(action, body)
@@ -140,7 +142,7 @@ module ActiveMerchant #:nodoc:
140
142
  xml.instruct!
141
143
  xml.tag! 'NABTransactMessage' do
142
144
  xml.tag! 'MessageInfo' do
143
- xml.tag! 'messageID', Utils.generate_unique_id.slice(0, 30)
145
+ xml.tag! 'messageID', SecureRandom.hex(15)
144
146
  xml.tag! 'messageTimestamp', generate_timestamp
145
147
  xml.tag! 'timeoutValue', request_timeout
146
148
  xml.tag! 'apiVersion', API_VERSION
@@ -153,8 +155,8 @@ module ActiveMerchant #:nodoc:
153
155
 
154
156
  xml.tag! 'RequestType', 'Payment'
155
157
  xml.tag! 'Payment' do
156
- xml.tag! 'TxnList', "count" => 1 do
157
- xml.tag! 'Txn', "ID" => 1 do
158
+ xml.tag! 'TxnList', 'count' => 1 do
159
+ xml.tag! 'Txn', 'ID' => 1 do
158
160
  xml.tag! 'txnType', TRANSACTIONS[action]
159
161
  xml.tag! 'txnSource', 23
160
162
  xml << body
@@ -166,32 +168,12 @@ module ActiveMerchant #:nodoc:
166
168
  xml.target!
167
169
  end
168
170
 
169
- def build_periodic_item(action, money, credit_card, options)
170
- xml = Builder::XmlMarkup.new
171
-
172
- xml.tag! 'actionType', action.to_s
173
- xml.tag! 'periodicType', PERIODIC_TYPES[action] if PERIODIC_TYPES[action]
174
- xml.tag! 'currency', options[:currency] || currency(money)
175
- xml.tag! 'crn', options[:billing_id]
176
-
177
- if credit_card
178
- xml.tag! 'CreditCardInfo' do
179
- xml.tag! 'cardNumber', credit_card.number
180
- xml.tag! 'expiryDate', expdate(credit_card)
181
- xml.tag! 'cvv', credit_card.verification_value if credit_card.verification_value?
182
- end
183
- end
184
- xml.tag! 'amount', amount(money)
185
-
186
- xml.target!
187
- end
188
-
189
- def build_periodic_request(body)
171
+ def build_periodic_request(action, body)
190
172
  xml = Builder::XmlMarkup.new
191
173
  xml.instruct!
192
174
  xml.tag! 'NABTransactMessage' do
193
175
  xml.tag! 'MessageInfo' do
194
- xml.tag! 'messageID', ActiveMerchant::Utils.generate_unique_id.slice(0, 30)
176
+ xml.tag! 'messageID', SecureRandom.hex(15)
195
177
  xml.tag! 'messageTimestamp', generate_timestamp
196
178
  xml.tag! 'timeoutValue', request_timeout
197
179
  xml.tag! 'apiVersion', PERIODIC_API_VERSION
@@ -204,8 +186,10 @@ module ActiveMerchant #:nodoc:
204
186
 
205
187
  xml.tag! 'RequestType', 'Periodic'
206
188
  xml.tag! 'Periodic' do
207
- xml.tag! 'PeriodicList', "count" => 1 do
208
- xml.tag! 'PeriodicItem', "ID" => 1 do
189
+ xml.tag! 'PeriodicList', 'count' => 1 do
190
+ xml.tag! 'PeriodicItem', 'ID' => 1 do
191
+ xml.tag! 'actionType', action.to_s
192
+ xml.tag! 'periodicType', PERIODIC_TYPES[action] if PERIODIC_TYPES[action]
209
193
  xml << body
210
194
  end
211
195
  end
@@ -215,20 +199,50 @@ module ActiveMerchant #:nodoc:
215
199
  xml.target!
216
200
  end
217
201
 
202
+ def build_purchase_using_stored_card_request(money, identification, options)
203
+ xml = Builder::XmlMarkup.new
204
+
205
+ xml.tag! 'crn', identification
206
+ xml.tag! 'currency', options[:currency] || currency(money)
207
+ xml.tag! 'amount', localized_amount(money, options[:currency] || currency(money))
208
+
209
+ xml.target!
210
+ end
211
+
212
+ def build_store_request(credit_card, options)
213
+ xml = Builder::XmlMarkup.new
214
+
215
+ xml.tag! 'crn', options[:billing_id] || SecureRandom.hex(10)
216
+ xml.tag! 'CreditCardInfo' do
217
+ xml.tag! 'cardNumber', credit_card.number
218
+ xml.tag! 'expiryDate', expdate(credit_card)
219
+ xml.tag! 'cvv', credit_card.verification_value if credit_card.verification_value?
220
+ end
221
+
222
+ xml.target!
223
+ end
224
+
225
+ def build_unstore_request(identification, options)
226
+ xml = Builder::XmlMarkup.new
227
+
228
+ xml.tag! 'crn', identification
229
+ xml.target!
230
+ end
231
+
218
232
  def commit(action, request)
219
233
  response = parse(ssl_post(test? ? self.test_url : self.live_url, build_request(action, request)))
220
234
 
221
235
  Response.new(success?(response), message_from(response), response,
222
236
  :test => test?,
223
- :authorization => authorization_from(response)
237
+ :authorization => authorization_from(action, response)
224
238
  )
225
239
  end
226
240
 
227
- def commit_periodic(request)
228
- response = parse(ssl_post(test? ? self.test_periodic_url : self.live_periodic_url, build_periodic_request(request)))
241
+ def commit_periodic(action, request)
242
+ response = parse(ssl_post(test? ? self.test_periodic_url : self.live_periodic_url, build_periodic_request(action, request)))
229
243
  Response.new(success?(response), message_from(response), response,
230
244
  :test => test?,
231
- :authorization => authorization_from(response)
245
+ :authorization => authorization_from(action, response)
232
246
  )
233
247
  end
234
248
 
@@ -236,8 +250,12 @@ module ActiveMerchant #:nodoc:
236
250
  SUCCESS_CODES.include?(response[:response_code])
237
251
  end
238
252
 
239
- def authorization_from(response)
240
- [response[:txn_id], response[:purchase_order_no], response[:preauth_id], response[:amount]].join('*')
253
+ def authorization_from(action, response)
254
+ if action == :addcrn
255
+ response[:crn]
256
+ else
257
+ [response[:txn_id], response[:purchase_order_no], response[:preauth_id], response[:amount]].join('*')
258
+ end
241
259
  end
242
260
 
243
261
  def message_from(response)
@@ -262,7 +280,7 @@ module ActiveMerchant #:nodoc:
262
280
 
263
281
  def parse_element(response, node)
264
282
  if node.has_elements?
265
- node.elements.each{|element| parse_element(response, element) }
283
+ node.elements.each { |element| parse_element(response, element) }
266
284
  else
267
285
  response[node.name.underscore.to_sym] = node.text
268
286
  end
@@ -274,6 +292,10 @@ module ActiveMerchant #:nodoc:
274
292
  time.strftime("%Y%d%m%H%M%S#{time.usec}+000")
275
293
  end
276
294
 
295
+ def request_timeout
296
+ @options[:request_timeout] || 60
297
+ end
298
+
277
299
  end
278
300
  end
279
301
  end