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
@@ -1,365 +1,25 @@
1
1
  require 'rexml/document'
2
2
  require 'digest/md5'
3
3
 
4
+ require 'active_merchant/billing/gateways/quickpay/quickpay_v10'
5
+ require 'active_merchant/billing/gateways/quickpay/quickpay_v4to7'
6
+
4
7
  module ActiveMerchant #:nodoc:
5
8
  module Billing #:nodoc:
6
9
  class QuickpayGateway < Gateway
7
- self.live_url = self.test_url = 'https://secure.quickpay.dk/api'
8
-
9
- self.default_currency = 'DKK'
10
- self.money_format = :cents
11
- self.supported_cardtypes = [:dankort, :forbrugsforeningen, :visa, :master, :american_express, :diners_club, :jcb, :maestro]
12
- self.supported_countries = ['DK', 'SE']
13
- self.homepage_url = 'http://quickpay.dk/'
14
- self.display_name = 'Quickpay'
15
-
16
- MD5_CHECK_FIELDS = {
17
- 3 => {
18
- :authorize => %w(protocol msgtype merchant ordernumber amount
19
- currency autocapture cardnumber expirationdate
20
- cvd cardtypelock testmode),
21
-
22
- :capture => %w(protocol msgtype merchant amount transaction),
23
-
24
- :cancel => %w(protocol msgtype merchant transaction),
25
-
26
- :refund => %w(protocol msgtype merchant amount transaction),
27
-
28
- :subscribe => %w(protocol msgtype merchant ordernumber cardnumber
29
- expirationdate cvd cardtypelock description testmode),
30
-
31
- :recurring => %w(protocol msgtype merchant ordernumber amount
32
- currency autocapture transaction),
33
-
34
- :status => %w(protocol msgtype merchant transaction),
35
-
36
- :chstatus => %w(protocol msgtype merchant)
37
- },
38
-
39
- 4 => {
40
- :authorize => %w(protocol msgtype merchant ordernumber amount
41
- currency autocapture cardnumber expirationdate cvd
42
- cardtypelock testmode fraud_remote_addr
43
- fraud_http_accept fraud_http_accept_language
44
- fraud_http_accept_encoding fraud_http_accept_charset
45
- fraud_http_referer fraud_http_user_agent apikey),
46
-
47
- :capture => %w(protocol msgtype merchant amount transaction apikey),
48
-
49
- :cancel => %w(protocol msgtype merchant transaction apikey),
50
-
51
- :refund => %w(protocol msgtype merchant amount transaction apikey),
52
-
53
- :subscribe => %w(protocol msgtype merchant ordernumber cardnumber
54
- expirationdate cvd cardtypelock description testmode
55
- fraud_remote_addr fraud_http_accept fraud_http_accept_language
56
- fraud_http_accept_encoding fraud_http_accept_charset
57
- fraud_http_referer fraud_http_user_agent apikey),
58
-
59
- :recurring => %w(protocol msgtype merchant ordernumber amount currency
60
- autocapture transaction apikey),
61
-
62
- :status => %w(protocol msgtype merchant transaction apikey),
63
-
64
- :chstatus => %w(protocol msgtype merchant apikey)
65
- },
66
-
67
- 5 => {
68
- :authorize => %w(protocol msgtype merchant ordernumber amount
69
- currency autocapture cardnumber expirationdate cvd
70
- cardtypelock testmode fraud_remote_addr
71
- fraud_http_accept fraud_http_accept_language
72
- fraud_http_accept_encoding fraud_http_accept_charset
73
- fraud_http_referer fraud_http_user_agent apikey),
74
-
75
- :capture => %w(protocol msgtype merchant amount transaction apikey),
76
-
77
- :cancel => %w(protocol msgtype merchant transaction apikey),
78
-
79
- :refund => %w(protocol msgtype merchant amount transaction apikey),
80
-
81
- :subscribe => %w(protocol msgtype merchant ordernumber cardnumber
82
- expirationdate cvd cardtypelock description testmode
83
- fraud_remote_addr fraud_http_accept fraud_http_accept_language
84
- fraud_http_accept_encoding fraud_http_accept_charset
85
- fraud_http_referer fraud_http_user_agent apikey),
86
-
87
- :recurring => %w(protocol msgtype merchant ordernumber amount currency
88
- autocapture transaction apikey),
89
-
90
- :status => %w(protocol msgtype merchant transaction apikey),
91
-
92
- :chstatus => %w(protocol msgtype merchant apikey)
93
- },
94
-
95
- 6 => {
96
- :authorize => %w(protocol msgtype merchant ordernumber amount
97
- currency autocapture cardnumber expirationdate cvd
98
- cardtypelock testmode fraud_remote_addr
99
- fraud_http_accept fraud_http_accept_language
100
- fraud_http_accept_encoding fraud_http_accept_charset
101
- fraud_http_referer fraud_http_user_agent apikey),
102
-
103
- :capture => %w(protocol msgtype merchant amount transaction
104
- apikey),
105
-
106
- :cancel => %w(protocol msgtype merchant transaction apikey),
107
-
108
- :refund => %w(protocol msgtype merchant amount transaction apikey),
10
+ self.abstract_class = true
109
11
 
110
- :subscribe => %w(protocol msgtype merchant ordernumber cardnumber
111
- expirationdate cvd cardtypelock description testmode
112
- fraud_remote_addr fraud_http_accept fraud_http_accept_language
113
- fraud_http_accept_encoding fraud_http_accept_charset
114
- fraud_http_referer fraud_http_user_agent apikey),
12
+ def self.new(options = {})
13
+ options.fetch(:login) { raise ArgumentError.new('Missing required parameter: login') }
115
14
 
116
- :recurring => %w(protocol msgtype merchant ordernumber amount currency
117
- autocapture transaction apikey),
118
-
119
- :status => %w(protocol msgtype merchant transaction apikey),
120
-
121
- :chstatus => %w(protocol msgtype merchant apikey)
122
- },
123
-
124
- 7 => {
125
- :authorize => %w(protocol msgtype merchant ordernumber amount
126
- currency autocapture cardnumber expirationdate cvd
127
- acquirer cardtypelock testmode fraud_remote_addr
128
- fraud_http_accept fraud_http_accept_language
129
- fraud_http_accept_encoding fraud_http_accept_charset
130
- fraud_http_referer fraud_http_user_agent apikey),
131
-
132
- :capture => %w(protocol msgtype merchant amount transaction
133
- apikey),
134
-
135
- :cancel => %w(protocol msgtype merchant transaction apikey),
136
-
137
- :refund => %w(protocol msgtype merchant amount transaction apikey),
138
-
139
- :subscribe => %w(protocol msgtype merchant ordernumber cardnumber
140
- expirationdate cvd acquirer cardtypelock description testmode
141
- fraud_remote_addr fraud_http_accept fraud_http_accept_language
142
- fraud_http_accept_encoding fraud_http_accept_charset
143
- fraud_http_referer fraud_http_user_agent apikey),
144
-
145
- :recurring => %w(protocol msgtype merchant ordernumber amount currency
146
- autocapture transaction apikey),
147
-
148
- :status => %w(protocol msgtype merchant transaction apikey),
149
-
150
- :chstatus => %w(protocol msgtype merchant apikey)
151
- }
152
- }
153
-
154
- APPROVED = '000'
155
-
156
- # The login is the QuickpayId
157
- # The password is the md5checkword from the Quickpay manager
158
- # To use the API-key from the Quickpay manager, specify :api-key
159
- # Using the API-key, requires that you use version 4+. Specify :version => 4/5/6/7 in options.
160
- def initialize(options = {})
161
- requires!(options, :login, :password)
162
- @protocol = options.delete(:version) || 7 # default to protocol version 7
163
- super
164
- end
165
-
166
- def authorize(money, credit_card_or_reference, options = {})
167
- post = {}
168
-
169
- action = recurring_or_authorize(credit_card_or_reference)
170
-
171
- add_amount(post, money, options)
172
- add_invoice(post, options)
173
- add_creditcard_or_reference(post, credit_card_or_reference, options)
174
- add_autocapture(post, false)
175
- add_fraud_parameters(post, options) if action.eql?(:authorize)
176
- add_testmode(post)
177
-
178
- commit(action, post)
179
- end
180
-
181
- def purchase(money, credit_card_or_reference, options = {})
182
- post = {}
183
-
184
- action = recurring_or_authorize(credit_card_or_reference)
185
-
186
- add_amount(post, money, options)
187
- add_creditcard_or_reference(post, credit_card_or_reference, options)
188
- add_invoice(post, options)
189
- add_fraud_parameters(post, options) if action.eql?(:authorize)
190
- add_autocapture(post, true)
191
-
192
- commit(action, post)
193
- end
194
-
195
- def capture(money, authorization, options = {})
196
- post = {}
197
-
198
- add_reference(post, authorization)
199
- add_amount_without_currency(post, money)
200
- commit(:capture, post)
201
- end
202
-
203
- def void(identification, options = {})
204
- post = {}
205
-
206
- add_reference(post, identification)
207
-
208
- commit(:cancel, post)
209
- end
210
-
211
- def refund(money, identification, options = {})
212
- post = {}
213
-
214
- add_amount_without_currency(post, money)
215
- add_reference(post, identification)
216
-
217
- commit(:refund, post)
218
- end
219
-
220
- def credit(money, identification, options = {})
221
- deprecated CREDIT_DEPRECATION_MESSAGE
222
- refund(money, identification, options)
223
- end
224
-
225
- def store(creditcard, options = {})
226
- post = {}
227
-
228
- add_creditcard(post, creditcard, options)
229
- add_invoice(post, options)
230
- add_description(post, options)
231
- add_fraud_parameters(post, options)
232
- add_testmode(post)
233
-
234
- commit(:subscribe, post)
235
- end
236
-
237
- private
238
-
239
- def add_amount(post, money, options = {})
240
- post[:amount] = amount(money)
241
- post[:currency] = options[:currency] || currency(money)
242
- end
243
-
244
- def add_amount_without_currency(post, money, options = {})
245
- post[:amount] = amount(money)
246
- end
247
-
248
- def add_invoice(post, options)
249
- post[:ordernumber] = format_order_number(options[:order_id])
250
- end
251
-
252
- def add_creditcard(post, credit_card, options)
253
- post[:cardnumber] = credit_card.number
254
- post[:cvd] = credit_card.verification_value
255
- post[:expirationdate] = expdate(credit_card)
256
- post[:cardtypelock] = options[:cardtypelock] unless options[:cardtypelock].blank?
257
- post[:acquirer] = options[:acquirer] unless options[:acquirer].blank?
258
- end
259
-
260
- def add_reference(post, identification)
261
- post[:transaction] = identification
262
- end
263
-
264
- def add_creditcard_or_reference(post, credit_card_or_reference, options)
265
- if credit_card_or_reference.is_a?(String)
266
- add_reference(post, credit_card_or_reference)
15
+ version = options[:login].to_i < 10000000 ? 10 : 7
16
+ if version <= 7
17
+ QuickpayV4to7Gateway.new(options)
267
18
  else
