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
@@ -6,10 +6,7 @@ module ActiveMerchant #:nodoc:
6
6
  TRANSACTION_APPROVED_MSG = 'Transaction approved'
7
7
  TRANSACTION_DECLINED_MSG = 'Transaction declined'
8
8
 
9
- LIVE_URLS = {
10
- 'NZ' => 'https://api.swipehq.com',
11
- 'CA' => 'https://api.swipehq.ca'
12
- }
9
+ self.live_url = 'https://api.swipehq.com'
13
10
  self.test_url = 'https://api.swipehq.com'
14
11
 
15
12
  TRANSACTION_API = '/createShopifyTransaction.php'
@@ -57,8 +54,7 @@ module ActiveMerchant #:nodoc:
57
54
 
58
55
  post[:company] = address[:company]
59
56
 
60
- # groups all names after the first into the last name param
61
- post[:first_name], post[:last_name] = address[:name].split(' ', 2)
57
+ post[:first_name], post[:last_name] = split_names(address[:name])
62
58
  post[:address] = "#{address[:address1]}, #{address[:address2]}"
63
59
  post[:city] = address[:city]
64
60
  post[:country] = address[:country]
@@ -70,7 +66,7 @@ module ActiveMerchant #:nodoc:
70
66
  post[:td_user_data] = options[:order_id] if options[:order_id]
71
67
  post[:td_item] = options[:description] if options[:description]
72
68
  post[:td_description] = options[:description] if options[:description]
73
- post[:item_quantity] = "1"
69
+ post[:item_quantity] = '1'
74
70
  end
75
71
 
76
72
  def add_creditcard(post, creditcard)
@@ -96,16 +92,16 @@ module ActiveMerchant #:nodoc:
96
92
 
97
93
  def commit(action, money, parameters)
98
94
  case action
99
- when "sale"
95
+ when 'sale'
100
96
  begin
101
97
  response = call_api(TRANSACTION_API, parameters)
102
98
 
103
99
  # response code and message params should always be present
104
- code = response["response_code"]
105
- message = response["message"]
100
+ code = response['response_code']
101
+ message = response['message']
106
102
 
107
103
  if code == 200
108
- result = response["data"]["result"]
104
+ result = response['data']['result']
109
105
  success = (result == 'accepted' || (test? && result == 'test-accepted'))
110
106
 
