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,165 @@
1
+ require 'nokogiri'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ class NcrSecurePayGateway < Gateway
6
+ self.test_url = 'https://testbox.monetra.com:8665/'
7
+ self.live_url = 'https://portal.ncrsecurepay.com:8444/'
8
+
9
+ self.supported_countries = ['US']
10
+ self.default_currency = 'USD'
11
+ self.supported_cardtypes = [:visa, :master, :american_express, :discover]
12
+
13
+ self.homepage_url = 'http://www.ncrretailonline.com'
14
+ self.display_name = 'NCR Secure Pay'
15
+
16
+ def initialize(options={})
17
+ requires!(options, :username, :password)
18
+ super
19
+ end
20
+
21
+ def purchase(money, payment, options={})
22
+ post = {}
23
+ add_invoice(post, money, options)
24
+ add_payment(post, payment)
25
+ add_address(post, payment, options)
26
+
27
+ commit('sale', post)
28
+ end
29
+
30
+ def authorize(money, payment, options={})
31
+ post = {}
32
+ add_invoice(post, money, options)
33
+ add_payment(post, payment)
34
+ add_address(post, payment, options)
35
+
36
+ commit('preauth', post)
37
+ end
38
+
39
+ def capture(money, authorization, options={})
40
+ post = {}
41
+ add_reference(post, authorization)
42
+ add_invoice(post, money, options)
43
+
44
+ commit('preauthcomplete', post)
45
+ end
46
+
47
+ def refund(money, authorization, options={})
48
+ post = {}
49
+ add_reference(post, authorization)
50
+ add_invoice(post, money, options)
51
+
52
+ commit('credit', post)
53
+ end
54
+
55
+ def void(authorization, options={})
56
+ post = {}
57
+ add_reference(post, authorization)
58
+ commit('void', post)
59
+ end
60
+
61
+ def verify(credit_card, options={})
62
+ MultiResponse.run(:use_first_response) do |r|
63
+ r.process { authorize(100, credit_card, options) }
64
+ r.process(:ignore_result) { void(r.authorization, options) }
65
+ end
66
+ end
67
+
68
+ def supports_scrubbing?
69
+ true
70
+ end
71
+
72
+ def scrub(transcript)
73
+ transcript.gsub(%r((<password>)[^<]*(</password>))i, '\1[FILTERED]\2').
74
+ gsub(%r((<account>)[^<]*(</account>))i, '\1[FILTERED]\2').
75
+ gsub(%r((<cv>)[^<]*(</cv>))i, '\1[FILTERED]\2')
76
+ end
77
+
78
+ private
79
+
80
+ def add_reference(post, reference)
81
+ post[:ttid] = reference
82
+ end
83
+
84
+ def add_address(post, payment, options)
85
+ address = options[:billing_address] || options[:address]
86
+ post[:zip] = address[:zip]
87
+ post[:street] = address[:address1]
88
+ end
89
+
90
+ def add_invoice(post, money, options)
91
+ post[:amount] = amount(money)
92
+ post[:currency] = (options[:currency] || currency(money))
93
+ post[:descmerch] = options[:merchant] if options[:merchant]
94
+ post[:ordernum] = options[:order_id] if options[:order_id]
95
+ post[:comments] = options[:description] if options[:description]
96
+ end
97
+
98
+ def add_payment(post, payment)
99
+ post[:cardholdername] = payment.name
100
+ post[:account] = payment.number
101
+ post[:cv] = payment.verification_value
102
+ post[:expdate] = expdate(payment)
103
+ end
104
+
105
+ def parse(body)
106
+ doc = Nokogiri::XML(body)
107
+ doc.remove_namespaces!
108
+ response = doc.xpath('/MonetraResp/Resp')[0]
109
+ resp_params = {}
110
+
111
+ response.elements.each do |node|
112
+ resp_params[node.name.downcase.to_sym] = node.text
113
+ end
114
+ resp_params
115
+ end
116
+
117
+ def commit(action, parameters)
118
+ url = (test? ? test_url : live_url)
119
+ response = parse(ssl_post(url, request_body(action, parameters)))
120
+
121
+ Response.new(
122
+ success_from(response),
123
+ message_from(response),
124
+ response,
125
+ authorization: authorization_from(response),
126
+ test: test?,
127
+ error_code: error_code_from(response)
128
+ )
129
+ end
130
+
131
+ def success_from(response)
132
+ response[:code] == 'AUTH'
133
+ end
134
+
135
+ def message_from(response)
136
+ response[:verbiage]
137
+ end
138
+
139
+ def authorization_from(response)
140
+ response[:ttid]
141
+ end
142
+
143
+ def request_body(action, parameters = {})
144
+ Nokogiri::XML::Builder.new(:encoding => 'utf-8') do |xml|
145
+ xml.MonetraTrans do
146
+ xml.Trans(identifier: parameters.delete(:identifier) || '1') do
147
+ xml.username(options[:username])
148
+ xml.password(options[:password])
149
+ xml.action(action)
150
+ parameters.each do |name, value|
151
+ xml.send(name, value)
152
+ end
153
+ end
154
+ end
155
+ end.to_xml
156
+ end
157
+
158
+ def error_code_from(response)
159
+ unless success_from(response)
160
+ response[:msoft_code] || response[:phard_code]
161
+ end
162
+ end
163
+ end
164
+ end
165
+ end
@@ -22,7 +22,7 @@ module ActiveMerchant
22
22
  # response will contain a 'receipt' parameter
