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
@@ -2,7 +2,7 @@ module ActiveMerchant #:nodoc:
2
2
  module Billing #:nodoc:
3
3
  class PaystationGateway < Gateway
4
4
 
5
- self.live_url = self.test_url = "https://www.paystation.co.nz/direct/paystation.dll"
5
+ self.live_url = self.test_url = 'https://www.paystation.co.nz/direct/paystation.dll'
6
6
 
7
7
  # an "error code" of "0" means "No error - transaction successful"
8
8
  SUCCESSFUL_RESPONSE_CODE = '0'
@@ -32,9 +32,7 @@ module ActiveMerchant #:nodoc:
32
32
 
33
33
  add_invoice(post, options)
34
34
  add_amount(post, money, options)
35
-
36
35
  add_credit_card(post, credit_card)
37
-
38
36
  add_authorize_flag(post, options)
39
37
 
40
38
  commit(post)
@@ -45,7 +43,6 @@ module ActiveMerchant #:nodoc:
45
43
 
46
44
  add_invoice(post, options)
47
45
  add_amount(post, money, options)
48
-
49
46
  add_authorization_token(post, authorization_token, options[:credit_card_verification])
50
47
 
51
48
  commit(post)
@@ -78,122 +75,133 @@ module ActiveMerchant #:nodoc:
78
75
  commit(post)
79
76
  end
80
77
 
81
- private
82
-
83
- def new_request
84
- {
85
- :pi => @options[:paystation_id], # paystation account id
86
- :gi => @options[:gateway_id], # paystation gateway id
87
- "2p" => "t", # two-party transaction type
88
- :nr => "t", # -- redirect??
89
- :df => "yymm" # date format: optional sometimes, required others
90
- }
91
- end
92
-
93
- def add_customer_data(post, options)
94
- post[:mc] = options[:customer]
95
- end
78
+ def refund(money, authorization, options={})
79
+ post = new_request
80
+ add_amount(post, money, options)
81
+ add_invoice(post, options)
82
+ add_refund_specific_fields(post, authorization)
96
83
 
97
- def add_invoice(post, options)
98
- requires!(options, :order_id)
84
+ commit(post)
85
+ end
99
86
 
100
- post[:ms] = options[:order_id] # "Merchant Session", must be unique per request
101
- post[:mo] = options[:invoice] # "Order Details", displayed in Paystation Admin
102
- post[:mr] = options[:description] # "Merchant Reference Code", seen from Paystation Admin
103
- end
87
+ def verify(credit_card, options={})
88
+ authorize(0, credit_card, options)
89
+ end
104
90
 
105
- def add_credit_card(post, credit_card)
91
+ def supports_scrubbing?
92
+ true
93
+ end
106
94
 
107
- post[:cn] = credit_card.number
108
- post[:ct] = credit_card.brand
109
- post[:ex] = format_date(credit_card.month, credit_card.year)
110
- post[:cc] = credit_card.verification_value if credit_card.verification_value?
95
+ def scrub(transcript)
96
+ transcript.
97
+ gsub(%r((pstn_cn=)\d*), '\1[FILTERED]').
98
+ gsub(%r((pstn_cc=)\d*), '\1[FILTERED]')
99
+ end
111
100
 
112
- end
101
+ private
113
102
 
114
- # bill a token (stored via "store") rather than a Credit Card
115
- def add_token(post, token)
116
- post[:fp] = "t" # turn on "future payments" - what paystation calls Token Billing
117
- post[:ft] = token
118
- end
103
+ def new_request
104
+ {
105
+ :pi => @options[:paystation_id], # paystation account id
106
+ :gi => @options[:gateway_id], # paystation gateway id
107
+ '2p' => 't', # two-party transaction type
108
+ :nr => 't', # -- redirect??
109
+ :df => 'yymm' # date format: optional sometimes, required others
110
+ }
111
+ end
119
112
 
120
- def store_credit_card(post, options)
113
+ def add_customer_data(post, options)
114
+ post[:mc] = options[:customer]
115
+ end
121
116
 