268
- add_creditcard(post, credit_card_or_reference, options)
269
- end
270
- end
271
-
272
- def add_autocapture(post, autocapture)
273
- post[:autocapture] = autocapture ? 1 : 0
274
- end
275
-
276
- def recurring_or_authorize(credit_card_or_reference)
277
- credit_card_or_reference.is_a?(String) ? :recurring : :authorize
278
- end
279
-
280
- def add_description(post, options)
281
- post[:description] = options[:description]
282
- end
283
-
284
- def add_testmode(post)
285
- return if post[:transaction].present?
286
- post[:testmode] = test? ? '1' : '0'
287
- end
288
-
289
- def add_fraud_parameters(post, options)
290
- if @protocol >= 4
291
- post[:fraud_remote_addr] = options[:fraud_remote_addr] if options[:fraud_remote_addr]
292
- post[:fraud_http_accept] = options[:fraud_http_accept] if options[:fraud_http_accept]
293
- post[:fraud_http_accept_language] = options[:fraud_http_accept_language] if options[:fraud_http_accept_language]
294
- post[:fraud_http_accept_encoding] = options[:fraud_http_accept_encoding] if options[:fraud_http_accept_encoding]
295
- post[:fraud_http_accept_charset] = options[:fraud_http_accept_charset] if options[:fraud_http_accept_charset]
296
- post[:fraud_http_referer] = options[:fraud_http_referer] if options[:fraud_http_referer]
297
- post[:fraud_http_user_agent] = options[:fraud_http_user_agent] if options[:fraud_http_user_agent]
19
+ QuickpayV10Gateway.new(options)
298
20
  end