111
107
  Response.new(success,
@@ -119,11 +115,10 @@ module ActiveMerchant #:nodoc:
119
115
  build_error_response(message, response)
120
116
  end
121
117
  rescue ResponseError => e
122
- raw_response = e.response.body
123
118
  build_error_response("ssl_post() with url #{url} raised ResponseError: #{e}")
124
119
  rescue JSON::ParserError => e
125
- msg = 'Invalid response received from the Swipe Checkout API. ' +
126
- 'Please contact support@optimizerhq.com if you continue to receive this message.' +
120
+ msg = 'Invalid response received from the Swipe Checkout API. ' \
121
+ 'Please contact support@optimizerhq.com if you continue to receive this message.' \
127
122
  " (Full error message: #{e})"
128
123
  build_error_response(msg)
129
124
  end
@@ -137,11 +132,11 @@ module ActiveMerchant #:nodoc:
137
132
 
138
133
  # ssl_post() returns the response body as a string on success,
139
134
  # or raises a ResponseError exception on failure
140
- JSON.parse(ssl_post(url(@options[:region], api), params.to_query))
135
+ JSON.parse(ssl_post(url(api), params.to_query))
141
136
  end
142
137
 
143
- def url(region, api)
144
- ((test? ? self.test_url : LIVE_URLS[region]) + api)
138
+ def url(api)
139
+ (test? ? self.test_url : self.live_url) + api
145
140
  end
146
141
 
147
142
  def build_error_response(message, params={})
@@ -155,4 +150,3 @@ module ActiveMerchant #:nodoc:
155
150
  end
156
151
  end
157
152
  end
158
-
@@ -0,0 +1,274 @@
1
+ require 'nokogiri'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ class TelrGateway < Gateway
6
+ self.display_name = 'Telr'
7
+ self.homepage_url = 'http://www.telr.com/'
8
+
9
+ self.live_url = 'https://secure.telr.com/gateway/remote.xml'
10
+
11
+ self.supported_countries = ['AE', 'IN', 'SA']
12
+ self.default_currency = 'AED'
13
+ self.money_format = :dollars
14
+ self.supported_cardtypes = [:visa, :master, :american_express, :maestro, :jcb]
15
+
16
+ CVC_CODE_TRANSLATOR = {
17
+ 'Y' => 'M',
18
+ 'N' => 'N',
19
+ 'X' => 'P',
20
+ 'E' => 'U',
21
+ }
22
+
23
+ AVS_CODE_TRANSLATOR = {
24
+ 'Y' => 'M',
25
+ 'P' => 'A',
26
+ 'N' => 'N',
27
+ 'X' => 'I',
28
+ 'E' => 'R'
29
+ }
30
+
31
+ def initialize(options={})
32
+ requires!(options, :merchant_id, :api_key)
33
+ super
34
+ end
35
+
36
+ def purchase(amount, payment_method, options={})
37
+ commit(:purchase, amount, options[:currency]) do |doc|
38
+ add_invoice(doc, 'sale', amount, payment_method, options)
39
+ add_payment_method(doc, payment_method, options)
40
+ add_customer_data(doc, payment_method, options)
41
+ end
42
+ end
43
+
44
+ def authorize(amount, payment_method, options={})
45
+ commit(:authorize, amount, options[:currency]) do |doc|
46
+ add_invoice(doc, 'auth', amount, payment_method, options)
47
+ add_payment_method(doc, payment_method, options)
48
+ add_customer_data(doc, payment_method, options)
49
+ end
50
+ end
51
+
52
+ def capture(amount, authorization, options={})
53
+ commit(:capture) do |doc|
54
+ add_invoice(doc, 'capture', amount, authorization, options)
55
+ end
56
+ end
57
+
58
+ def void(authorization, options={})
59
+ _, amount, currency = split_authorization(authorization)
60
+ commit(:void) do |doc|
61
+ add_invoice(doc, 'void', amount.to_i, authorization, options.merge(currency: currency))
62
+ end
63
+ end
64
+
65
+ def refund(amount, authorization, options={})
66
+ commit(:refund) do |doc|
67
+ add_invoice(doc, 'refund', amount, authorization, options)
68
+ end
69
+ end
70
+
71
+ def verify(credit_card, options={})
72
+ commit(:verify) do |doc|
73
+ add_invoice(doc, 'verify', 100, credit_card, options)
74
+ add_payment_method(doc, credit_card, options)
75
+ add_customer_data(doc, credit_card, options)
76
+ end
77
+ end
78
+
79
+ def verify_credentials
80
+ response = void('0')
81
+ !['01', '04'].include?(response.error_code)
82
+ end
83
+
84
+ def supports_scrubbing?
85
+ true
86
+ end
87
+
88
+ def scrub(transcript)
89
+ transcript.
90
+ gsub(%r((<Number>)[^<]+(<))i, '\1[FILTERED]\2').
91
+ gsub(%r((<CVV>)[^<]+(<))i, '\1[FILTERED]\2').
92
+ gsub(%r((<Key>)[^<]+(<))i, '\1[FILTERED]\2')
93
+ end
94
+
95
+ private
96
+
97
+ def add_invoice(doc, action, money, payment_method, options)
98
+ doc.tran do
99
+ doc.type(action)
100
+ doc.amount(amount(money))
101
+ doc.currency(options[:currency] || currency(money))
102
+ doc.cartid(options[:order_id])
103
+ doc.class_(transaction_class(action, payment_method))
104
+ doc.description(options[:description] || 'Description')
105
+ doc.test_(test_mode)
106
+ add_ref(doc, action, payment_method)
107
+ end
108
+ end
109
+
110
+ def add_payment_method(doc, payment_method, options)
111
+ return if payment_method.is_a?(String)
112
+ doc.card do
113
+ doc.number(payment_method.number)
114
+ doc.cvv(payment_method.verification_value)
115
+ doc.expiry do
116
+ doc.month(format(payment_method.month, :two_digits))
117
+ doc.year(format(payment_method.year, :four_digits))
118
+ end
119
+ end
120
+ end
121
+
122
+ def add_customer_data(doc, payment_method, options)
123
+ return if payment_method.is_a?(String)
124
+ doc.billing do
125
+ doc.name do
126
+ doc.first(payment_method.first_name)
127
+ doc.last(payment_method.last_name)
128
+ end
129
+ doc.email(options[:email] || 'unspecified@email.com')
130
+ doc.ip(options[:ip]) if options[:ip]
131
+ doc.address do
132
+ add_address(doc, options)
133
+ end
134
+ end
135
+ end
136
+
137
+ def add_address(doc, options)
138
+ address = options[:billing_address] || {}
139
+ doc.country(address[:country] ? lookup_country_code(address[:country]) : 'NA')
140
+ doc.city(address[:city] || 'City')
141
+ doc.line1(address[:address1] || 'Address')
142
+ return unless address
143
+ doc.line2(address[:address2]) if address[:address2]
144
+ doc.zip(address[:zip]) if address[:zip]
145
+ doc.region(address[:state]) if address[:state]
146
+ end
147
+
148
+ def add_ref(doc, action, payment_method)
149
+ if ['capture', 'refund', 'void'].include?(action) || payment_method.is_a?(String)
150
+ doc.ref(split_authorization(payment_method)[0])
151
+ end
152
+ end
153
+
154
+ def add_authentication(doc)
155
+ doc.store(@options[:merchant_id])
156
+ doc.key(@options[:api_key])
157
+ end
158
+
159
+ def lookup_country_code(code)
160
+ country = Country.find(code) rescue nil
161
+ country.code(:alpha2)
162
+ end
163
+
164
+ def commit(action, amount=nil, currency=nil)
165
+ currency = default_currency if currency == nil
166
+ request = build_xml_request { |doc| yield(doc) }
167
+ response = ssl_post(live_url, request, headers)
168
+ parsed = parse(response)
169
+
170
+ succeeded = success_from(parsed)
171
+ Response.new(
172
+ succeeded,
173
+ message_from(succeeded, parsed),
174
+ parsed,
175
+ authorization: authorization_from(action, parsed, amount, currency),
176
+ avs_result: avs_result(parsed),
177
+ cvv_result: cvv_result(parsed),
178
+ error_code: error_code_from(succeeded, parsed),
179
+ test: test?
180
+ )
181
+ end
182
+
183
+ def root_attributes
184
+ {
185
+ store: @options[:merchant_id],
186
+ key: @options[:api_key]
187
+ }
188
+ end
189
+
190
+ def build_xml_request
191
+ builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
192
+ xml.remote do |doc|
193
+ add_authentication(doc)
194
+ yield(doc)
195
+ end
196
+ end
197
+
198
+ builder.doc.to_xml
199
+ end
200
+
201
+ def test_mode
202
+ test? ? '1' : '0'
203
+ end
204
+
205
+ def transaction_class(action, payment_method)
206
+ if payment_method.is_a?(String) && action == 'sale'
207
+ return 'cont'
208
+ else
209
+ return 'moto'
210
+ end
211
+ end
212
+
213
+ def parse(xml)
214
+ response = {}
215
+
216
+ doc = Nokogiri::XML(xml)
217
+ doc.root&.xpath('*')&.each do |node|
218
+ if node.elements.size == 0
219
+ response[node.name.downcase.to_sym] = node.text
220
+ else
221
+ node.elements.each do |childnode|
222
+ name = childnode.name.downcase
223
+ response[name.to_sym] = childnode.text
224
+ end
225
+ end
226
+ end
227
+
228
+ response
229
+ end
230
+
231
+ def authorization_from(action, response, amount, currency)
232
+ auth = response[:tranref]
233
+ auth = [auth, amount, currency].join('|')
234
+ auth
235
+ end
236
+
237
+ def split_authorization(authorization)
238
+ authorization.split('|')
239
+ end
240
+
241
+ def success_from(response)
242
+ response[:status] == 'A'
243
+ end
244
+
245
+ def message_from(succeeded, response)
246
+ if succeeded
247
+ 'Succeeded'
248
+ else
249
+ response[:message]
250
+ end
251
+ end
252
+
253
+ def error_code_from(succeeded, response)
254
+ unless succeeded
255
+ response[:code]
256
+ end
257
+ end
258
+
259
+ def cvv_result(parsed)
260
+ CVVResult.new(CVC_CODE_TRANSLATOR[parsed[:cvv]])
261
+ end
262
+
263
+ def avs_result(parsed)
264
+ AVSResult.new(code: AVS_CODE_TRANSLATOR[parsed[:avs]])
265
+ end
266
+
267
+ def headers
268
+ {
269
+ 'Content-Type' => 'text/xml'
270
+ }
271
+ end
272
+ end
273
+ end
274
+ end
@@ -0,0 +1,22 @@
1
+ module ActiveMerchant
2
+ module Billing
3
+ class TnsGateway < Gateway
4
+ include MastercardGateway
5
+
6
+ class_attribute :live_na_url, :live_ap_url, :test_na_url, :test_ap_url
7
+
8
+ self.live_na_url = 'https://secure.na.tnspayments.com/api/rest/version/36/'
9
+ self.test_na_url = 'https://secure.na.tnspayments.com/api/rest/version/36/'
10
+
11
+ self.live_ap_url = 'https://secure.ap.tnspayments.com/api/rest/version/36/'
12
+ self.test_ap_url = 'https://secure.ap.tnspayments.com/api/rest/version/36/'
13
+
14
+ self.display_name = 'TNS'
15
+ self.homepage_url = 'http://www.tnsi.com/'
16
+ self.supported_countries = %w(AR AU BR FR DE HK MX NZ SG GB US)
17
+ self.default_currency = 'USD'
18
+ self.supported_cardtypes = [:visa, :master, :american_express, :discover, :diners_club, :jcb, :maestro]
19
+
20
+ end
21
+ end
22
+ end
@@ -1,66 +1,146 @@
1
1
  module ActiveMerchant #:nodoc:
2
2
  module Billing #:nodoc:
3
3
  class TransFirstGateway < Gateway
4
- self.live_url = self.test_url = 'https://webservices.primerchants.com/creditcard.asmx/CCSale'
4
+ self.test_url = 'https://ws.cert.transfirst.com'
5
+ self.live_url = 'https://webservices.primerchants.com'
5
6
 
6
7
  self.supported_countries = ['US']
7
8
  self.supported_cardtypes = [:visa, :master, :american_express, :discover]
8
9
  self.homepage_url = 'http://www.transfirst.com/'
9
10
  self.display_name = 'TransFirst'
10
11
 
11
- UNUSED_FIELDS = %w(ECIValue UserId CAVVData TrackData POSInd EComInd MerchZIP MerchCustPNum MCC InstallmentNum InstallmentOf POSEntryMode POSConditionCode AuthCharInd CardCertData)
12
+ UNUSED_CREDIT_CARD_FIELDS = %w(UserId TrackData MerchZIP MerchCustPNum MCC InstallmentNum InstallmentOf POSInd POSEntryMode POSConditionCode EComInd AuthCharInd CardCertData CAVVData)
12
13
 
13
14
  DECLINED = 'The transaction was declined'
14
15
 
16
+ ACTIONS = {
17
+ purchase: 'CCSale',
18
+ purchase_echeck: 'ACHDebit',
19
+ refund: 'CreditCardCredit',
20
+ refund_echeck: 'ACHVoidTransaction',
21
+ void: 'CreditCardAutoRefundorVoid',
22
+ }
23
+
24
+ ENDPOINTS = {
25
+ purchase: 'creditcard.asmx',
26
+ purchase_echeck: 'checkverifyws/checkverifyws.asmx',
27
+ refund: 'creditcard.asmx',
28
+ refund_echeck: 'checkverifyws/checkverifyws.asmx',
29
+ void: 'creditcard.asmx'
30
+ }
31
+
15
32
  def initialize(options = {})
16
33
  requires!(options, :login, :password)
17
34
  super
18
35
  end
19
36
 
20
- def purchase(money, credit_card, options = {})
37
+ def purchase(money, payment, options = {})
21
38
  post = {}
22
39
 
23
40
  add_amount(post, money)
24
- add_invoice(post, options)
25
- add_credit_card(post, credit_card)
41
+ add_payment(post, payment)
26
42
  add_address(post, options)
43
+ add_invoice(post, options) if payment.credit_card?
44
+ add_pair(post, :RefID, options[:order_id], required: true)
45
+
46
+ commit((payment.is_a?(Check) ? :purchase_echeck : :purchase), post)
47
+ end
48
+
49
+ def refund(money, authorization, options={})
50
+ post = {}
51
+
52
+ transaction_id, payment_type = split_authorization(authorization)
53
+ add_amount(post, money)
54
+ add_pair(post, :TransID, transaction_id)
55
+ add_pair(post, :RefID, options[:order_id], required: true)
56
+
57
+ commit((payment_type == 'check' ? :refund_echeck : :refund), post)
58
+ end
59
+
60
+ def void(authorization, options={})
61
+ post = {}
62
+
63
+ transaction_id, _ = split_authorization(authorization)
64
+ add_pair(post, :TransID, transaction_id)
65
+
66
+ commit(:void, post)
67
+ end
68
+
69
+ def supports_scrubbing?
70
+ true
71
+ end
27
72
 
28
- commit(post)
73
+ def scrub(transcript)
74
+ transcript.
75
+ gsub(%r((&?RegKey=)\w*(&?)), '\1[FILTERED]\2').
76
+ gsub(%r((&?CardNumber=)\d*(&?)), '\1[FILTERED]\2').
77
+ gsub(%r((&?CVV2=)\d*(&?)), '\1[FILTERED]\2').
78
+ gsub(%r((&?TransRoute=)\d*(&?)), '\1[FILTERED]\2').
79
+ gsub(%r((&?BankAccountNo=)\d*(&?)), '\1[FILTERED]\2')
29
80
  end
30
81
 
31
82
  private
83
+
32
84
  def add_amount(post, money)
33
- add_pair(post, :Amount, amount(money), :required => true)
85
+ add_pair(post, :Amount, amount(money), required: true)
34
86
  end
35
87
 
36
88
  def add_address(post, options)
37
89
  address = options[:billing_address] || options[:address]
38
90
 
39
91
  if address
40
- add_pair(post, :Address, address[:address1])
41
- add_pair(post, :ZipCode, address[:zip])
92
+ add_pair(post, :Address, address[:address1], required: true)
93
+ add_pair(post, :ZipCode, address[:zip], required: true)
94
+ else
95
+ add_pair(post, :Address, '', required: true)
96
+ add_pair(post, :ZipCode, '', required: true)
42
97
  end
43
98
  end
44
99
 
45
100
  def add_invoice(post, options)
46
- add_pair(post, :RefID, options[:order_id], :required => true)
47
- add_pair(post, :PONumber, options[:invoice], :required => true)
101
+ add_pair(post, :SECCCode, options[:invoice], required: true)
102
+ add_pair(post, :PONumber, options[:invoice], required: true)
48
103
  add_pair(post, :SaleTaxAmount, amount(options[:tax] || 0))
49
- add_pair(post, :PaymentDesc, options[:description], :required => true)
50
104
  add_pair(post, :TaxIndicator, 0)
105
+ add_pair(post, :PaymentDesc, options[:description] || '', required: true)
106
+ add_pair(post, :CompanyName, options[:company_name] || '', required: true)
107
+ end
108
+
109
+ def add_payment(post, payment)
110
+ if payment.is_a?(Check)
111
+ add_echeck(post, payment)
112
+ else
113
+ add_credit_card(post, payment)
114
+ end
51
115
  end
52
116
 
53
- def add_credit_card(post, credit_card)
54
- add_pair(post, :CardHolderName, credit_card.name, :required => true)
55
- add_pair(post, :CardNumber, credit_card.number, :required => true)
117
+ def add_credit_card(post, payment)
118
+ add_pair(post, :CardHolderName, payment.name, required: true)
119
+ add_pair(post, :CardNumber, payment.number, required: true)
120
+ add_pair(post, :Expiration, expdate(payment), required: true)
121
+ add_pair(post, :CVV2, payment.verification_value, required: true)
122
+ end
123
+
124
+ def add_echeck(post, payment)
125
+ add_pair(post, :TransRoute, payment.routing_number, required: true)
126
+ add_pair(post, :BankAccountNo, payment.account_number, required: true)
127
+ add_pair(post, :BankAccountType, add_or_use_default(payment.account_type, 'Checking'), required: true)
128
+ add_pair(post, :CheckType, add_or_use_default(payment.account_holder_type, 'Personal'), required: true)
129
+ add_pair(post, :Name, payment.name, required: true)
130
+ add_pair(post, :ProcessDate, Time.now.strftime('%m%d%y'), required: true)
131
+ add_pair(post, :Description, '', required: true)
132
+ end
56
133
 
57
- add_pair(post, :Expiration, expdate(credit_card), :required => true)
58
- add_pair(post, :CVV2, credit_card.verification_value)
134
+ def add_or_use_default(payment_data, default_value)
135
+ return payment_data.capitalize if payment_data
136
+ return default_value
59
137
  end
60
138
 
61
- def add_unused_fields(post)
62
- UNUSED_FIELDS.each do |f|
63
- post[f] = ""
139
+ def add_unused_fields(action, post)
140
+ return unless action == :purchase
141
+
142
+ UNUSED_CREDIT_CARD_FIELDS.each do |f|
143
+ post[f] = ''
64
144
  end
65
145
  end
66
146
 
@@ -75,7 +155,7 @@ module ActiveMerchant #:nodoc:
75
155
  response = {}
76
156
 
77
157
  xml = REXML::Document.new(data)
78
- root = REXML::XPath.first(xml, "//CCSaleDebitResponse")
158
+ root = REXML::XPath.first(xml, '*')
79
159
 
80
160
  if root.nil?
81
161
  response[:message] = data.to_s.strip
@@ -88,17 +168,42 @@ module ActiveMerchant #:nodoc:
88
168
  response
89
169
  end
90
170
 
91
- def commit(params)
92
- response = parse( ssl_post(self.live_url, post_data(params)) )
93
-
94
- Response.new(response[:status] == "Authorized", message_from(response), response,
171
+ def commit(action, params)
172
+ response = parse(ssl_post(url(action), post_data(action, params)))
173
+ Response.new(
174
+ success_from(response),
175
+ message_from(response),
176
+ response,
95
177
  :test => test?,
96
- :authorization => response[:trans_id],
178
+ :authorization => authorization_from(response),
97
179
  :avs_result => { :code => response[:avs_code] },
98
180
  :cvv_result => response[:cvv2_code]
99
181
  )
100
182
  end
101
183
 
184
+ def authorization_from(response)
185
+ if response[:status] == 'APPROVED'
186
+ "#{response[:trans_id]}|check"
187
+ else
188
+ "#{response[:trans_id]}|creditcard"
189
+ end
190
+ end
191
+
192
+ def success_from(response)
193
+ case response[:status]
194
+ when 'Authorized'
195
+ true
196
+ when 'Voided'
197
+ true
198
+ when 'APPROVED'
199
+ true
200
+ when 'VOIDED'
201
+ true
202
+ else
203
+ false
204
+ end
205
+ end
206
+
102
207
  def message_from(response)
103
208
  case response[:message]
104
209
  when 'Call Voice Center'
@@ -108,19 +213,27 @@ module ActiveMerchant #:nodoc:
108
213
  end
109
214
  end
110
215
 
111
- def post_data(params = {})
112
- add_unused_fields(params)
216
+ def post_data(action, params = {})
217
+ add_unused_fields(action, params)
113
218
  params[:MerchantID] = @options[:login]
114
219
  params[:RegKey] = @options[:password]
115
220
 
116
- request = params.collect { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join("&")
221
+ request = params.collect { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join('&')
117
222
  request
118
223
  end
119
224
 
120
225
  def add_pair(post, key, value, options = {})
121
226
  post[key] = value if !value.blank? || options[:required]
122
227
  end
228
+
229
+ def url(action)
230
+ base_url = test? ? test_url : live_url
231
+ "#{base_url}/#{ENDPOINTS[action]}/#{ACTIONS[action]}"
232
+ end
233
+
234
+ def split_authorization(authorization)
235
+ authorization.split('|')
236
+ end
123
237
  end
124
238
  end
125
239
  end
126
-