122
- post[:fp] = "t" # turn on "future payments" - what paystation calls Token Billing
123
- post[:fs] = "t" # tells paystation to store right now, not bill
124
- post[:ft] = options[:token] if options[:token] # specify a token to use that, or let Paystation generate one
117
+ def add_invoice(post, options)
118
+ post[:ms] = generate_unique_id
119
+ post[:mo] = options[:description]
120
+ post[:mr] = options[:order_id]
121
+ end
125
122
 
126
- end
123
+ def add_credit_card(post, credit_card)
124
+ post[:cn] = credit_card.number
125
+ post[:ct] = credit_card.brand
126
+ post[:ex] = format_date(credit_card.month, credit_card.year)
127
+ post[:cc] = credit_card.verification_value if credit_card.verification_value?
128
+ end
127
129
 
128
- def add_authorize_flag(post, options)
129
- post[:pa] = "t" # tells Paystation that this is a pre-auth authorisation payment (account must be in pre-auth mode)
130
- end
130
+ def add_token(post, token)
131
+ post[:fp] = 't' # turn on "future payments" - what paystation calls Token Billing
132
+ post[:ft] = token
133
+ end
131
134
 
132
- def add_authorization_token(post, auth_token, verification_value = nil)
133
- post[:cp] = "t" # Capture Payment flag tells Paystation this transaction should be treated as a capture payment
134
- post[:cx] = auth_token
135
- post[:cc] = verification_value
136
- end
135
+ def store_credit_card(post, options)
136
+ post[:fp] = 't' # turn on "future payments" - what paystation calls Token Billing
137
+ post[:fs] = 't' # tells paystation to store right now, not bill
138
+ post[:ft] = options[:token] if options[:token] # specify a token to use that, or let Paystation generate one
139
+ end
137
140
 
138
- def add_amount(post, money, options)
141
+ def add_authorize_flag(post, options)
142
+ post[:pa] = 't' # tells Paystation that this is a pre-auth authorisation payment (account must be in pre-auth mode)
143
+ end
139
144
 
140
- post[:am] = amount(money)
141
- post[:cu] = options[:currency] || currency(money)
145
+ def add_refund_specific_fields(post, authorization)
146
+ post[:rc] = 't'
147
+ post[:rt] = authorization
148
+ end
142
149
 
143
- end
150
+ def add_authorization_token(post, auth_token, verification_value = nil)
151
+ post[:cp] = 't' # Capture Payment flag – tells Paystation this transaction should be treated as a capture payment
152
+ post[:cx] = auth_token
153
+ post[:cc] = verification_value
154
+ end
144
155
 
145
- def parse(xml_response)
146
- response = {}
156
+ def add_amount(post, money, options)
157
+ post[:am] = amount(money)
158
+ post[:cu] = options[:currency] || currency(money)
159
+ end
147
160
 
148
- xml = REXML::Document.new(xml_response)
161
+ def parse(xml_response)
162
+ response = {}
149
163
 
150
- # for normal payments, the root node is <Response>
151
- # for "future payments", it's <PaystationFuturePaymentResponse>
152
- xml.elements.each("#{xml.root.name}/*") do |element|
153
- response[element.name.underscore.to_sym] = element.text
154
- end
164
+ xml = REXML::Document.new(xml_response)
155
165
 
156
- response
166
+ xml.elements.each("#{xml.root.name}/*") do |element|
167
+ response[element.name.underscore.to_sym] = element.text
157
168
  end
158
169
 
159
- def commit(post)
160
-
161
- post[:tm] = "T" if test? # test mode
170
+ response
171
+ end
162
172
 
163
- pstn_prefix_params = post.collect { |key, value| "pstn_#{key}=#{CGI.escape(value.to_s)}" }.join("&")
173
+ def commit(post)
174
+ post[:tm] = 'T' if test?
175
+ pstn_prefix_params = post.collect { |key, value| "pstn_#{key}=#{CGI.escape(value.to_s)}" }.join('&')
164
176
 
