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,290 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ class QuickbooksGateway < Gateway
4
+ self.test_url = 'https://sandbox.api.intuit.com'
5
+ self.live_url = 'https://api.intuit.com'
6
+
7
+ self.supported_countries = ['US']
8
+ self.default_currency = 'USD'
9
+ self.supported_cardtypes = [:visa, :master, :american_express, :discover, :diners]
10
+
11
+ self.homepage_url = 'http://payments.intuit.com'
12
+ self.display_name = 'QuickBooks Payments'
13
+ ENDPOINT = '/quickbooks/v4/payments/charges'
14
+ OAUTH_ENDPOINTS = {
15
+ site: 'https://oauth.intuit.com',
16
+ request_token_path: '/oauth/v1/get_request_token',
17
+ authorize_url: 'https://appcenter.intuit.com/Connect/Begin',
18
+ access_token_path: '/oauth/v1/get_access_token'
19
+ }
20
+
21
+ # https://developer.intuit.com/docs/0150_payments/0300_developer_guides/error_handling
22
+
23
+ STANDARD_ERROR_CODE_MAPPING = {
24
+ # Fraud Warnings
25
+ 'PMT-1000' => STANDARD_ERROR_CODE[:processing_error], # payment was accepted, but refund was unsuccessful
26
+ 'PMT-1001' => STANDARD_ERROR_CODE[:invalid_cvc], # payment processed, but cvc was invalid
27
+ 'PMT-1002' => STANDARD_ERROR_CODE[:incorrect_address], # payment processed, incorrect address info
28
+ 'PMT-1003' => STANDARD_ERROR_CODE[:processing_error], # payment processed, address info couldn't be validated
29
+
30
+ # Fraud Errors
31
+ 'PMT-2000' => STANDARD_ERROR_CODE[:incorrect_cvc], # Incorrect CVC
32
+ 'PMT-2001' => STANDARD_ERROR_CODE[:invalid_cvc], # CVC check unavaliable
33
+ 'PMT-2002' => STANDARD_ERROR_CODE[:incorrect_address], # Incorrect address
34
+ 'PMT-2003' => STANDARD_ERROR_CODE[:incorrect_address], # Address info unavailable
35
+
36
+ 'PMT-3000' => STANDARD_ERROR_CODE[:processing_error], # Merchant account could not be validated
37
+
38
+ # Invalid Request
39
+ 'PMT-4000' => STANDARD_ERROR_CODE[:processing_error], # Object is invalid
40
+ 'PMT-4001' => STANDARD_ERROR_CODE[:processing_error], # Object not found
41
+ 'PMT-4002' => STANDARD_ERROR_CODE[:processing_error], # Object is required
42
+
43
+ # Transaction Declined
44
+ 'PMT-5000' => STANDARD_ERROR_CODE[:card_declined], # Request was declined
45
+ 'PMT-5001' => STANDARD_ERROR_CODE[:card_declined], # Merchant does not support given payment method
46
+
47
+ # System Error
48
+ 'PMT-6000' => STANDARD_ERROR_CODE[:processing_error], # A temporary Issue prevented this request from being processed.
49
+ }
50
+
51
+ FRAUD_WARNING_CODES = ['PMT-1000', 'PMT-1001', 'PMT-1002', 'PMT-1003']
52
+
53
+ def initialize(options = {})
54
+ requires!(options, :consumer_key, :consumer_secret, :access_token, :token_secret, :realm)
55
+ @options = options
56
+ super
57
+ end
58
+
59
+ def purchase(money, payment, options = {})
60
+ post = {}
61
+ add_amount(post, money, options)
62
+ add_charge_data(post, payment, options)
63
+ post[:capture] = 'true'
64
+
65
+ commit(ENDPOINT, post)
66
+ end
67
+
68
+ def authorize(money, payment, options = {})
69
+ post = {}
70
+ add_amount(post, money, options)
71
+ add_charge_data(post, payment, options)
72
+ post[:capture] = 'false'
73
+
74
+ commit(ENDPOINT, post)
75
+ end
76
+
77
+ def capture(money, authorization, options = {})
78
+ post = {}
79
+ capture_uri = "#{ENDPOINT}/#{CGI.escape(authorization)}/capture"
80
+ post[:amount] = localized_amount(money, currency(money))
81
+ add_context(post, options)
82
+
83
+ commit(capture_uri, post)
84
+ end
85
+
86
+ def refund(money, authorization, options = {})
87
+ post = {}
88
+ post[:amount] = localized_amount(money, currency(money))
89
+ add_context(post, options)
90
+
91
+ commit(refund_uri(authorization), post)
92
+ end
93
+
94
+ def verify(credit_card, options = {})
95
+ authorize(1.00, credit_card, options)
96
+ end
97
+
98
+ def supports_scrubbing?
99
+ true
100
+ end
101
+
102
+ def scrub(transcript)
103
+ transcript.
104
+ gsub(%r((realm=\")\w+), '\1[FILTERED]').
105
+ gsub(%r((oauth_consumer_key=\")\w+), '\1[FILTERED]').
106
+ gsub(%r((oauth_nonce=\")\w+), '\1[FILTERED]').
107
+ gsub(%r((oauth_signature=\")[a-zA-Z%0-9]+), '\1[FILTERED]').
108
+ gsub(%r((oauth_token=\")\w+), '\1[FILTERED]').
109
+ gsub(%r((number\D+)\d{16}), '\1[FILTERED]').
110
+ gsub(%r((cvc\D+)\d{3}), '\1[FILTERED]')
111
+ end
112
+
113
+ private
114
+
115
+ def add_charge_data(post, payment, options = {})
116
+ add_payment(post, payment, options)
117
+ add_address(post, options)
118
+ end
119
+
120
+ def add_address(post, options)
121
+ return unless post[:card]&.kind_of?(Hash)
122
+
123
+ card_address = {}
124
+ if address = options[:billing_address] || options[:address]
125
+ card_address[:streetAddress] = address[:address1]
126
+ card_address[:city] = address[:city]
127
+ card_address[:region] = address[:state] || address[:region]
128
+ card_address[:country] = address[:country]
129
+ card_address[:postalCode] = address[:zip] if address[:zip]
130
+ end
131
+ post[:card][:address] = card_address
132
+ end
133
+
134
+ def add_amount(post, money, options = {})
135
+ currency = options[:currency] || currency(money)
136
+ post[:amount] = localized_amount(money, currency)
137
+ post[:currency] = currency.upcase
138
+ end
139
+
140
+ def add_payment(post, payment, options = {})
141
+ add_creditcard(post, payment, options)
142
+ add_context(post, options)
143
+ end
144
+
145
+ def add_creditcard(post, creditcard, options = {})
146
+ card = {}
147
+ card[:number] = creditcard.number
148
+ card[:expMonth] = '%02d' % creditcard.month
149
+ card[:expYear] = creditcard.year
150
+ card[:cvc] = creditcard.verification_value if creditcard.verification_value?
151
+ card[:name] = creditcard.name if creditcard.name
152
+ card[:commercialCardCode] = options[:card_code] if options[:card_code]
153
+
154
+ post[:card] = card
155
+ end
156
+
157
+ def add_context(post, options = {})
158
+ post[:context] = {
159
+ mobile: options.fetch(:mobile, false),
160
+ isEcommerce: options.fetch(:ecommerce, true)
161
+ }
162
+ end
163
+
164
+ def parse(body)
165
+ JSON.parse(body)
166
+ end
167
+
168
+ def commit(uri, body = {}, method = :post)
169
+ endpoint = gateway_url + uri
170
+ # The QuickBooks API returns HTTP 4xx on failed transactions, which causes a
171
+ # ResponseError raise, so we have to inspect the response and discern between
172
+ # a legitimate HTTP error and an actual gateway transactional error.
173
+ response = begin
174
+ case method
175
+ when :post
176
+ ssl_post(endpoint, post_data(body), headers(:post, endpoint))
177
+ when :get
178
+ ssl_request(:get, endpoint, nil, headers(:get, endpoint))
179
+ else
180
+ raise ArgumentError, "Invalid HTTP method: #{method}. Valid methods are :post and :get"
181
+ end
182
+ rescue ResponseError => e
183
+ extract_response_body_or_raise(e)
184
+ end
185
+
186
+ response_object(response)
187
+ end
188
+
189
+ def response_object(raw_response)
190
+ parsed_response = parse(raw_response)
191
+
192
+ Response.new(
193
+ success?(parsed_response),
194
+ message_from(parsed_response),
195
+ parsed_response,
196
+ authorization: authorization_from(parsed_response),
197
+ test: test?,
198
+ cvv_result: cvv_code_from(parsed_response),
199
+ error_code: errors_from(parsed_response),
200
+ fraud_review: fraud_review_status_from(parsed_response)
201
+ )
202
+ end
203
+
204
+ def gateway_url
205
+ test? ? test_url : live_url
206
+ end
207
+
208
+ def post_data(data = {})
209
+ data.to_json
210
+ end
211
+
212
+ def headers(method, uri)
213
+ raise ArgumentError, "Invalid HTTP method: #{method}. Valid methods are :post and :get" unless [:post, :get].include?(method)
214
+ request_uri = URI.parse(uri)
215
+
216
+ # Following the guidelines from http://nouncer.com/oauth/authentication.html
217
+ oauth_parameters = {
218
+ oauth_nonce: generate_unique_id,
219
+ oauth_timestamp: Time.now.to_i.to_s,
220
+ oauth_signature_method: 'HMAC-SHA1',
221
+ oauth_version: '1.0',
222
+ oauth_consumer_key: @options[:consumer_key],
223
+ oauth_token: @options[:access_token]
224
+ }
225
+
226
+ # prepare components for signature
227
+ oauth_signature_base_string = [method.to_s.upcase, request_uri.to_s, oauth_parameters.to_param].map { |v| CGI.escape(v) }.join('&')
228
+ oauth_signing_key = [@options[:consumer_secret], @options[:token_secret]].map { |v| CGI.escape(v) }.join('&')
229
+ hmac_signature = OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha1'), oauth_signing_key, oauth_signature_base_string)
230
+
231
+ # append signature to required OAuth parameters
232
+ oauth_parameters[:oauth_signature] = CGI.escape(Base64.encode64(hmac_signature).chomp.gsub(/\n/, ''))
233
+
234
+ # prepare Authorization header string
235
+ oauth_parameters = Hash[oauth_parameters.sort_by { |k, _| k }]
236
+ oauth_headers = ["OAuth realm=\"#{@options[:realm]}\""]
237
+ oauth_headers += oauth_parameters.map { |k, v| "#{k}=\"#{v}\"" }
238
+
239
+ {
240
+ 'Content-type' => 'application/json',
241
+ 'Request-Id' => generate_unique_id,
242
+ 'Authorization' => oauth_headers.join(', ')
243
+ }
244
+ end
245
+
246
+ def cvv_code_from(response)
247
+ if response['errors'].present?
248
+ FRAUD_WARNING_CODES.include?(response['errors'].first['code']) ? 'I' : ''
249
+ else
250
+ success?(response) ? 'M' : ''
251
+ end
252
+ end
253
+
254
+ def success?(response)
255
+ return FRAUD_WARNING_CODES.concat(['0']).include?(response['errors'].first['code']) if response['errors']
256
+
257
+ !['DECLINED', 'CANCELLED'].include?(response['status'])
258
+ end
259
+
260
+ def message_from(response)
261
+ response['errors'].present? ? response['errors'].map { |error_hash| error_hash['message'] }.join(' ') : response['status']
262
+ end
263
+
264
+ def errors_from(response)
265
+ response['errors'].present? ? STANDARD_ERROR_CODE_MAPPING[response['errors'].first['code']] : ''
266
+ end
267
+
268
+ def authorization_from(response)
269
+ response['id']
270
+ end
271
+
272
+ def fraud_review_status_from(response)
273
+ response['errors'] && FRAUD_WARNING_CODES.include?(response['errors'].first['code'])
274
+ end
275
+
276
+ def extract_response_body_or_raise(response_error)
277
+ begin
278
+ parse(response_error.response.body)
279
+ rescue JSON::ParserError
280
+ raise response_error
281
+ end
282
+ response_error.response.body
283
+ end
284
+
285
+ def refund_uri(authorization)
286
+ "#{ENDPOINT}/#{CGI.escape(authorization)}/refunds"
287
+ end
288
+ end
289
+ end
290
+ end
@@ -0,0 +1,184 @@
1
+ module QuickpayCommon
2
+ MD5_CHECK_FIELDS = {
3
+ 3 => {
4
+ :authorize => %w(protocol msgtype merchant ordernumber amount
5
+ currency autocapture cardnumber expirationdate
6
+ cvd cardtypelock testmode),
7
+
8
+ :capture => %w(protocol msgtype merchant amount finalize transaction),
9
+
10
+ :cancel => %w(protocol msgtype merchant transaction),
11
+
12
+ :refund => %w(protocol msgtype merchant amount transaction),
13
+
14
+ :subscribe => %w(protocol msgtype merchant ordernumber cardnumber
15
+ expirationdate cvd cardtypelock description testmode),
16
+
17
+ :recurring => %w(protocol msgtype merchant ordernumber amount
18
+ currency autocapture transaction),
19
+
20
+ :status => %w(protocol msgtype merchant transaction),
21
+
22
+ :chstatus => %w(protocol msgtype merchant)
23
+ },
24
+
25
+ 4 => {
26
+ :authorize => %w(protocol msgtype merchant ordernumber amount
27
+ currency autocapture cardnumber expirationdate cvd
28
+ cardtypelock testmode fraud_remote_addr
29
+ fraud_http_accept fraud_http_accept_language
30
+ fraud_http_accept_encoding fraud_http_accept_charset
31
+ fraud_http_referer fraud_http_user_agent apikey),
32
+
33
+ :capture => %w(protocol msgtype merchant amount finalize transaction apikey),
34
+
35
+ :cancel => %w(protocol msgtype merchant transaction apikey),
36
+
37
+ :refund => %w(protocol msgtype merchant amount transaction apikey),
38
+
39
+ :subscribe => %w(protocol msgtype merchant ordernumber cardnumber
40
+ expirationdate cvd cardtypelock description testmode
41
+ fraud_remote_addr fraud_http_accept fraud_http_accept_language
42
+ fraud_http_accept_encoding fraud_http_accept_charset
43
+ fraud_http_referer fraud_http_user_agent apikey),
44
+
45
+ :recurring => %w(protocol msgtype merchant ordernumber amount currency
46
+ autocapture transaction apikey),
47
+
48
+ :status => %w(protocol msgtype merchant transaction apikey),
49
+
50
+ :chstatus => %w(protocol msgtype merchant apikey)
51
+ },
52
+
53
+ 5 => {
54
+ :authorize => %w(protocol msgtype merchant ordernumber amount
55
+ currency autocapture cardnumber expirationdate cvd
56
+ cardtypelock testmode fraud_remote_addr
57
+ fraud_http_accept fraud_http_accept_language
58
+ fraud_http_accept_encoding fraud_http_accept_charset
59
+ fraud_http_referer fraud_http_user_agent apikey),
60
+
61
+ :capture => %w(protocol msgtype merchant amount finalize transaction apikey),
62
+
63
+ :cancel => %w(protocol msgtype merchant transaction apikey),
64
+
65
+ :refund => %w(protocol msgtype merchant amount transaction apikey),
66
+
67
+ :subscribe => %w(protocol msgtype merchant ordernumber cardnumber
68
+ expirationdate cvd cardtypelock description testmode
69
+ fraud_remote_addr fraud_http_accept fraud_http_accept_language
70
+ fraud_http_accept_encoding fraud_http_accept_charset
71
+ fraud_http_referer fraud_http_user_agent apikey),
72
+
73
+ :recurring => %w(protocol msgtype merchant ordernumber amount currency
74
+ autocapture transaction apikey),
75
+
76
+ :status => %w(protocol msgtype merchant transaction apikey),
77
+
78
+ :chstatus => %w(protocol msgtype merchant apikey)
79
+ },
80
+
81
+ 6 => {
82
+ :authorize => %w(protocol msgtype merchant ordernumber amount
83
+ currency autocapture cardnumber expirationdate cvd
84
+ cardtypelock testmode fraud_remote_addr
85
+ fraud_http_accept fraud_http_accept_language
86
+ fraud_http_accept_encoding fraud_http_accept_charset
87
+ fraud_http_referer fraud_http_user_agent apikey),
88
+
89
+ :capture => %w(protocol msgtype merchant amount finalize transaction
90
+ apikey),
91
+
92
+ :cancel => %w(protocol msgtype merchant transaction apikey),
93
+
94
+ :refund => %w(protocol msgtype merchant amount transaction apikey),
95
+
96
+ :subscribe => %w(protocol msgtype merchant ordernumber cardnumber
97
+ expirationdate cvd cardtypelock description testmode
98
+ fraud_remote_addr fraud_http_accept fraud_http_accept_language
99
+ fraud_http_accept_encoding fraud_http_accept_charset
100
+ fraud_http_referer fraud_http_user_agent apikey),
101
+
102
+ :recurring => %w(protocol msgtype merchant ordernumber amount currency
103
+ autocapture transaction apikey),
104
+
105
+ :status => %w(protocol msgtype merchant transaction apikey),
106
+
107
+ :chstatus => %w(protocol msgtype merchant apikey)
108
+ },
109
+
110
+ 7 => {
111
+ :authorize => %w(protocol msgtype merchant ordernumber amount
112
+ currency autocapture cardnumber expirationdate cvd
113
+ acquirers cardtypelock testmode fraud_remote_addr
114
+ fraud_http_accept fraud_http_accept_language
115
+ fraud_http_accept_encoding fraud_http_accept_charset
116
+ fraud_http_referer fraud_http_user_agent apikey),
117
+
118
+ :capture => %w(protocol msgtype merchant amount finalize transaction
119
+ apikey),
120
+
121
+ :cancel => %w(protocol msgtype merchant transaction apikey),
122
+
123
+ :refund => %w(protocol msgtype merchant amount transaction apikey),
124
+
125
+ :subscribe => %w(protocol msgtype merchant ordernumber amount currency
126
+ cardnumber expirationdate cvd acquirers cardtypelock
127
+ description testmode fraud_remote_addr fraud_http_accept
128
+ fraud_http_accept_language fraud_http_accept_encoding
129
+ fraud_http_accept_charset fraud_http_referer
130
+ fraud_http_user_agent apikey),
131
+
132
+ :recurring => %w(protocol msgtype merchant ordernumber amount currency
133
+ autocapture transaction apikey),
134
+
135
+ :status => %w(protocol msgtype merchant transaction apikey),
136
+
137
+ :chstatus => %w(protocol msgtype merchant apikey)
138
+ },
139
+
140
+ 10 => {
141
+ :authorize => %w(mobile_number acquirer autofee customer_id extras
142
+ zero_auth customer_ip),
143
+ :capture => %w( extras ),
144
+ :cancel => %w( extras ),
145
+ :refund => %w( extras ),
146
+ :subscribe => %w( variables branding_id),
147
+ :authorize_subscription => %w( mobile_number acquirer customer_ip),
148
+ :recurring => %w(auto_capture autofee zero_auth)
149
+ }
150
+ }
151
+
152
+ RESPONSE_CODES = {
153
+ 200 => 'OK',
154
+ 201 => 'Created',
155
+ 202 => 'Accepted',
156
+ 400 => 'Bad Request',
157
+ 401 => 'UnAuthorized',
158
+ 402 => 'Payment Required',
159
+ 403 => 'Forbidden',
160
+ 404 => 'Not Found',
161
+ 405 => 'Method Not Allowed',
162
+ 406 => 'Not Acceptable',
163
+ 409 => 'Conflict',
164
+ 500 => 'Internal Server Error'
165
+ }
166
+
167
+ def self.included(base)
168
+ base.default_currency = 'DKK'
169
+ base.money_format = :cents
170
+
171
+ base.supported_cardtypes = [:dankort, :forbrugsforeningen, :visa, :master,
172
+ :american_express, :diners_club, :jcb, :maestro]
173
+ base.supported_countries = ['DE', 'DK', 'ES', 'FI', 'FR', 'FO', 'GB', 'IS', 'NO', 'SE']
174
+ base.homepage_url = 'http://quickpay.net/'
175
+ base.display_name = 'QuickPay'
176
+ end
177
+
178
+ def expdate(credit_card)
179
+ year = format(credit_card.year, :two_digits)
180
+ month = format(credit_card.month, :two_digits)
181
+
182
+ "#{year}#{month}"
183
+ end
184
+ end