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,437 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ class JetpayV2Gateway < Gateway
4
+ self.test_url = 'https://test1.jetpay.com/jetpay'
5
+ self.live_url = 'https://gateway20.jetpay.com/jetpay'
6
+
7
+ self.money_format = :cents
8
+ self.default_currency = 'USD'
9
+ self.supported_countries = ['US', 'CA']
10
+ self.supported_cardtypes = [:visa, :master, :american_express, :discover]
11
+
12
+ self.homepage_url = 'http://www.jetpay.com'
13
+ self.display_name = 'JetPay'
14
+
15
+ API_VERSION = '2.2'
16
+
17
+ ACTION_CODE_MESSAGES = {
18
+ '000' => 'Approved.',
19
+ '001' => 'Refer to card issuer.',
20
+ '002' => 'Refer to card issuer, special condition.',
21
+ '003' => 'Invalid merchant or service provider.',
22
+ '004' => 'Pick up card.',
23
+ '005' => 'Do not honor.',
24
+ '006' => 'Error.',
25
+ '007' => 'Pick up card, special condition.',
26
+ '008' => 'Honor with ID (Show ID).',
27
+ '010' => 'Partial approval.',
28
+ '011' => 'VIP approval.',
29
+ '012' => 'Invalid transaction.',
30
+ '013' => 'Invalid amount or exceeds maximum for card program.',
31
+ '014' => 'Invalid account number (no such number).',
32
+ '015' => 'No such issuer.',
33
+ '019' => 'Re-enter Transaction.',
34
+ '021' => 'No action taken (unable to back out prior transaction).',
35
+ '025' => 'Transaction Not Found.',
36
+ '027' => 'File update field edit error.',
37
+ '028' => 'File is temporarily unavailable.',
38
+ '030' => 'Format error.',
39
+ '039' => 'No credit account.',
40
+ '041' => 'Pick up card (lost card).',
41
+ '043' => 'Pick up card (stolen card).',
42
+ '051' => 'Insufficient funds.',
43
+ '052' => 'No checking account.',
44
+ '053' => 'No savings account.',
45
+ '054' => 'Expired Card.',
46
+ '055' => 'Incorrect PIN.',
47
+ '057' => 'Transaction not permitted to cardholder.',
48
+ '058' => 'Transaction not allowed at terminal.',
49
+ '061' => 'Exceeds withdrawal limit.',
50
+ '062' => 'Restricted card (eg, Country Exclusion).',
51
+ '063' => 'Security violation.',
52
+ '065' => 'Activity count limit exceeded.',
53
+ '068' => 'Response late.',
54
+ '070' => 'Contact card issuer.',
55
+ '071' => 'PIN not changed.',
56
+ '075' => 'Allowable number of PIN-entry tries exceeded.',
57
+ '076' => 'Unable to locate previous message (no matching retrieval reference number).',
58
+ '077' => 'Repeat or reversal data are inconsistent with original message.',
59
+ '078' => 'Blocked (first use), or non-existent account.',
60
+ '079' => 'Key exchange validation failed.',
61
+ '080' => 'Credit issuer unavailable or invalid date.',
62
+ '081' => 'PIN cryptographic error found.',
63
+ '082' => 'Negative online CVV results.',
64
+ '084' => 'Invalid auth life cycle.',
65
+ '085' => 'No reason to decline - CVV or AVS approved.',
66
+ '086' => 'Cannot verify PIN.',
67
+ '087' => 'Cashback not allowed.',
68
+ '089' => 'Issuer Down.',
69
+ '091' => 'Issuer Down.',
70
+ '092' => 'Unable to route transaction.',
71
+ '093' => 'Transaction cannot be completed - violation of law.',
72
+ '094' => 'Duplicate transmission.',
73
+ '096' => 'System error.',
74
+ '100' => 'Deny.',
75
+ '101' => 'Expired Card.',
76
+ '103' => 'Deny - Invalid manual Entry 4DBC.',
77
+ '104' => 'Deny - New card issued.',
78
+ '105' => 'Deny - Account Cancelled.',
79
+ '106' => 'Exceeded PIN Attempts.',
80
+ '107' => 'Please Call Issuer.',
81
+ '109' => 'Invalid merchant.',
82
+ '110' => 'Invalid amount.',
83
+ '111' => 'Invalid account.',
84
+ '115' => 'Service not permitted.',
85
+ '117' => 'Invalid PIN.',
86
+ '119' => 'Card member not enrolled.',
87
+ '122' => 'Invalid card (CID) security code.',
88
+ '125' => 'Invalid effective date.',
89
+ '181' => 'Format error.',
90
+ '182' => 'Please wait.',
91
+ '183' => 'Invalid currency code.',
92
+ '187' => 'Deny - new card issued.',
93
+ '188' => 'Deny - Expiration date required.',
94
+ '189' => 'Deny - Cancelled or Closed Merchant/SE.',
95
+ '200' => 'Deny - Pick up card.',
96
+ '400' => 'Reversal accepted.',
97
+ '601' => 'Reject - EMV Chip Declined Transaction.',
98
+ '602' => 'Reject - Suspected Fraud.',
99
+ '603' => 'Reject - Communications Error.',
100
+ '604' => 'Reject - Insufficient Approval.',
101
+ '750' => 'Velocity Check Fail.',
102
+ '899' => 'Misc Decline.',
103
+ '900' => 'Invalid Message Type.',
104
+ '901' => 'Invalid Merchant ID.',
105
+ '903' => 'Debit not supported.',
106
+ '904' => 'Private label not supported.',
107
+ '905' => 'Invalid card type.',
108
+ '906' => 'Unit not active.',
109
+ '908' => 'Manual card entry invalid.',
110
+ '909' => 'Invalid track information.',
111
+ '911' => 'Master merchant not found.',
112
+ '912' => 'Invalid card format.',
113
+ '913' => 'Invalid card type.',
114
+ '914' => 'Invalid card length.',
115
+ '917' => 'Expired card.',
116
+ '919' => 'Invalid entry type.',
117
+ '920' => 'Invalid amount.',
118
+ '921' => 'Invalid messge format.',
119
+ '923' => 'Invalid ABA.',
120
+ '924' => 'Invalid DDA.',
121
+ '925' => 'Invalid TID.',
122
+ '926' => 'Invalid Password.',
123
+ '930' => 'Invalid zipcode.',
124
+ '931' => 'Invalid Address.',
125
+ '932' => 'Invalid ZIP and Address.',
126
+ '933' => 'Invalid CVV2.',
127
+ '934' => 'Program Not Allowed.',
128
+ '935' => 'Invalid Device/App.',
129
+ '940' => 'Record Not Found.',
130
+ '941' => 'Merchant ID error.',
131
+ '942' => 'Refund Not Allowed.',
132
+ '943' => 'Refund denied.',
133
+ '955' => 'Invalid PIN block.',
134
+ '956' => 'Invalid KSN.',
135
+ '958' => 'Bad Status.',
136
+ '959' => 'Seek Record limit exceeded.',
137
+ '960' => 'Internal Key Database Error.',
138
+ '961' => 'TRANS not Supported. Cash Disbursement required a specific MCC.',
139
+ '962' => 'Invalid PIN key (Unknown KSN).',
140
+ '981' => 'Invalid AVS.',
141
+ '987' => 'Issuer Unavailable.',
142
+ '988' => 'System error SD.',
143
+ '989' => 'Database Error.',
144
+ '992' => 'Transaction Timeout.',
145
+ '996' => 'Bad Terminal ID.',
146
+ '997' => 'Message rejected by association.',
147
+ '999' => 'Communication failure',
148
+ nil => 'No response returned (missing credentials?).'
149
+ }
150
+
151
+ def initialize(options = {})
152
+ requires!(options, :login)
153
+ super
154
+ end
155
+
156
+ def purchase(money, payment, options = {})
157
+ commit(money, build_sale_request(money, payment, options))
158
+ end
159
+
160
+ def authorize(money, payment, options = {})
161
+ commit(money, build_authonly_request(money, payment, options))
162
+ end
163
+
164
+ def capture(money, reference, options = {})
165
+ transaction_id, _, _, token = reference.split(';')
166
+ commit(money, build_capture_request(money, transaction_id, options), token)
167
+ end
168
+
169
+ def void(reference, options = {})
170
+ transaction_id, _, amount, token = reference.split(';')
171
+ commit(amount.to_i, build_void_request(amount.to_i, transaction_id, options), token)
172
+ end
173
+
174
+ def credit(money, payment, options = {})
175
+ commit(money, build_credit_request(money, nil, payment, options))
176
+ end
177
+
178
+ def refund(money, reference, options = {})
179
+ transaction_id, _, _, token = reference.split(';')
180
+ commit(money, build_credit_request(money, transaction_id, token, options), token)
181
+ end
182
+
183
+ def verify(credit_card, options = {})
184
+ authorize(0, credit_card, options)
185
+ end
186
+
187
+ def store(credit_card, options = {})
188
+ commit(nil, build_store_request(credit_card, options))
189
+ end
190
+
191
+ def supports_scrubbing
192
+ true
193
+ end
194
+
195
+ def scrub(transcript)
196
+ transcript.
197
+ gsub(%r((Authorization: Basic )\w+), '\1[FILTERED]').
198
+ gsub(%r((>)\d+(</CardNum>)), '\1[FILTERED]\2').
199
+ gsub(%r((<CVV2>)\d+(</CVV2>)), '\1[FILTERED]\2')
200
+ end
201
+
202
+ private
203
+
204
+ def build_xml_request(transaction_type, options = {}, transaction_id = nil, &block)
205
+ xml = Builder::XmlMarkup.new
206
+ xml.tag! 'JetPay', 'Version' => API_VERSION do
207
+ # Basic values needed for any request
208
+ xml.tag! 'TerminalID', @options[:login]
209
+ xml.tag! 'TransactionType', transaction_type
210
+ xml.tag! 'TransactionID', transaction_id.nil? ? generate_unique_id.slice(0, 18) : transaction_id
211
+ xml.tag! 'Origin', options[:origin] || 'INTERNET'
212
+ xml.tag! 'IndustryInfo', 'Type' => options[:industry_info] || 'ECOMMERCE'
213
+ xml.tag! 'Application', (options[:application] || 'n/a'), {'Version' => options[:application_version] || '1.0'}
214
+ xml.tag! 'Device', (options[:device] || 'n/a'), {'Version' => options[:device_version] || '1.0'}
215
+ xml.tag! 'Library', 'VirtPOS SDK', 'Version' => '1.5'
216
+ xml.tag! 'Gateway', 'JetPay'
217
+ xml.tag! 'DeveloperID', options[:developer_id] || 'n/a'
218
+
219
+ if block_given?
220
+ yield xml
221
+ else
222
+ xml.target!
223
+ end
224
+ end
225
+ end
226
+
227
+ def build_sale_request(money, payment, options)
228
+ build_xml_request('SALE', options) do |xml|
229
+ add_payment(xml, payment)
230
+ add_addresses(xml, options)
231
+ add_customer_data(xml, options)
232
+ add_invoice_data(xml, options)
233
+ add_user_defined_fields(xml, options)
234
+ xml.tag! 'TotalAmount', amount(money)
235
+
236
+ xml.target!
237
+ end
238
+ end
239
+
240
+ def build_authonly_request(money, payment, options)
241
+ build_xml_request('AUTHONLY', options) do |xml|
242
+ add_payment(xml, payment)
243
+ add_addresses(xml, options)
244
+ add_customer_data(xml, options)
245
+ add_invoice_data(xml, options)
246
+ add_user_defined_fields(xml, options)
247
+ xml.tag! 'TotalAmount', amount(money)
248
+
249
+ xml.target!
250
+ end
251
+ end
252
+
253
+ def build_capture_request(money, transaction_id, options)
254
+ build_xml_request('CAPT', options, transaction_id) do |xml|
255
+ add_invoice_data(xml, options)
256
+ add_purchase_order(xml, options)
257
+ add_user_defined_fields(xml, options)
258
+ xml.tag! 'TotalAmount', amount(money)
259
+
260
+ xml.target!
261
+ end
262
+ end
263
+
264
+ def build_void_request(money, transaction_id, options)
265
+ build_xml_request('VOID', options, transaction_id) do |xml|
266
+ xml.tag! 'TotalAmount', amount(money)
267
+ xml.target!
268
+ end
269
+ end
270
+
271
+ def build_credit_request(money, transaction_id, payment, options)
272
+ build_xml_request('CREDIT', options, transaction_id) do |xml|
273
+ add_payment(xml, payment)
274
+ add_invoice_data(xml, options)
275
+ add_addresses(xml, options)
276
+ add_customer_data(xml, options)
277
+ add_user_defined_fields(xml, options)
278
+ xml.tag! 'TotalAmount', amount(money)
279
+
280
+ xml.target!
281
+ end
282
+ end
283
+
284
+ def build_store_request(credit_card, options)
285
+ build_xml_request('TOKENIZE', options) do |xml|
286
+ add_payment(xml, credit_card)
287
+ add_addresses(xml, options)
288
+ add_customer_data(xml, options)
289
+
290
+ xml.target!
291
+ end
292
+ end
293
+
294
+ def commit(money, request, token = nil)
295
+ response = parse(ssl_post(url, request))
296
+
297
+ success = success?(response)
298
+ Response.new(success,
299
+ success ? 'APPROVED' : message_from(response),
300
+ response,
301
+ :test => test?,
302
+ :authorization => authorization_from(response, money, token),
303
+ :avs_result => AVSResult.new(:code => response[:avs]),
304
+ :cvv_result => CVVResult.new(response[:cvv2]),
305
+ :error_code => success ? nil : error_code_from(response)
306
+ )
307
+ end
308
+
309
+ def url
310
+ test? ? test_url : live_url
311
+ end
312
+
313
+ def parse(body)
314
+ return {} if body.blank?
315
+
316
+ xml = REXML::Document.new(body)
317
+
318
+ response = {}
319
+ xml.root.elements.to_a.each do |node|
320
+ parse_element(response, node)
321
+ end
322
+ response
323
+ end
324
+
325
+ def parse_element(response, node)
326
+ if node.has_elements?
327
+ node.elements.each { |element| parse_element(response, element) }
328
+ else
329
+ response[node.name.underscore.to_sym] = node.text
330
+ end
331
+ end
332
+
333
+ def format_exp(value)
334
+ format(value, :two_digits)
335
+ end
336
+
337
+ def success?(response)
338
+ response[:action_code] == '000'
339
+ end
340
+
341
+ def message_from(response)
342
+ ACTION_CODE_MESSAGES[response[:action_code]]
343
+ end
344
+
345
+ def authorization_from(response, money, previous_token)
346
+ original_amount = amount(money) if money
347
+ [ response[:transaction_id], response[:approval], original_amount, (response[:token] || previous_token)].join(';')
348
+ end
349
+
350
+ def error_code_from(response)
351
+ response[:action_code]
352
+ end
353
+
354
+ def add_payment(xml, payment)
355
+ return unless payment
356
+
357
+ if payment.is_a? String
358
+ token = payment
359
+ _, _, _, token = payment.split(';') if payment.include? ';'
360
+ xml.tag! 'Token', token if token
361
+ else
362
+ add_credit_card(xml, payment)
363
+ end
364
+ end
365
+
366
+ def add_credit_card(xml, credit_card)
367
+ xml.tag! 'CardNum', credit_card.number, 'CardPresent' => false, 'Tokenize' => true
368
+ xml.tag! 'CardExpMonth', format_exp(credit_card.month)
369
+ xml.tag! 'CardExpYear', format_exp(credit_card.year)
370
+
371
+ if credit_card.first_name || credit_card.last_name
372
+ xml.tag! 'CardName', [credit_card.first_name, credit_card.last_name].compact.join(' ')
373
+ end
374
+
375
+ unless credit_card.verification_value.nil? || (credit_card.verification_value.length == 0)
376
+ xml.tag! 'CVV2', credit_card.verification_value
377
+ end
378
+ end
379
+
380
+ def add_addresses(xml, options)
381
+ if billing_address = options[:billing_address] || options[:address]
382
+ xml.tag! 'Billing' do
383
+ xml.tag! 'Address', [billing_address[:address1], billing_address[:address2]].compact.join(' ')
384
+ xml.tag! 'City', billing_address[:city]
385
+ xml.tag! 'StateProv', billing_address[:state]
386
+ xml.tag! 'PostalCode', billing_address[:zip]
387
+ xml.tag! 'Country', lookup_country_code(billing_address[:country])
388
+ xml.tag! 'Phone', billing_address[:phone]
389
+ xml.tag! 'Email', options[:email] if options[:email]
390
+ end
391
+ end
392
+
393
+ if shipping_address = options[:shipping_address]
394
+ xml.tag! 'Shipping' do
395
+ xml.tag! 'Name', shipping_address[:name]
396
+ xml.tag! 'Address', [shipping_address[:address1], shipping_address[:address2]].compact.join(' ')
397
+ xml.tag! 'City', shipping_address[:city]
398
+ xml.tag! 'StateProv', shipping_address[:state]
399
+ xml.tag! 'PostalCode', shipping_address[:zip]
400
+ xml.tag! 'Country', lookup_country_code(shipping_address[:country])
401
+ xml.tag! 'Phone', shipping_address[:phone]
402
+ end
403
+ end
404
+ end
405
+
406
+ def add_customer_data(xml, options)
407
+ xml.tag! 'UserIPAddress', options[:ip] if options[:ip]
408
+ end
409
+
410
+ def add_invoice_data(xml, options)
411
+ xml.tag! 'OrderNumber', options[:order_id] if options[:order_id]
412
+ if tax_amount = options[:tax_amount]
413
+ xml.tag! 'TaxAmount', tax_amount, {'ExemptInd' => options[:tax_exempt] || 'false'}
414
+ end
415
+ end
416
+
417
+ def add_purchase_order(xml, options)
418
+ if purchase_order = options[:purchase_order]
419
+ xml.tag! 'Billing' do
420
+ xml.tag! 'CustomerPO', purchase_order
421
+ end
422
+ end
423
+ end
424
+
425
+ def add_user_defined_fields(xml, options)
426
+ xml.tag! 'UDField1', options[:ud_field_1] if options[:ud_field_1]
427
+ xml.tag! 'UDField2', options[:ud_field_2] if options[:ud_field_2]
428
+ xml.tag! 'UDField3', options[:ud_field_3] if options[:ud_field_3]
429
+ end
430
+
431
+ def lookup_country_code(code)
432
+ country = Country.find(code) rescue nil
433
+ country&.code(:alpha3)
434
+ end
435
+ end
436
+ end
437
+ end
@@ -0,0 +1,115 @@
1
+ require 'json'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ class KomojuGateway < Gateway
6
+ self.test_url = 'https://komoju.com/api/v1'
7
+ self.live_url = 'https://komoju.com/api/v1'
8
+ self.supported_countries = ['JP']
9
+ self.default_currency = 'JPY'
10
+ self.money_format = :cents
11
+ self.homepage_url = 'https://www.komoju.com/'
12
+ self.display_name = 'Komoju'
13
+ self.supported_cardtypes = [:visa, :master, :american_express, :jcb]
14
+
15
+ STANDARD_ERROR_CODE_MAPPING = {
16
+ 'bad_verification_value' => 'incorrect_cvc',
17
+ 'card_expired' => 'expired_card',
18
+ 'card_declined' => 'card_declined',
19
+ 'invalid_number' => 'invalid_number'
20
+ }
21
+
22
+ def initialize(options = {})
23
+ requires!(options, :login)
24
+ super
25
+ end
26
+
27
+ def purchase(money, payment, options = {})
28
+ post = {}
29
+ post[:amount] = amount(money)
30
+ post[:description] = options[:description]
31
+ add_payment_details(post, payment, options)
32
+ post[:currency] = options[:currency] || default_currency
33
+ post[:external_order_num] = options[:order_id] if options[:order_id]
34
+ post[:tax] = options[:tax] if options[:tax]
35
+ add_fraud_details(post, options)
36
+
37
+ commit('/payments', post)
38
+ end
39
+
40
+ def refund(money, identification, options = {})
41
+ commit("/payments/#{identification}/refund", {})
42
+ end
43
+
44
+ private
45
+
46
+ def add_payment_details(post, payment, options)
47
+ details = {}
48
+
49
+ details[:type] = 'credit_card'
50
+ details[:number] = payment.number
51
+ details[:month] = payment.month
52
+ details[:year] = payment.year
53
+ details[:verification_value] = payment.verification_value
54
+ details[:given_name] = payment.first_name
55
+ details[:family_name] = payment.last_name
56
+ details[:email] = options[:email] if options[:email]
57
+
58
+ post[:payment_details] = details
59
+ end
60
+
61
+ def add_fraud_details(post, options)
62
+ details = {}
63
+
64
+ details[:customer_ip] = options[:ip] if options[:ip]
65
+ details[:customer_email] = options[:email] if options[:email]
66
+ details[:browser_language] = options[:browser_language] if options[:browser_language]
67
+ details[:browser_user_agent] = options[:browser_user_agent] if options[:browser_user_agent]
68
+
69
+ post[:fraud_details] = details unless details.empty?
70
+ end
71
+
72
+ def api_request(path, data)
73
+ raw_response = nil
74
+ begin
75
+ raw_response = ssl_post("#{url}#{path}", data, headers)
76
+ rescue ResponseError => e
77
+ raw_response = e.response.body
78
+ end
79
+
80
+ JSON.parse(raw_response)
81
+ end
82
+
83
+ def commit(path, params)
84
+ response = api_request(path, params.to_json)
85
+ success = !response.key?('error')
86
+ message = (success ? 'Transaction succeeded' : response['error']['message'])
87
+ Response.new(
88
+ success,
89
+ message,
90
+ response,
91
+ test: test?,
92
+ error_code: (success ? nil : error_code(response['error']['code'])),
93
+ authorization: (success ? response['id'] : nil)
94
+ )
95
+ end
96
+
97
+ def error_code(code)
98
+ STANDARD_ERROR_CODE_MAPPING[code] || code
99
+ end
100
+
101
+ def url
102
+ test? ? self.test_url : self.live_url
103
+ end
104
+
105
+ def headers
106
+ {
107
+ 'Authorization' => 'Basic ' + Base64.encode64(@options[:login].to_s + ':').strip,
108
+ 'Accept' => 'application/json',
109
+ 'Content-Type' => 'application/json',
110
+ 'User-Agent' => "Komoju/v1 ActiveMerchantBindings/#{ActiveMerchant::VERSION}"
111
+ }
112
+ end
113
+ end
114
+ end
115
+ end