165
- # need include paystation param as "initiator flag for payment engine"
166
- data = ssl_post(self.live_url, "#{pstn_prefix_params}&paystation=_empty")
167
- response = parse(data)
168
- message = message_from(response)
177
+ data = ssl_post(self.live_url, "#{pstn_prefix_params}&paystation=_empty")
178
+ response = parse(data)
179
+ message = message_from(response)
169
180
 
170
- PaystationResponse.new(success?(response), message, response,
171
- :test => (response[:tm] && response[:tm].downcase == "t"),
172
- :authorization => response[:paystation_transaction_id]
173
- )
174
- end
181
+ PaystationResponse.new(success?(response), message, response,
182
+ :test => (response[:tm]&.casecmp('t')&.zero?),
183
+ :authorization => response[:paystation_transaction_id]
184
+ )
185
+ end
175
186
 
176
- def success?(response)
177
- (response[:ec] == SUCCESSFUL_RESPONSE_CODE) || (response[:ec] == SUCCESSFUL_FUTURE_PAYMENT)
178
- end
187
+ def success?(response)
188
+ (response[:ec] == SUCCESSFUL_RESPONSE_CODE) || (response[:ec] == SUCCESSFUL_FUTURE_PAYMENT)
189
+ end
179
190
 
180
- def message_from(response)
181
- response[:em]
182
- end
191
+ def message_from(response)
192
+ response[:em]
193
+ end
183
194
 
184
- def format_date(month, year)
185
- "#{format(year, :two_digits)}#{format(month, :two_digits)}"
186
- end
195
+ def format_date(month, year)
196
+ "#{format(year, :two_digits)}#{format(month, :two_digits)}"
197
+ end
187
198
 
188
199
  end
189
200
 
190
201
  class PaystationResponse < Response
191
- # add a method to response so we can easily get the token
192
- # for Validate transactions
193
202
  def token
194
- @params["future_payment_token"]
203
+ @params['future_payment_token']
195
204
  end
196
205
  end
197
206
  end
198
207
  end