299
21
  end
300
22
 
301
- def commit(action, params)
302
- response = parse(ssl_post(self.live_url, post_data(action, params)))
303
-
304
- Response.new(successful?(response), message_from(response), response,
305
- :test => test?,
306
- :authorization => response[:transaction]
307
- )
308
- end
309
-
310
- def successful?(response)
311
- response[:qpstat] == APPROVED
312
- end
313
-
314
- def parse(data)
315
- response = {}
316
-
317
- doc = REXML::Document.new(data)
318
-
319
- doc.root.elements.each do |element|
320
- response[element.name.to_sym] = element.text
321
- end
322
-
323
- response
324
- end
325
-
326
- def message_from(response)
327
- response[:qpstatmsg].to_s
328
- end
329
-
330
- def post_data(action, params = {})
331
- params[:protocol] = @protocol
332
- params[:msgtype] = action.to_s
333
- params[:merchant] = @options[:login]
334
- params[:apikey] = @options[:apikey] if @options[:apikey]
335
- params[:md5check] = generate_check_hash(action, params)
336
-
337
- params.collect { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join("&")
338
- end
339
-
340
- def generate_check_hash(action, params)
341
- string = MD5_CHECK_FIELDS[@protocol][action].collect do |key|
342
- params[key.to_sym]
343
- end.join('')
344
-
345
- # Add the md5checkword
346
- string << @options[:password].to_s
347
-
348
- Digest::MD5.hexdigest(string)
349
- end
350
-
351
- def expdate(credit_card)
352
- year = format(credit_card.year, :two_digits)
353
- month = format(credit_card.month, :two_digits)
354
-
355
- "#{year}#{month}"
356
- end
357
-
358
- # Limited to 20 digits max
359
- def format_order_number(number)
360
- number.to_s.gsub(/[^\w_]/, '').rjust(4, "0")[0...20]
361
- end
362
23
  end
363
24
  end
364
25
  end
365
-
@@ -0,0 +1,236 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ class QvalentGateway < Gateway
4
+ self.display_name = 'Qvalent'
5
+ self.homepage_url = 'https://www.qvalent.com/'
6
+
7
+ self.test_url = 'https://ccapi.client.support.qvalent.com/post/CreditCardAPIReceiver'
8
+ self.live_url = 'https://ccapi.client.qvalent.com/post/CreditCardAPIReceiver'
9
+
10
+ self.supported_countries = ['AU']
11
+ self.default_currency = 'AUD'
12
+ self.money_format = :cents
13
+ self.supported_cardtypes = [:visa, :master, :american_express, :discover, :jcb, :diners]
14
+
15
+ def initialize(options={})
16
+ requires!(options, :username, :password, :merchant, :pem, :pem_password)
17
+ super
18
+ end
19
+
20
+ def purchase(amount, payment_method, options={})
21
+ post = {}
22
+ add_invoice(post, amount, options)
23
+ add_order_number(post, options)
24
+ add_payment_method(post, payment_method)
25
+ add_verification_value(post, payment_method)
26
+ add_customer_data(post, options)
27
+ add_soft_descriptors(post, options)
28
+
29
+ commit('capture', post)
30
+ end
31
+
32
+ def authorize(amount, payment_method, options={})
33
+ post = {}
34
+ add_invoice(post, amount, options)
35
+ add_order_number(post, options)
36
+ add_payment_method(post, payment_method)
37
+ add_verification_value(post, payment_method)
38
+ add_customer_data(post, options)
39
+ add_soft_descriptors(post, options)
40
+
41
+ commit('preauth', post)
42
+ end
43
+
44
+ def capture(amount, authorization, options={})
45
+ post = {}
46
+ add_invoice(post, amount, options)
47
+ add_reference(post, authorization, options)
48
+ add_customer_data(post, options)
49
+ add_soft_descriptors(post, options)
50
+
51
+ commit('captureWithoutAuth', post)
52
+ end
53
+
54
+ def refund(amount, authorization, options={})
55
+ post = {}
56
+ add_invoice(post, amount, options)
57
+ add_reference(post, authorization, options)
58
+ add_customer_data(post, options)
59
+ add_soft_descriptors(post, options)
60
+
61
+ commit('refund', post)
62
+ end
63
+
64
+ # Credit requires the merchant account to be enabled for "Adhoc Refunds"
65
+ def credit(amount, payment_method, options={})
66
+ post = {}
67
+ add_invoice(post, amount, options)
68
+ add_order_number(post, options)
69
+ add_payment_method(post, payment_method)
70
+ add_customer_data(post, options)
71
+ add_soft_descriptors(post, options)
72
+
73
+ commit('refund', post)
74
+ end
75
+
76
+ def void(authorization, options={})
77
+ post = {}
78
+ add_reference(post, authorization, options)
79
+ add_customer_data(post, options)
80
+ add_soft_descriptors(post, options)
81
+
82
+ commit('reversal', post)
83
+ end
84
+
85
+ def store(payment_method, options = {})
86
+ post = {}
87
+ add_payment_method(post, payment_method)
88
+ add_card_reference(post)
89
+
90
+ commit('registerAccount', post)
91
+ end
92
+
93
+ def supports_scrubbing?
94
+ true
95
+ end
96
+
97
+ def scrub(transcript)
98
+ transcript.
99
+ gsub(%r((&?customer.password=)[^&]*), '\1[FILTERED]').
100
+ gsub(%r((&?card.PAN=)[^&]*), '\1[FILTERED]').
101
+ gsub(%r((&?card.CVN=)[^&]*), '\1[FILTERED]')
102
+ end
103
+
104
+ private
105
+
106
+ CURRENCY_CODES = Hash.new { |h, k| raise ArgumentError.new("Unsupported currency: #{k}") }
107
+ CURRENCY_CODES['AUD'] = 'AUD'
108
+ CURRENCY_CODES['INR'] = 'INR'
109
+
110
+ def add_soft_descriptors(post, options)
111
+ post['customer.merchantName'] = options[:customer_merchant_name] if options[:customer_merchant_name]
112
+ post['customer.merchantStreetAddress'] = options[:customer_merchant_street_address] if options[:customer_merchant_street_address]
113
+ post['customer.merchantLocation'] = options[:customer_merchant_location] if options[:customer_merchant_location]
114
+ post['customer.merchantState'] = options[:customer_merchant_state] if options[:customer_merchant_state]
115
+ post['customer.merchantCountry'] = options[:customer_merchant_country] if options[:customer_merchant_country]
116
+ post['customer.merchantPostCode'] = options[:customer_merchant_post_code] if options[:customer_merchant_post_code]
117
+ post['customer.subMerchantId'] = options[:customer_sub_merchant_id] if options[:customer_sub_merchant_id]
118
+ end
119
+
120
+ def add_invoice(post, money, options)
121
+ post['order.amount'] = amount(money)
122
+ post['card.currency'] = CURRENCY_CODES[options[:currency] || currency(money)]
123
+ post['order.ECI'] = options[:eci] || 'SSL'
124
+ end
125
+
126
+ def add_payment_method(post, payment_method)
127
+ post['card.cardHolderName'] = payment_method.name
128
+ post['card.PAN'] = payment_method.number
129
+ post['card.expiryYear'] = format(payment_method.year, :two_digits)
130
+ post['card.expiryMonth'] = format(payment_method.month, :two_digits)
131
+ end
132
+
133
+ def add_verification_value(post, payment_method)
134
+ post['card.CVN'] = payment_method.verification_value
135
+ end
136
+
137
+ def add_card_reference(post)
138
+ post['customer.customerReferenceNumber'] = options[:order_id]
139
+ end
140
+
141
+ def add_reference(post, authorization, options)
142
+ post['customer.originalOrderNumber'] = authorization
143
+ add_order_number(post, options)
144
+ end
145
+
146
+ def add_order_number(post, options)
147
+ post['customer.orderNumber'] = options[:order_id] || SecureRandom.uuid
148
+ end
149
+
150
+ def add_customer_data(post, options)
151
+ post['order.ipAddress'] = options[:ip] || '127.0.0.1'
152
+ post['order.xid'] = options[:xid] if options[:xid]
153
+ post['order.cavv'] = options[:cavv] if options[:cavv]
154
+ end
155
+
156
+ def commit(action, post)
157
+ post['customer.username'] = @options[:username]
158
+ post['customer.password'] = @options[:password]
159
+ post['customer.merchant'] = @options[:merchant]
160
+ post['order.type'] = action
161
+
162
+ data = build_request(post)
163
+ raw = parse(ssl_post(url(action), data, headers))
164
+
165
+ succeeded = success_from(raw['response.responseCode'])
166
+ Response.new(
167
+ succeeded,
168
+ message_from(succeeded, raw),
169
+ raw,
170
+ authorization: raw['response.orderNumber'] || raw['response.customerReferenceNumber'],
171
+ error_code: error_code_from(succeeded, raw),
172
+ test: test?
173
+ )
174
+ end
175
+
176
+ def headers
177
+ {
178
+ 'Content-Type' => 'application/x-www-form-urlencoded'
179
+ }
180
+ end
181
+
182
+ def build_request(post)
183
+ post.to_query + '&message.end'
184
+ end
185
+
186
+ def url(action)
187
+ (test? ? test_url : live_url)
188
+ end
189
+
190
+ def parse(body)
191
+ result = {}
192
+ body.to_s.each_line do |pair|
193
+ result[$1] = $2 if pair.strip =~ /\A([^=]+)=(.+)\Z/im
194
+ end
195
+ result
196
+ end
197
+
198
+ def parse_element(response, node)
199
+ if node.has_elements?
200
+ node.elements.each { |element| parse_element(response, element) }
201
+ else
202
+ response[node.name.underscore.to_sym] = node.text
203
+ end
204
+ end
205
+
206
+ SUCCESS_CODES = %w(00 08 10 11 16 QS QZ)
207
+
208
+ def success_from(response)
209
+ SUCCESS_CODES.include?(response)
210
+ end
211
+
212
+ def message_from(succeeded, response)
213
+ if succeeded
214
+ 'Succeeded'
215
+ else
216
+ response['response.text'] || 'Unable to read error message'
217
+ end
218
+ end
219
+
220
+ STANDARD_ERROR_CODE_MAPPING = {
221
+ '14' => STANDARD_ERROR_CODE[:invalid_number],
222
+ 'QQ' => STANDARD_ERROR_CODE[:invalid_cvc],
223
+ '33' => STANDARD_ERROR_CODE[:expired_card],
224
+ 'NT' => STANDARD_ERROR_CODE[:incorrect_address],
225
+ '12' => STANDARD_ERROR_CODE[:card_declined],
226
+ '06' => STANDARD_ERROR_CODE[:processing_error],
227
+ '01' => STANDARD_ERROR_CODE[:call_issuer],
228
+ '04' => STANDARD_ERROR_CODE[:pickup_card],
229
+ }
230
+
231
+ def error_code_from(succeeded, response)
232
+ succeeded ? nil : STANDARD_ERROR_CODE_MAPPING[response['response.responseCode']]
233
+ end
234
+ end
235
+ end
236
+ end