23
23
  # (response.params['receipt']) if a receipt was issued by the gateway.
24
24
  class NetRegistryGateway < Gateway
25
- self.live_url = self.test_url = 'https://4tknox.au.com/cgi-bin/themerchant.au.com/ecom/external2.pl'
25
+ self.live_url = self.test_url = 'https://paygate.ssllock.net/external2.pl'
26
26
 
27
27
  FILTERED_PARAMS = [ 'card_no', 'card_expiry', 'receipt_array' ]
28
28
 
@@ -104,7 +104,7 @@ module ActiveMerchant
104
104
  end
105
105
 
106
106
  def credit(money, identification, options = {})
107
- deprecated CREDIT_DEPRECATION_MESSAGE
107
+ ActiveMerchant.deprecated CREDIT_DEPRECATION_MESSAGE
108
108
  refund(money, identification, options)
109
109
  end
110
110
 
@@ -122,6 +122,7 @@ module ActiveMerchant
122
122
  end
123
123
 
124
124
  private
125
+
125
126
  def add_request_details(params, options)
126
127
  params['COMMENT'] = options[:description] unless options[:description].blank?
127
128
  end
@@ -130,7 +131,7 @@ module ActiveMerchant
130
131
  # format for a command.
131
132
  def expiry(credit_card)
132
133
  month = format(credit_card.month, :two_digits)
133
- year = format(credit_card.year , :two_digits)
134
+ year = format(credit_card.year, :two_digits)
134
135
  "#{month}/#{year}"
135
136
  end
136
137
 
@@ -141,7 +142,7 @@ module ActiveMerchant
141
142
  # omitted if nil.
142
143
  def commit(action, params)
143
144
  # get gateway response
144
- response = parse( ssl_post(self.live_url, post_data(action, params)) )
145
+ response = parse(ssl_post(self.live_url, post_data(action, params)))
145
146
 