199
-
@@ -0,0 +1,248 @@
1
+ # encoding: utf-8
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ class PayuInGateway < Gateway
6
+ self.test_url = 'https://test.payu.in/_payment'
7
+ self.live_url = 'https://secure.payu.in/_payment'
8
+
9
+ TEST_INFO_URL = 'https://test.payu.in/merchant/postservice.php?form=2'
10
+ LIVE_INFO_URL = 'https://info.payu.in/merchant/postservice.php?form=2'
11
+
12
+ self.supported_countries = ['IN']
13
+ self.default_currency = 'INR'
14
+ self.supported_cardtypes = [:visa, :master, :american_express, :diners_club, :maestro]
15
+
16
+ self.homepage_url = 'https://www.payu.in/'
17
+ self.display_name = 'PayU India'
18
+
19
+ def initialize(options={})
20
+ requires!(options, :key, :salt)
21
+ super
22
+ end
23
+
24
+ def purchase(money, payment, options={})
25
+ requires!(options, :order_id)
26
+
27
+ post = {}
28
+ add_invoice(post, money, options)
29
+ add_payment(post, payment)
30
+ add_addresses(post, options)
31
+ add_customer_data(post, options)
32
+ add_auth(post)
33
+
34
+ MultiResponse.run do |r|
35
+ r.process { commit(url('purchase'), post) }
36
+ if(r.params['enrolled'].to_s == '0')
37
+ r.process { commit(r.params['post_uri'], r.params['form_post_vars']) }
38
+ else
39
+ r.process { handle_3dsecure(r) }
40
+ end
41
+ end
42
+ end
43
+
44
+ def refund(money, authorization, options={})
45
+ raise ArgumentError, 'Amount is required' unless money
46
+
47
+ post = {}
48
+
49
+ post[:command] = 'cancel_refund_transaction'
50
+ post[:var1] = authorization
51
+ post[:var2] = generate_unique_id
52
+ post[:var3] = amount(money)
53
+
54
+ add_auth(post, :command, :var1)
55
+
56
+ commit(url('refund'), post)
57
+ end
58
+
59
+ def supports_scrubbing?
60
+ true
61
+ end
62
+
63
+ def scrub(transcript)
64
+ transcript.
65
+ gsub(/(ccnum=)[^&\n"]*(&|\n|"|$)/, '\1[FILTERED]\2').
66
+ gsub(/(ccvv=)[^&\n"]*(&|\n|"|$)/, '\1[FILTERED]\2').
67
+ gsub(/(card_hash=)[^&\n"]*(&|\n|"|$)/, '\1[FILTERED]\2').
68
+ gsub(/(ccnum":")[^"]*(")/, '\1[FILTERED]\2').
69
+ gsub(/(ccvv":")[^"]*(")/, '\1[FILTERED]\2')
70
+ end
71
+
72
+ private
73
+
74
+ PAYMENT_DIGEST_KEYS = %w(
75
+ txnid amount productinfo firstname email
76
+ udf1 udf2 udf3 udf4 udf5
77
+ bogus bogus bogus bogus bogus
78
+ )
79
+ def add_auth(post, *digest_keys)
80
+ post[:key] = @options[:key]
81
+ post[:txn_s2s_flow] = 1
82
+
83
+ digest_keys = PAYMENT_DIGEST_KEYS if digest_keys.empty?
84
+ digest = Digest::SHA2.new(512)
85
+ digest << @options[:key] << '|'
86
+ digest_keys.each do |key|
87
+ digest << (post[key.to_sym] || '') << '|'
88
+ end
89
+ digest << @options[:salt]
90
+ post[:hash] = digest.hexdigest
91
+ end
92
+
93
+ def add_customer_data(post, options)
94
+ post[:email] = clean(options[:email] || 'unknown@example.com', nil, 50)
95
+ post[:phone] = clean((options[:billing_address] && options[:billing_address][:phone]) || '11111111111', :numeric, 50)
96
+ end
97
+
98
+ def add_addresses(post, options)
99
+ if options[:billing_address]
100
+ post[:address1] = clean(options[:billing_address][:address1], :text, 100)
101
+ post[:address2] = clean(options[:billing_address][:address2], :text, 100)
102
+ post[:city] = clean(options[:billing_address][:city], :text, 50)
103
+ post[:state] = clean(options[:billing_address][:state], :text, 50)
104
+ post[:country] = clean(options[:billing_address][:country], :text, 50)
105
+ post[:zipcode] = clean(options[:billing_address][:zip], :numeric, 20)
106
+ end
107
+
108
+ if options[:shipping_address]
109
+ if options[:shipping_address][:name]
110
+ first, *rest = options[:shipping_address][:name].split(/\s+/)
111
+ post[:shipping_firstname] = clean(first, :name, 60)
112
+ post[:shipping_lastname] = clean(rest.join(' '), :name, 20)
113
+ end
114
+ post[:shipping_address1] = clean(options[:shipping_address][:address1], :text, 100)
115
+ post[:shipping_address2] = clean(options[:shipping_address][:address2], :text, 100)
116
+ post[:shipping_city] = clean(options[:shipping_address][:city], :text, 50)
117
+ post[:shipping_state] = clean(options[:shipping_address][:state], :text, 50)
118
+ post[:shipping_country] = clean(options[:shipping_address][:country], :text, 50)
119
+ post[:shipping_zipcode] = clean(options[:shipping_address][:zip], :numeric, 20)
120
+ post[:shipping_phone] = clean(options[:shipping_address][:phone], :numeric, 50)
121
+ end
122
+ end
123
+
124
+ def add_invoice(post, money, options)
125
+ post[:amount] = amount(money)
126
+
127
+ post[:txnid] = clean(options[:order_id], :alphanumeric, 30)
128
+ post[:productinfo] = clean(options[:description] || 'Purchase', nil, 100)
129
+
130
+ post[:surl] = 'http://example.com'
131
+ post[:furl] = 'http://example.com'
132
+ end
133
+
134
+ BRAND_MAP = {
135
+ visa: 'VISA',
136
+ master: 'MAST',
137
+ american_express: 'AMEX',
138
+ diners_club: 'DINR',
139
+ maestro: 'MAES'
140
+ }
141
+
142
+ def add_payment(post, payment)
143
+ post[:pg] = 'CC'
144
+ post[:firstname] = clean(payment.first_name, :name, 60)
145
+ post[:lastname] = clean(payment.last_name, :name, 20)
146
+
147
+ post[:bankcode] = BRAND_MAP[payment.brand.to_sym]
148
+ post[:ccnum] = payment.number
149
+ post[:ccvv] = payment.verification_value
150
+ post[:ccname] = payment.name
151
+ post[:ccexpmon] = format(payment.month, :two_digits)
152
+ post[:ccexpyr] = format(payment.year, :four_digits)
153
+ end
154
+
155
+ def clean(value, format, maxlength)
156
+ value ||= ''
157
+ value = case format
158
+ when :alphanumeric
159
+ value.gsub(/[^A-Za-z0-9]/, '')
160
+ when :name
161
+ value.gsub(/[^A-Za-z ]/, '')
162
+ when :numeric
163
+ value.gsub(/[^0-9]/, '')
164
+ when :text
165
+ value.gsub(/[^A-Za-z0-9@\-_\/\. ]/, '')
166
+ when nil
167
+ value
168
+ else
169
+ raise "Unknown format #{format} for #{value}"
170
+ end
171
+ value[0...maxlength]
172
+ end
173
+
174
+ def parse(body)
175
+ top = JSON.parse(body)
176
+
177
+ if result = top.delete('result')
178
+ result.split('&').inject({}) do |hash, string|
179
+ key, value = string.split('=')
180
+ hash[CGI.unescape(key).downcase] = CGI.unescape(value || '')
181
+ hash
182
+ end.each do |key, value|
183
+ if top[key]
184
+ top["result_#{key}"] = value
185
+ else
186
+ top[key] = value
187
+ end
188
+ end
189
+ end
190
+
191
+ if response = top.delete('response')
192
+ top.merge!(response)
193
+ end
194
+
195
+ top
196
+ rescue JSON::ParserError
197
+ {
198
+ 'error' => "Invalid response received from the PayU API. (The raw response was `#{body}`)."
199
+ }
200
+ end
201
+
202
+ def commit(url, parameters)
203
+ response = parse(ssl_post(url, post_data(parameters), 'Accept-Encoding' => 'identity'))
204
+
205
+ Response.new(
206
+ success_from(response),
207
+ message_from(response),
208
+ response,
209
+ authorization: authorization_from(response),
210
+ test: test?
211
+ )
212
+ end
213
+
214
+ def url(action)
215
+ case action
216
+ when 'purchase'
217
+ (test? ? test_url : live_url)
218
+ else
219
+ (test? ? TEST_INFO_URL : LIVE_INFO_URL)
220
+ end
221
+ end
222
+
223
+ def success_from(response)
224
+ if response['result_status']
225
+ (response['status'] == 'success' && response['result_status'] == 'success')
226
+ else
227
+ (response['status'] == 'success' || response['status'].to_s == '1')
228
+ end
229
+ end
230
+
231
+ def message_from(response)
232
+ (response['error_message'] || response['error'] || response['msg'])
233
+ end
234
+
235
+ def authorization_from(response)
236
+ response['mihpayid']
237
+ end
238
+
239
+ def post_data(parameters = {})
240
+ PostData.new.merge!(parameters).to_post_data
241
+ end
242
+
243
+ def handle_3dsecure(response)
244
+ Response.new(false, '3D-secure enrolled cards are not supported.')
245
+ end
246
+ end
247
+ end
248
+ end