146
147
  Response.new(response['status'] == 'approved', message_from(response), response,
147
148
  :authorization => authorization_from(response, action)
@@ -151,7 +152,12 @@ module ActiveMerchant
151
152
  def post_data(action, params)
152
153
  params['COMMAND'] = TRANSACTIONS[action]
153
154
  params['LOGIN'] = "#{@options[:login]}/#{@options[:password]}"
154
- URI.encode(params.map{|k,v| "#{k}=#{v}"}.join('&'))
155
+ escape_uri(params.map { |k, v| "#{k}=#{v}" }.join('&'))
156
+ end
157
+
158
+ # The upstream is picky and so we can't use CGI.escape like we want to
159
+ def escape_uri(uri)
160
+ URI::DEFAULT_PARSER.escape(uri)
155
161
  end
156
162
 
157
163
  def parse(response)
@@ -31,8 +31,8 @@ module ActiveMerchant #:nodoc:
31
31
  requires!(options, :order_id)
32
32
 
33
33
  MultiResponse.run do |r|
34
- r.process{authorize(money, creditcard, options)}
35
- r.process{capture(money, r.authorization, options)}
34
+ r.process { authorize(money, creditcard, options) }
35
+ r.process { capture(money, r.authorization, options) }
36
36
  end
37
37
  end
38
38
 
@@ -40,9 +40,9 @@ module ActiveMerchant #:nodoc:
40
40
  requires!(options, :order_id)
41
41
 
42
42
  MultiResponse.run do |r|
43
- r.process{setup_transaction(money, options)}
44
- r.process{add_and_auth_credit_card(r.authorization, creditcard, options)}
45
- r.process{query_transaction(r.authorization, options)}
43
+ r.process { setup_transaction(money, options) }
44
+ r.process { add_and_auth_credit_card(r.authorization, creditcard, options) }
45
+ r.process { query_transaction(r.authorization, options) }
46
46
  end
47
47
  end
48
48
 
@@ -50,24 +50,24 @@ module ActiveMerchant #:nodoc:
50
50
  post = {}
51
51
  add_credentials(post, options)
52
52
  add_authorization(post, authorization, money)
53
- post[:operation] = "Capture"
54
- commit("Netaxept/process.aspx", post)
53
+ post[:operation] = 'Capture'
54
+ commit('Netaxept/process.aspx', post)
55
55
  end
56
56
 
57
57
  def refund(money, authorization, options = {})
58
58
  post = {}
59
59
  add_credentials(post, options)
60
60
  add_authorization(post, authorization, money)
61
- post[:operation] = "Credit"
62
- commit("Netaxept/process.aspx", post)
61
+ post[:operation] = 'Credit'
62
+ commit('Netaxept/process.aspx', post)
63
63
  end
64
64
 
65
65
  def void(authorization, options = {})
66
66
  post = {}
67
67
  add_credentials(post, options)
68
68
  add_authorization(post, authorization)
69
- post[:operation] = "Annul"
70
- commit("Netaxept/process.aspx", post)
69
+ post[:operation] = 'Annul'
70
+ commit('Netaxept/process.aspx', post)
71
71
  end
72
72
 
73
73
  private
@@ -76,7 +76,7 @@ module ActiveMerchant #:nodoc:
76
76
  post = {}
77
77
  add_credentials(post, options)
78
78
  add_order(post, money, options)
79
- commit("Netaxept/Register.aspx", post)
79
+ commit('Netaxept/Register.aspx', post)
80
80
  end
81
81
 
82
82
  def add_and_auth_credit_card(authorization, creditcard, options)
@@ -84,14 +84,14 @@ module ActiveMerchant #:nodoc:
84
84
  add_credentials(post, options, false)
85
85
  add_authorization(post, authorization)
86
86
  add_creditcard(post, creditcard)
87
- commit("terminal/default.aspx", post, false)
87
+ commit('terminal/default.aspx', post, false)
88
88
  end
89
89
 
90
90
  def query_transaction(authorization, options)
91
91
  post = {}
92
92
  add_credentials(post, options)
93
93
  add_authorization(post, authorization)
94
- commit("Netaxept/query.aspx", post)
94
+ commit('Netaxept/query.aspx', post)
95
95
  end
96
96
 
97
97
  def add_credentials(post, options, secure=true)
@@ -109,7 +109,7 @@ module ActiveMerchant #:nodoc:
109
109
  post[:orderNumber] = options[:order_id]
110
110
  post[:amount] = amount(money)
111
111
  post[:currencyCode] = (options[:currency] || currency(money))
112
- post[:autoAuth] = "true"
112
+ post[:autoAuth] = 'true'
113
113
  end
114
114
 
115
115
  def add_creditcard(post, options)
@@ -122,13 +122,13 @@ module ActiveMerchant #:nodoc:
122
122
  raw = parse(ssl_get(build_url(path, parameters)), xml)
123
123
 
124
124
  success = false
125
- authorization = (raw["TransactionId"] || parameters[:transactionId])
125
+ authorization = (raw['TransactionId'] || parameters[:transactionId])
126
126
  if raw[:container] =~ /Exception|Error/
127
- message = (raw["Message"] || raw["Error"]["Message"])
128
- elsif raw["Error"] && !raw["Error"].empty?
129
- message = (raw["Error"]["ResponseText"] || raw["Error"]["ResponseCode"])
127
+ message = (raw['Message'] || raw['Error']['Message'])
128
+ elsif raw['Error'] && !raw['Error'].empty?
129
+ message = (raw['Error']['ResponseText'] || raw['Error']['ResponseCode'])
130
130
  else
131
- message = (raw["ResponseText"] || raw["ResponseCode"] || "OK")
131
+ message = (raw['ResponseText'] || raw['ResponseCode'] || 'OK')
132
132
  success = true
133
133
  end
134
134
 
@@ -173,9 +173,8 @@ module ActiveMerchant #:nodoc:
173
173
  end
174
174
 
175
175
  def encode(hash)
176
- hash.collect{|(k,v)| "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}"}.join('&')
176
+ hash.collect { |(k, v)| "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}" }.join('&')
177
177
  end
178
178
  end
179
179
  end
180
180
  end
181
-
@@ -0,0 +1,290 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ class NetbanxGateway < Gateway
4
+ # Netbanx is the new REST based API for Optimal Payments / Paysafe
5
+ self.test_url = 'https://api.test.netbanx.com/'
6
+ self.live_url = 'https://api.netbanx.com/'
7
+
8
+ self.supported_countries = %w(AF AX AL DZ AS AD AO AI AQ AG AR AM AW AU AT AZ BS BH BD BB BY BE BZ BJ BM BT BO BQ BA BW BV BR IO BN BG BF BI KH CM CA CV KY CF TD CL CN CX CC CO KM CG CD CK CR CI HR CU CW CY CZ DK DJ DM DO EC EG SV GQ ER EE ET FK FO FJ FI FR GF PF TF GA GM GE DE GH GI GR GL GD GP GU GT GG GN GW GY HT HM HN HK HU IS IN ID IR IQ IE IM IL IT JM JP JE JO KZ KE KI KP KR KW KG LA LV LB LS LR LY LI LT LU MO MK MG MW MY MV ML MT MH MQ MR MU YT MX FM MD MC MN ME MS MA MZ MM NA NR NP NC NZ NI NE NG NU NF MP NO OM PK PW PS PA PG PY PE PH PN PL PT PR QA RE RO RU RW BL SH KN LC MF VC WS SM ST SA SN RS SC SL SG SX SK SI SB SO ZA GS SS ES LK PM SD SR SJ SZ SE CH SY TW TJ TZ TH NL TL TG TK TO TT TN TR TM TC TV UG UA AE GB US UM UY UZ VU VA VE VN VG VI WF EH YE ZM ZW)
9
+ self.default_currency = 'CAD'
10
+ self.supported_cardtypes = [
11
+ :american_express,
12
+ :diners_club,
13
+ :discover,
14
+ :jcb,
15
+ :master,
16
+ :maestro,
17
+ :visa
18
+ ]
19
+
20
+ self.money_format = :cents
21
+
22
+ self.homepage_url = 'https://processing.paysafe.com/'
23
+ self.display_name = 'Netbanx by PaySafe'
24
+
25
+ def initialize(options={})
26
+ requires!(options, :account_number, :api_key)
27
+ super
28
+ end
29
+
30
+ def purchase(money, payment, options={})
31
+ post = {}
32
+ add_invoice(post, money, options)
33
+ add_settle_with_auth(post)
34
+ add_payment(post, payment, options)
35
+
36
+ commit(:post, 'auths', post)
37
+ end
38
+
39
+ def authorize(money, payment, options={})
40
+ post = {}
41
+ add_invoice(post, money, options)
42
+ add_payment(post, payment, options)
43
+
44
+ commit(:post, 'auths', post)
45
+ end
46
+
47
+ def capture(money, authorization, options={})
48
+ post = {}
49
+ add_invoice(post, money, options)
50
+
51
+ commit(:post, "auths/#{authorization}/settlements", post)
52
+ end
53
+
54
+ def refund(money, authorization, options={})
55
+ post = {}
56
+ add_invoice(post, money, options)
57
+
58
+ commit(:post, "settlements/#{authorization}/refunds", post)
59
+ end
60
+
61
+ def void(authorization, options={})
62
+ post = {}
63
+ add_order_id(post, options)
64
+
65
+ commit(:post, "auths/#{authorization}/voidauths", post)
66
+ end
67
+
68
+ def verify(credit_card, options={})
69
+ post = {}
70
+ add_payment(post, credit_card)
71
+ add_order_id(post, options)
72
+
73
+ commit(:post, 'verifications', post)
74
+ end
75
+
76
+ # note: when passing options[:customer] we only attempt to add the
77
+ # card to the profile_id passed as the options[:customer]
78
+ def store(credit_card, options={})
79
+ # locale can only be one of en_US, fr_CA, en_GB
80
+ requires!(options, :locale)
81
+ post = {}
82
+ add_credit_card(post, credit_card, options)
83
+ add_customer_data(post, options)
84
+
85
+ commit(:post, 'customervault/v1/profiles', post)
86
+ end
87
+
88
+ def unstore(identification, options = {})
89
+ customer_id, card_id = identification.split('|')
90
+
91
+ if card_id.nil?
92
+ # deleting the profile
93
+ commit(:delete, "customervault/v1/profiles/#{CGI.escape(customer_id)}", nil)
94
+ else
95
+ # deleting the card from the profile
96
+ commit(:delete, "customervault/v1/profiles/#{CGI.escape(customer_id)}/cards/#{CGI.escape(card_id)}", nil)
97
+ end
98
+ end
99
+
100
+ def supports_scrubbing?
101
+ true
102
+ end
103
+
104
+ def scrub(transcript)
105
+ transcript.
106
+ gsub(%r((Authorization: Basic )\w+), '\1[FILTERED]').
107
+ gsub(%r(("card\\?":{\\?"cardNum\\?":\\?")\d+), '\1[FILTERED]').
108
+ gsub(%r(("cvv\\?":\\?")\d+), '\1[FILTERED]')
109
+ end
110
+
111
+ private
112
+
113
+ def add_settle_with_auth(post)
114
+ post[:settleWithAuth] = true
115
+ end
116
+
117
+ def add_customer_data(post, options)
118
+ post[:merchantCustomerId] = (options[:merchant_customer_id] || SecureRandom.uuid)
119
+ post[:locale] = options[:locale]
120
+ end
121
+
122
+ def add_credit_card(post, credit_card, options = {})
123
+ post[:card] ||= {}
124
+ post[:card][:cardNum] = credit_card.number
125
+ post[:card][:holderName] = credit_card.name
126
+ post[:card][:cvv] = credit_card.verification_value
127
+ post[:card][:cardExpiry] = expdate(credit_card)
128
+ if options[:billing_address]
129
+ post[:card][:billingAddress] = map_address(options[:billing_address])
130
+ end
131
+ end
132
+
133
+ def add_invoice(post, money, options)
134
+ post[:amount] = amount(money)
135
+ add_order_id(post, options)
136
+ end
137
+
138
+ def add_payment(post, credit_card_or_reference, options = {})
139
+ post[:card] ||= {}
140
+ if credit_card_or_reference.is_a?(String)
141
+ post[:card][:paymentToken] = credit_card_or_reference
142
+ else
143
+ post[:card][:cardNum] = credit_card_or_reference.number
144
+ post[:card][:cvv] = credit_card_or_reference.verification_value
145
+ post[:card][:cardExpiry] = expdate(credit_card_or_reference)
146
+ end
147
+
148
+ post[:currencyCode] = options[:currency] if options[:currency]
149
+ post[:billingDetails] = map_address(options[:billing_address]) if options[:billing_address]
150
+ end
151
+
152
+ def expdate(credit_card)
153
+ year = format(credit_card.year, :four_digits)
154
+ month = format(credit_card.month, :two_digits)
155
+
156
+ # returns a hash (necessary in the card JSON object)
157
+ { :month => month, :year => year }
158
+ end
159
+
160
+ def add_order_id(post, options)
161
+ post[:merchantRefNum] = (options[:order_id] || SecureRandom.uuid)
162
+ end
163
+
164
+ def map_address(address)
165
+ return {} if address.nil?
166
+ country = Country.find(address[:country]) if address[:country]
167
+ mapped = {
168
+ :street => address[:address1],
169
+ :city => address[:city],
170
+ :zip => address[:zip],
171
+ :state => address[:state],
172
+ }
173
+ mapped[:country] = country.code(:alpha2).value unless country.blank?
174
+
175
+ mapped
176
+ end
177
+
178
+ def parse(body)
179
+ body.blank? ? {} : JSON.parse(body)
180
+ end
181
+
182
+ def commit(method, uri, parameters)
183
+ params = parameters.to_json unless parameters.nil?
184
+ response = begin
185
+ parse(ssl_request(method, get_url(uri), params, headers))
186
+ rescue ResponseError => e
187
+ return Response.new(false, 'Invalid Login') if(e.response.code == '401')
188
+ parse(e.response.body)
189
+ end
190
+
191
+ success = success_from(response)
192
+ Response.new(
193
+ success,
194
+ message_from(success, response),
195
+ response,
196
+ :test => test?,
197
+ :error_code => error_code_from(response),
198
+ :authorization => authorization_from(success, get_url(uri), method, response)
199
+ )
200
+ end
201
+
202
+ def get_url(uri)
203
+ url = (test? ? test_url : live_url)
204
+ if uri =~ /^customervault/
205
+ "#{url}#{uri}"
206
+ else
207
+ "#{url}cardpayments/v1/accounts/#{@options[:account_number]}/#{uri}"
208
+ end
209
+ end
210
+
211
+ def success_from(response)
212
+ response.blank? || !response.key?('error')
213
+ end
214
+
215
+ def message_from(success, response)
216
+ success ? 'OK' : (response['error']['message'] || 'Unknown error - please contact Netbanx-Paysafe')
217
+ end
218
+
219
+ def authorization_from(success, url, method, response)
220
+ if success && response.present? && url.match(/cardpayments\/v1\/accounts\/.*\//)
221
+ response['id']
222
+ elsif method == :post && url.match(/customervault\/.*\//)
223
+ # auth for tokenised customer vault is returned as
224
+ # customer_profile_id|card_id|payment_method_token
225
+ #
226
+ # customer_profile_id is the uuid that identifies the customer
227
+ # card_id is the uuid that identifies the card
228
+ # payment_method_token is the token that needs to be used when
229
+ # calling purchase with a token
230
+ #
231
+ # both id's are used to unstore, the payment token is only used for
232
+ # purchase transactions
233
+ [response['id'], response['cards'].first['id'], response['cards'].first['paymentToken']].join('|')
234
+ end
235
+ end
236
+
237
+ # Builds the auth and U-A headers for the request
238
+ def headers
239
+ {
240
+ 'Accept' => 'application/json',
241
+ 'Content-type' => 'application/json',
242
+ 'Authorization' => "Basic #{Base64.strict_encode64(@options[:api_key].to_s)}",
243
+ 'User-Agent' => "Netbanx-Paysafe v1.0/ActiveMerchant #{ActiveMerchant::VERSION}"
244
+ }
245
+ end
246
+
247
+ def error_code_from(response)
248
+ unless success_from(response)
249
+ case response['errorCode']
250
+ when '3002' then STANDARD_ERROR_CODE[:invalid_number] # You submitted an invalid card number or brand or combination of card number and brand with your request.
251
+ when '3004' then STANDARD_ERROR_CODE[:incorrect_zip] # The zip/postal code must be provided for an AVS check request.
252
+ when '3005' then STANDARD_ERROR_CODE[:incorrect_cvc] # You submitted an incorrect CVC value with your request.
253
+ when '3006' then STANDARD_ERROR_CODE[:expired_card] # You submitted an expired credit card number with your request.
254
+ when '3009' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined by the issuing bank.
255
+ when '3011' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined by the issuing bank because the card used is a restricted card. Contact the cardholder's credit card company for further investigation.
256
+ when '3012' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined by the issuing bank because the credit card expiry date submitted is invalid.
257
+ when '3013' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined by the issuing bank due to problems with the credit card account.
258
+ when '3014' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined - the issuing bank has returned an unknown response. Contact the card holder's credit card company for further investigation.
259
+ when '3015' then STANDARD_ERROR_CODE[:card_declined] # The bank has requested that you process the transaction manually by calling the cardholder's credit card company.
260
+ when '3016' then STANDARD_ERROR_CODE[:card_declined] # The bank has requested that you retrieve the card from the cardholder – it may be a lost or stolen card.
261
+ when '3017' then STANDARD_ERROR_CODE[:invalid_number] # You submitted an invalid credit card number with your request.
262
+ when '3022' then STANDARD_ERROR_CODE[:card_declined] # The card has been declined due to insufficient funds.
263
+ when '3023' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined by the issuing bank due to its proprietary card activity regulations.
264
+ when '3024' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined because the issuing bank does not permit the transaction for this card.
265
+ when '3032' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined by the issuing bank or external gateway because the card is probably in one of their negative databases.
266
+ when '3035' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined due to exceeded PIN attempts.
267
+ when '3036' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined due to an invalid issuer.
268
+ when '3037' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined because it is invalid.
269
+ when '3038' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined due to customer cancellation.
270
+ when '3039' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined due to an invalid authentication value.
271
+ when '3040' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined because the request type is not permitted on the card.
272
+ when '3041' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined due to a timeout.
273
+ when '3042' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined due to a cryptographic error.
274
+ when '3045' then STANDARD_ERROR_CODE[:invalid_expiry_date] # You submitted an invalid date format for this request.
275
+ when '3046' then STANDARD_ERROR_CODE[:card_declined] # The transaction was declined because the amount was set to zero.
276
+ when '3047' then STANDARD_ERROR_CODE[:card_declined] # The transaction was declined because the amount exceeds the floor limit.
277
+ when '3048' then STANDARD_ERROR_CODE[:card_declined] # The transaction was declined because the amount is less than the floor limit.
278
+ when '3049' then STANDARD_ERROR_CODE[:card_declined] # The bank has requested that you retrieve the card from the cardholder – the credit card has expired.
279
+ when '3050' then STANDARD_ERROR_CODE[:card_declined] # The bank has requested that you retrieve the card from the cardholder – fraudulent activity is suspected.
280
+ when '3051' then STANDARD_ERROR_CODE[:card_declined] # The bank has requested that you retrieve the card from the cardholder – contact the acquirer for more information.
281
+ when '3052' then STANDARD_ERROR_CODE[:card_declined] # The bank has requested that you retrieve the card from the cardholder – the credit card is restricted.
282
+ when '3053' then STANDARD_ERROR_CODE[:card_declined] # The bank has requested that you retrieve the card from the cardholder – please call the acquirer.
283
+ when '3054' then STANDARD_ERROR_CODE[:card_declined] # The transaction was declined due to suspected fraud.
284
+ else STANDARD_ERROR_CODE[:processing_error]
285
+ end
286
+ end
287
+ end
288
+ end
289
+ end
290
+ end