activemerchant 1.42.6 → 1.90.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. checksums.yaml +5 -13
  2. data/CHANGELOG +1420 -2
  3. data/CONTRIBUTORS +106 -0
  4. data/README.md +107 -103
  5. data/lib/active_merchant/billing/apple_pay_payment_token.rb +22 -0
  6. data/lib/active_merchant/billing/avs_result.rb +12 -13
  7. data/lib/active_merchant/billing/base.rb +13 -16
  8. data/lib/active_merchant/billing/check.rb +35 -24
  9. data/lib/active_merchant/billing/compatibility.rb +117 -0
  10. data/lib/active_merchant/billing/credit_card.rb +196 -81
  11. data/lib/active_merchant/billing/credit_card_formatting.rb +6 -4
  12. data/lib/active_merchant/billing/credit_card_methods.rb +199 -75
  13. data/lib/active_merchant/billing/cvv_result.rb +15 -15
  14. data/lib/active_merchant/billing/gateway.rb +171 -39
  15. data/lib/active_merchant/billing/gateways/adyen.rb +380 -0
  16. data/lib/active_merchant/billing/gateways/allied_wallet.rb +205 -0
  17. data/lib/active_merchant/billing/gateways/authorize_net.rb +933 -604
  18. data/lib/active_merchant/billing/gateways/authorize_net_arb.rb +417 -0
  19. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +74 -54
  20. data/lib/active_merchant/billing/gateways/axcessms.rb +181 -0
  21. data/lib/active_merchant/billing/gateways/balanced.rb +130 -370
  22. data/lib/active_merchant/billing/gateways/bank_frick.rb +225 -0
  23. data/lib/active_merchant/billing/gateways/banwire.rb +23 -12
  24. data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +351 -0
  25. data/lib/active_merchant/billing/gateways/barclays_epdq_extra_plus.rb +6 -6
  26. data/lib/active_merchant/billing/gateways/be2bill.rb +2 -2
  27. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +109 -32
  28. data/lib/active_merchant/billing/gateways/beanstream.rb +59 -13
  29. data/lib/active_merchant/billing/gateways/beanstream_interac.rb +12 -9
  30. data/lib/active_merchant/billing/gateways/blue_pay.rb +520 -498
  31. data/lib/active_merchant/billing/gateways/blue_snap.rb +347 -0
  32. data/lib/active_merchant/billing/gateways/bogus.rb +80 -46
  33. data/lib/active_merchant/billing/gateways/borgun.rb +220 -0
  34. data/lib/active_merchant/billing/gateways/bpoint.rb +277 -0
  35. data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +15 -2
  36. data/lib/active_merchant/billing/gateways/braintree.rb +2 -2
  37. data/lib/active_merchant/billing/gateways/braintree_blue.rb +311 -121
  38. data/lib/active_merchant/billing/gateways/braintree_orange.rb +4 -4
  39. data/lib/active_merchant/billing/gateways/bridge_pay.rb +244 -0
  40. data/lib/active_merchant/billing/gateways/cams.rb +230 -0
  41. data/lib/active_merchant/billing/gateways/card_connect.rb +311 -0
  42. data/lib/active_merchant/billing/gateways/card_save.rb +6 -7
  43. data/lib/active_merchant/billing/gateways/card_stream.rb +235 -89
  44. data/lib/active_merchant/billing/gateways/cardknox.rb +327 -0
  45. data/lib/active_merchant/billing/gateways/cardprocess.rb +254 -0
  46. data/lib/active_merchant/billing/gateways/cashnet.rb +219 -0
  47. data/lib/active_merchant/billing/gateways/cc5.rb +50 -8
  48. data/lib/active_merchant/billing/gateways/cecabank.rb +27 -14
  49. data/lib/active_merchant/billing/gateways/cenpos.rb +327 -0
  50. data/lib/active_merchant/billing/gateways/checkout.rb +214 -0
  51. data/lib/active_merchant/billing/gateways/checkout_v2.rb +233 -0
  52. data/lib/active_merchant/billing/gateways/citrus_pay.rb +22 -0
  53. data/lib/active_merchant/billing/gateways/clearhaus.rb +220 -0
  54. data/lib/active_merchant/billing/gateways/commercegate.rb +142 -0
  55. data/lib/active_merchant/billing/gateways/conekta.rb +91 -97
  56. data/lib/active_merchant/billing/gateways/creditcall.rb +271 -0
  57. data/lib/active_merchant/billing/gateways/credorax.rb +356 -0
  58. data/lib/active_merchant/billing/gateways/ct_payment.rb +268 -0
  59. data/lib/active_merchant/billing/gateways/culqi.rb +277 -0
  60. data/lib/active_merchant/billing/gateways/cyber_source.rb +294 -158
  61. data/lib/active_merchant/billing/gateways/d_local.rb +226 -0
  62. data/lib/active_merchant/billing/gateways/data_cash.rb +59 -347
  63. data/lib/active_merchant/billing/gateways/dibs.rb +199 -0
  64. data/lib/active_merchant/billing/gateways/digitzs.rb +292 -0
  65. data/lib/active_merchant/billing/gateways/ebanx.rb +296 -0
  66. data/lib/active_merchant/billing/gateways/efsnet.rb +24 -39
  67. data/lib/active_merchant/billing/gateways/elavon.rb +146 -147
  68. data/lib/active_merchant/billing/gateways/element.rb +356 -0
  69. data/lib/active_merchant/billing/gateways/epay.rb +41 -31
  70. data/lib/active_merchant/billing/gateways/evo_ca.rb +1 -1
  71. data/lib/active_merchant/billing/gateways/eway.rb +79 -78
  72. data/lib/active_merchant/billing/gateways/eway_managed.rb +35 -36
  73. data/lib/active_merchant/billing/gateways/eway_rapid.rb +369 -228
  74. data/lib/active_merchant/billing/gateways/exact.rb +32 -26
  75. data/lib/active_merchant/billing/gateways/ezic.rb +195 -0
  76. data/lib/active_merchant/billing/gateways/fat_zebra.rb +90 -64
  77. data/lib/active_merchant/billing/gateways/federated_canada.rb +6 -14
  78. data/lib/active_merchant/billing/gateways/finansbank.rb +3 -3
  79. data/lib/active_merchant/billing/gateways/first_giving.rb +142 -0
  80. data/lib/active_merchant/billing/gateways/first_pay.rb +128 -122
  81. data/lib/active_merchant/billing/gateways/firstdata_e4.rb +190 -64
  82. data/lib/active_merchant/billing/gateways/firstdata_e4_v27.rb +446 -0
  83. data/lib/active_merchant/billing/gateways/flo2cash.rb +215 -0
  84. data/lib/active_merchant/billing/gateways/flo2cash_simple.rb +20 -0
  85. data/lib/active_merchant/billing/gateways/forte.rb +270 -0
  86. data/lib/active_merchant/billing/gateways/garanti.rb +29 -27
  87. data/lib/active_merchant/billing/gateways/global_collect.rb +340 -0
  88. data/lib/active_merchant/billing/gateways/global_transport.rb +194 -0
  89. data/lib/active_merchant/billing/gateways/hdfc.rb +35 -36
  90. data/lib/active_merchant/billing/gateways/hps.rb +305 -0
  91. data/lib/active_merchant/billing/gateways/iats_payments.rb +271 -16
  92. data/lib/active_merchant/billing/gateways/in_context_paypal_express.rb +15 -0
  93. data/lib/active_merchant/billing/gateways/inspire.rb +29 -32
  94. data/lib/active_merchant/billing/gateways/instapay.rb +5 -6
  95. data/lib/active_merchant/billing/gateways/ipp.rb +175 -0
  96. data/lib/active_merchant/billing/gateways/iridium.rb +247 -41
  97. data/lib/active_merchant/billing/gateways/itransact.rb +4 -5
  98. data/lib/active_merchant/billing/gateways/iveri.rb +251 -0
  99. data/lib/active_merchant/billing/gateways/jetpay.rb +198 -71
  100. data/lib/active_merchant/billing/gateways/jetpay_v2.rb +437 -0
  101. data/lib/active_merchant/billing/gateways/komoju.rb +115 -0
  102. data/lib/active_merchant/billing/gateways/kushki.rb +219 -0
  103. data/lib/active_merchant/billing/gateways/latitude19.rb +411 -0
  104. data/lib/active_merchant/billing/gateways/linkpoint.rb +45 -43
  105. data/lib/active_merchant/billing/gateways/litle.rb +328 -444
  106. data/lib/active_merchant/billing/gateways/mastercard.rb +267 -0
  107. data/lib/active_merchant/billing/gateways/maxipago.rb +145 -115
  108. data/lib/active_merchant/billing/gateways/mercado_pago.rb +277 -0
  109. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +37 -19
  110. data/lib/active_merchant/billing/gateways/merchant_one.rb +13 -15
  111. data/lib/active_merchant/billing/gateways/merchant_partners.rb +245 -0
  112. data/lib/active_merchant/billing/gateways/merchant_ware.rb +57 -60
  113. data/lib/active_merchant/billing/gateways/merchant_ware_version_four.rb +59 -48
  114. data/lib/active_merchant/billing/gateways/merchant_warrior.rb +38 -19
  115. data/lib/active_merchant/billing/gateways/mercury.rb +77 -54
  116. data/lib/active_merchant/billing/gateways/metrics_global.rb +11 -30
  117. data/lib/active_merchant/billing/gateways/micropayment.rb +183 -0
  118. data/lib/active_merchant/billing/gateways/migs.rb +81 -22
  119. data/lib/active_merchant/billing/gateways/modern_payments.rb +3 -3
  120. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +23 -25
  121. data/lib/active_merchant/billing/gateways/monei.rb +307 -0
  122. data/lib/active_merchant/billing/gateways/moneris.rb +146 -64
  123. data/lib/active_merchant/billing/gateways/moneris_us.rb +197 -53
  124. data/lib/active_merchant/billing/gateways/money_movers.rb +6 -15
  125. data/lib/active_merchant/billing/gateways/mundipagg.rb +292 -0
  126. data/lib/active_merchant/billing/gateways/nab_transact.rb +86 -64
  127. data/lib/active_merchant/billing/gateways/ncr_secure_pay.rb +165 -0
  128. data/lib/active_merchant/billing/gateways/net_registry.rb +11 -5
  129. data/lib/active_merchant/billing/gateways/netaxept.rb +21 -22
  130. data/lib/active_merchant/billing/gateways/netbanx.rb +290 -0
  131. data/lib/active_merchant/billing/gateways/netbilling.rb +70 -35
  132. data/lib/active_merchant/billing/gateways/netpay.rb +5 -6
  133. data/lib/active_merchant/billing/gateways/network_merchants.rb +241 -0
  134. data/lib/active_merchant/billing/gateways/nmi.rb +274 -10
  135. data/lib/active_merchant/billing/gateways/ogone.rb +90 -47
  136. data/lib/active_merchant/billing/gateways/omise.rb +324 -0
  137. data/lib/active_merchant/billing/gateways/openpay.rb +48 -20
  138. data/lib/active_merchant/billing/gateways/opp.rb +369 -0
  139. data/lib/active_merchant/billing/gateways/optimal_payment.rb +79 -44
  140. data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +22 -21
  141. data/lib/active_merchant/billing/gateways/orbital.rb +346 -102
  142. data/lib/active_merchant/billing/gateways/pac_net_raven.rb +48 -29
  143. data/lib/active_merchant/billing/gateways/pagarme.rb +246 -0
  144. data/lib/active_merchant/billing/gateways/pago_facil.rb +122 -0
  145. data/lib/active_merchant/billing/gateways/pay_conex.rb +245 -0
  146. data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +67 -48
  147. data/lib/active_merchant/billing/gateways/pay_hub.rb +213 -0
  148. data/lib/active_merchant/billing/gateways/pay_junction.rb +20 -26
  149. data/lib/active_merchant/billing/gateways/pay_junction_v2.rb +188 -0
  150. data/lib/active_merchant/billing/gateways/pay_secure.rb +7 -15
  151. data/lib/active_merchant/billing/gateways/paybox_direct.rb +40 -36
  152. data/lib/active_merchant/billing/gateways/payeezy.rb +410 -0
  153. data/lib/active_merchant/billing/gateways/payex.rb +38 -30
  154. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +62 -36
  155. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +11 -7
  156. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +3 -3
  157. data/lib/active_merchant/billing/gateways/payflow.rb +74 -27
  158. data/lib/active_merchant/billing/gateways/payflow_express.rb +77 -81
  159. data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +2 -3
  160. data/lib/active_merchant/billing/gateways/payflow_uk.rb +5 -6
  161. data/lib/active_merchant/billing/gateways/payment_express.rb +54 -45
  162. data/lib/active_merchant/billing/gateways/paymentez.rb +304 -0
  163. data/lib/active_merchant/billing/gateways/paymill.rb +160 -66
  164. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +54 -7
  165. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +4 -0
  166. data/lib/active_merchant/billing/gateways/paypal/paypal_recurring_api.rb +17 -3
  167. data/lib/active_merchant/billing/gateways/paypal.rb +36 -27
  168. data/lib/active_merchant/billing/gateways/paypal_ca.rb +1 -1
  169. data/lib/active_merchant/billing/gateways/paypal_digital_goods.rb +7 -6
  170. data/lib/active_merchant/billing/gateways/paypal_express.rb +32 -4
  171. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +3 -3
  172. data/lib/active_merchant/billing/gateways/payscout.rb +2 -13
  173. data/lib/active_merchant/billing/gateways/paystation.rb +96 -88
  174. data/lib/active_merchant/billing/gateways/payu_in.rb +248 -0
  175. data/lib/active_merchant/billing/gateways/payu_latam.rb +445 -0
  176. data/lib/active_merchant/billing/gateways/payway.rb +8 -8
  177. data/lib/active_merchant/billing/gateways/pin.rb +74 -18
  178. data/lib/active_merchant/billing/gateways/plugnpay.rb +66 -76
  179. data/lib/active_merchant/billing/gateways/pro_pay.rb +326 -0
  180. data/lib/active_merchant/billing/gateways/psigate.rb +30 -30
  181. data/lib/active_merchant/billing/gateways/psl_card.rb +27 -34
  182. data/lib/active_merchant/billing/gateways/qbms.rb +65 -54
  183. data/lib/active_merchant/billing/gateways/quantum.rb +18 -18
  184. data/lib/active_merchant/billing/gateways/quickbooks.rb +290 -0
  185. data/lib/active_merchant/billing/gateways/quickpay/quickpay_common.rb +184 -0
  186. data/lib/active_merchant/billing/gateways/quickpay/quickpay_v10.rb +295 -0
  187. data/lib/active_merchant/billing/gateways/quickpay/quickpay_v4to7.rb +226 -0
  188. data/lib/active_merchant/billing/gateways/quickpay.rb +10 -350
  189. data/lib/active_merchant/billing/gateways/qvalent.rb +236 -0
  190. data/lib/active_merchant/billing/gateways/realex.rb +78 -48
  191. data/lib/active_merchant/billing/gateways/redsys.rb +310 -170
  192. data/lib/active_merchant/billing/gateways/s5.rb +246 -0
  193. data/lib/active_merchant/billing/gateways/safe_charge.rb +262 -0
  194. data/lib/active_merchant/billing/gateways/sage.rb +415 -119
  195. data/lib/active_merchant/billing/gateways/sage_pay.rb +195 -90
  196. data/lib/active_merchant/billing/gateways/sallie_mae.rb +11 -12
  197. data/lib/active_merchant/billing/gateways/secure_net.rb +51 -43
  198. data/lib/active_merchant/billing/gateways/secure_pay.rb +182 -10
  199. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +25 -14
  200. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +10 -18
  201. data/lib/active_merchant/billing/gateways/securion_pay.rb +264 -0
  202. data/lib/active_merchant/billing/gateways/skip_jack.rb +35 -38
  203. data/lib/active_merchant/billing/gateways/smart_ps.rb +50 -42
  204. data/lib/active_merchant/billing/gateways/so_easy_pay.rb +9 -9
  205. data/lib/active_merchant/billing/gateways/spreedly_core.rb +62 -12
  206. data/lib/active_merchant/billing/gateways/stripe.rb +536 -103
  207. data/lib/active_merchant/billing/gateways/swipe_checkout.rb +12 -18
  208. data/lib/active_merchant/billing/gateways/telr.rb +274 -0
  209. data/lib/active_merchant/billing/gateways/tns.rb +22 -0
  210. data/lib/active_merchant/billing/gateways/trans_first.rb +143 -30
  211. data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +608 -0
  212. data/lib/active_merchant/billing/gateways/transact_pro.rb +224 -0
  213. data/lib/active_merchant/billing/gateways/transax.rb +5 -6
  214. data/lib/active_merchant/billing/gateways/transnational.rb +2 -232
  215. data/lib/active_merchant/billing/gateways/trexle.rb +218 -0
  216. data/lib/active_merchant/billing/gateways/trust_commerce.rb +86 -57
  217. data/lib/active_merchant/billing/gateways/usa_epay.rb +4 -4
  218. data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +196 -89
  219. data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +157 -32
  220. data/lib/active_merchant/billing/gateways/vanco.rb +294 -0
  221. data/lib/active_merchant/billing/gateways/verifi.rb +42 -49
  222. data/lib/active_merchant/billing/gateways/viaklix.rb +11 -24
  223. data/lib/active_merchant/billing/gateways/visanet_peru.rb +233 -0
  224. data/lib/active_merchant/billing/gateways/webpay.rb +26 -28
  225. data/lib/active_merchant/billing/gateways/wepay.rb +237 -0
  226. data/lib/active_merchant/billing/gateways/wirecard.rb +153 -31
  227. data/lib/active_merchant/billing/gateways/world_net.rb +344 -0
  228. data/lib/active_merchant/billing/gateways/worldpay.rb +207 -63
  229. data/lib/active_merchant/billing/gateways/worldpay_online_payments.rb +215 -0
  230. data/lib/active_merchant/billing/gateways/worldpay_us.rb +221 -0
  231. data/lib/active_merchant/billing/gateways.rb +8 -11
  232. data/lib/active_merchant/billing/model.rb +30 -0
  233. data/lib/active_merchant/billing/network_tokenization_credit_card.rb +39 -0
  234. data/lib/active_merchant/billing/payment_token.rb +21 -0
  235. data/lib/active_merchant/billing/rails.rb +3 -0
  236. data/lib/active_merchant/billing/response.rb +31 -24
  237. data/lib/active_merchant/billing.rb +7 -1
  238. data/lib/active_merchant/connection.rb +195 -0
  239. data/lib/active_merchant/country.rb +335 -0
  240. data/lib/active_merchant/empty.rb +20 -0
  241. data/lib/active_merchant/errors.rb +35 -0
  242. data/lib/active_merchant/net_http_ssl_connection.rb +10 -0
  243. data/lib/active_merchant/network_connection_retries.rb +80 -0
  244. data/lib/active_merchant/post_data.rb +25 -0
  245. data/lib/active_merchant/posts_data.rb +92 -0
  246. data/lib/active_merchant/version.rb +1 -1
  247. data/lib/active_merchant.rb +23 -27
  248. data/lib/activemerchant.rb +1 -1
  249. data/lib/certs/cacert.pem +3988 -0
  250. data/lib/support/gateway_support.rb +7 -9
  251. data/lib/support/outbound_hosts.rb +13 -10
  252. data/lib/support/ssl_verify.rb +6 -7
  253. data/lib/support/ssl_version.rb +87 -0
  254. metadata +148 -323
  255. checksums.yaml.gz.sig +0 -0
  256. data/gem-public_cert.pem +0 -21
  257. data/lib/active_merchant/billing/expiry_date.rb +0 -34
  258. data/lib/active_merchant/billing/gateways/app55.rb +0 -185
  259. data/lib/active_merchant/billing/gateways/barclays_epdq.rb +0 -314
  260. data/lib/active_merchant/billing/gateways/certo_direct.rb +0 -277
  261. data/lib/active_merchant/billing/gateways/ideal/ideal_base.rb +0 -249
  262. data/lib/active_merchant/billing/gateways/ideal/ideal_rabobank.pem +0 -13
  263. data/lib/active_merchant/billing/gateways/ideal/ideal_response.rb +0 -29
  264. data/lib/active_merchant/billing/gateways/ideal_rabobank.rb +0 -66
  265. data/lib/active_merchant/billing/gateways/orbital/avs_result.rb +0 -93
  266. data/lib/active_merchant/billing/gateways/orbital/cvv_result.rb +0 -34
  267. data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +0 -93
  268. data/lib/active_merchant/billing/gateways/sage/sage_core.rb +0 -114
  269. data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +0 -102
  270. data/lib/active_merchant/billing/gateways/samurai.rb +0 -118
  271. data/lib/active_merchant/billing/gateways/vindicia.rb +0 -361
  272. data/lib/active_merchant/billing/integrations/a1agregator/helper.rb +0 -31
  273. data/lib/active_merchant/billing/integrations/a1agregator/notification.rb +0 -186
  274. data/lib/active_merchant/billing/integrations/a1agregator/status.rb +0 -38
  275. data/lib/active_merchant/billing/integrations/a1agregator.rb +0 -26
  276. data/lib/active_merchant/billing/integrations/action_view_helper.rb +0 -74
  277. data/lib/active_merchant/billing/integrations/alipay/helper.rb +0 -34
  278. data/lib/active_merchant/billing/integrations/alipay/notification.rb +0 -101
  279. data/lib/active_merchant/billing/integrations/alipay.rb +0 -18
  280. data/lib/active_merchant/billing/integrations/authorize_net_sim/helper.rb +0 -229
  281. data/lib/active_merchant/billing/integrations/authorize_net_sim/notification.rb +0 -340
  282. data/lib/active_merchant/billing/integrations/authorize_net_sim.rb +0 -38
  283. data/lib/active_merchant/billing/integrations/bit_pay/helper.rb +0 -64
  284. data/lib/active_merchant/billing/integrations/bit_pay/notification.rb +0 -74
  285. data/lib/active_merchant/billing/integrations/bit_pay/return.rb +0 -10
  286. data/lib/active_merchant/billing/integrations/bit_pay.rb +0 -30
  287. data/lib/active_merchant/billing/integrations/bogus/helper.rb +0 -17
  288. data/lib/active_merchant/billing/integrations/bogus/notification.rb +0 -11
  289. data/lib/active_merchant/billing/integrations/bogus/return.rb +0 -10
  290. data/lib/active_merchant/billing/integrations/bogus.rb +0 -23
  291. data/lib/active_merchant/billing/integrations/chronopay/helper.rb +0 -120
  292. data/lib/active_merchant/billing/integrations/chronopay/notification.rb +0 -158
  293. data/lib/active_merchant/billing/integrations/chronopay/return.rb +0 -10
  294. data/lib/active_merchant/billing/integrations/chronopay.rb +0 -23
  295. data/lib/active_merchant/billing/integrations/citrus/helper.rb +0 -40
  296. data/lib/active_merchant/billing/integrations/citrus/notification.rb +0 -133
  297. data/lib/active_merchant/billing/integrations/citrus/return.rb +0 -40
  298. data/lib/active_merchant/billing/integrations/citrus.rb +0 -51
  299. data/lib/active_merchant/billing/integrations/direc_pay/helper.rb +0 -200
  300. data/lib/active_merchant/billing/integrations/direc_pay/notification.rb +0 -76
  301. data/lib/active_merchant/billing/integrations/direc_pay/return.rb +0 -32
  302. data/lib/active_merchant/billing/integrations/direc_pay/status.rb +0 -37
  303. data/lib/active_merchant/billing/integrations/direc_pay.rb +0 -41
  304. data/lib/active_merchant/billing/integrations/directebanking/helper.rb +0 -90
  305. data/lib/active_merchant/billing/integrations/directebanking/notification.rb +0 -120
  306. data/lib/active_merchant/billing/integrations/directebanking/return.rb +0 -11
  307. data/lib/active_merchant/billing/integrations/directebanking.rb +0 -47
  308. data/lib/active_merchant/billing/integrations/doku/helper.rb +0 -102
  309. data/lib/active_merchant/billing/integrations/doku/notification.rb +0 -69
  310. data/lib/active_merchant/billing/integrations/doku/return.rb +0 -10
  311. data/lib/active_merchant/billing/integrations/doku.rb +0 -24
  312. data/lib/active_merchant/billing/integrations/dotpay/helper.rb +0 -77
  313. data/lib/active_merchant/billing/integrations/dotpay/notification.rb +0 -86
  314. data/lib/active_merchant/billing/integrations/dotpay/return.rb +0 -11
  315. data/lib/active_merchant/billing/integrations/dotpay.rb +0 -22
  316. data/lib/active_merchant/billing/integrations/dwolla/common.rb +0 -23
  317. data/lib/active_merchant/billing/integrations/dwolla/helper.rb +0 -43
  318. data/lib/active_merchant/billing/integrations/dwolla/notification.rb +0 -64
  319. data/lib/active_merchant/billing/integrations/dwolla/return.rb +0 -49
  320. data/lib/active_merchant/billing/integrations/dwolla.rb +0 -23
  321. data/lib/active_merchant/billing/integrations/e_payment_plans/helper.rb +0 -34
  322. data/lib/active_merchant/billing/integrations/e_payment_plans/notification.rb +0 -84
  323. data/lib/active_merchant/billing/integrations/e_payment_plans.rb +0 -48
  324. data/lib/active_merchant/billing/integrations/easy_pay/common.rb +0 -40
  325. data/lib/active_merchant/billing/integrations/easy_pay/helper.rb +0 -36
  326. data/lib/active_merchant/billing/integrations/easy_pay/notification.rb +0 -59
  327. data/lib/active_merchant/billing/integrations/easy_pay.rb +0 -30
  328. data/lib/active_merchant/billing/integrations/epay/helper.rb +0 -55
  329. data/lib/active_merchant/billing/integrations/epay/notification.rb +0 -110
  330. data/lib/active_merchant/billing/integrations/epay.rb +0 -21
  331. data/lib/active_merchant/billing/integrations/first_data/helper.rb +0 -61
  332. data/lib/active_merchant/billing/integrations/first_data/notification.rb +0 -56
  333. data/lib/active_merchant/billing/integrations/first_data.rb +0 -38
  334. data/lib/active_merchant/billing/integrations/gestpay/common.rb +0 -42
  335. data/lib/active_merchant/billing/integrations/gestpay/helper.rb +0 -70
  336. data/lib/active_merchant/billing/integrations/gestpay/notification.rb +0 -85
  337. data/lib/active_merchant/billing/integrations/gestpay/return.rb +0 -10
  338. data/lib/active_merchant/billing/integrations/gestpay.rb +0 -25
  339. data/lib/active_merchant/billing/integrations/helper.rb +0 -117
  340. data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +0 -58
  341. data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +0 -59
  342. data/lib/active_merchant/billing/integrations/hi_trust/return.rb +0 -68
  343. data/lib/active_merchant/billing/integrations/hi_trust.rb +0 -27
  344. data/lib/active_merchant/billing/integrations/ipay88/helper.rb +0 -118
  345. data/lib/active_merchant/billing/integrations/ipay88/notification.rb +0 -103
  346. data/lib/active_merchant/billing/integrations/ipay88/return.rb +0 -29
  347. data/lib/active_merchant/billing/integrations/ipay88.rb +0 -23
  348. data/lib/active_merchant/billing/integrations/liqpay/helper.rb +0 -43
  349. data/lib/active_merchant/billing/integrations/liqpay/notification.rb +0 -89
  350. data/lib/active_merchant/billing/integrations/liqpay/return.rb +0 -83
  351. data/lib/active_merchant/billing/integrations/liqpay.rb +0 -30
  352. data/lib/active_merchant/billing/integrations/maksuturva/helper.rb +0 -119
  353. data/lib/active_merchant/billing/integrations/maksuturva/notification.rb +0 -48
  354. data/lib/active_merchant/billing/integrations/maksuturva.rb +0 -86
  355. data/lib/active_merchant/billing/integrations/moneybookers/helper.rb +0 -75
  356. data/lib/active_merchant/billing/integrations/moneybookers/notification.rb +0 -123
  357. data/lib/active_merchant/billing/integrations/moneybookers.rb +0 -26
  358. data/lib/active_merchant/billing/integrations/nochex/helper.rb +0 -68
  359. data/lib/active_merchant/billing/integrations/nochex/notification.rb +0 -94
  360. data/lib/active_merchant/billing/integrations/nochex/return.rb +0 -10
  361. data/lib/active_merchant/billing/integrations/nochex.rb +0 -88
  362. data/lib/active_merchant/billing/integrations/notification.rb +0 -71
  363. data/lib/active_merchant/billing/integrations/paxum/common.rb +0 -24
  364. data/lib/active_merchant/billing/integrations/paxum/helper.rb +0 -42
  365. data/lib/active_merchant/billing/integrations/paxum/notification.rb +0 -33
  366. data/lib/active_merchant/billing/integrations/paxum.rb +0 -44
  367. data/lib/active_merchant/billing/integrations/pay_fast/common.rb +0 -42
  368. data/lib/active_merchant/billing/integrations/pay_fast/helper.rb +0 -50
  369. data/lib/active_merchant/billing/integrations/pay_fast/notification.rb +0 -134
  370. data/lib/active_merchant/billing/integrations/pay_fast/return.rb +0 -10
  371. data/lib/active_merchant/billing/integrations/pay_fast.rb +0 -70
  372. data/lib/active_merchant/billing/integrations/paydollar/helper.rb +0 -41
  373. data/lib/active_merchant/billing/integrations/paydollar/notification.rb +0 -60
  374. data/lib/active_merchant/billing/integrations/paydollar/return.rb +0 -15
  375. data/lib/active_merchant/billing/integrations/paydollar.rb +0 -59
  376. data/lib/active_merchant/billing/integrations/payflow_link/helper.rb +0 -116
  377. data/lib/active_merchant/billing/integrations/payflow_link/notification.rb +0 -78
  378. data/lib/active_merchant/billing/integrations/payflow_link.rb +0 -21
  379. data/lib/active_merchant/billing/integrations/paypal/helper.rb +0 -119
  380. data/lib/active_merchant/billing/integrations/paypal/notification.rb +0 -227
  381. data/lib/active_merchant/billing/integrations/paypal/return.rb +0 -10
  382. data/lib/active_merchant/billing/integrations/paypal.rb +0 -39
  383. data/lib/active_merchant/billing/integrations/paypal_payments_advanced/helper.rb +0 -15
  384. data/lib/active_merchant/billing/integrations/paypal_payments_advanced.rb +0 -20
  385. data/lib/active_merchant/billing/integrations/paysbuy/helper.rb +0 -15
  386. data/lib/active_merchant/billing/integrations/paysbuy/notification.rb +0 -39
  387. data/lib/active_merchant/billing/integrations/paysbuy.rb +0 -36
  388. data/lib/active_merchant/billing/integrations/payu_in/helper.rb +0 -76
  389. data/lib/active_merchant/billing/integrations/payu_in/notification.rb +0 -154
  390. data/lib/active_merchant/billing/integrations/payu_in/return.rb +0 -36
  391. data/lib/active_merchant/billing/integrations/payu_in.rb +0 -36
  392. data/lib/active_merchant/billing/integrations/payu_in_paisa/helper.rb +0 -19
  393. data/lib/active_merchant/billing/integrations/payu_in_paisa/notification.rb +0 -13
  394. data/lib/active_merchant/billing/integrations/payu_in_paisa/return.rb +0 -16
  395. data/lib/active_merchant/billing/integrations/payu_in_paisa.rb +0 -30
  396. data/lib/active_merchant/billing/integrations/platron/helper.rb +0 -32
  397. data/lib/active_merchant/billing/integrations/platron/notification.rb +0 -113
  398. data/lib/active_merchant/billing/integrations/platron.rb +0 -28
  399. data/lib/active_merchant/billing/integrations/pxpay/helper.rb +0 -112
  400. data/lib/active_merchant/billing/integrations/pxpay/notification.rb +0 -157
  401. data/lib/active_merchant/billing/integrations/pxpay/return.rb +0 -25
  402. data/lib/active_merchant/billing/integrations/pxpay.rb +0 -31
  403. data/lib/active_merchant/billing/integrations/quickpay/helper.rb +0 -96
  404. data/lib/active_merchant/billing/integrations/quickpay/notification.rb +0 -137
  405. data/lib/active_merchant/billing/integrations/quickpay.rb +0 -21
  406. data/lib/active_merchant/billing/integrations/rbkmoney/helper.rb +0 -23
  407. data/lib/active_merchant/billing/integrations/rbkmoney/notification.rb +0 -91
  408. data/lib/active_merchant/billing/integrations/rbkmoney.rb +0 -17
  409. data/lib/active_merchant/billing/integrations/return.rb +0 -42
  410. data/lib/active_merchant/billing/integrations/robokassa/common.rb +0 -19
  411. data/lib/active_merchant/billing/integrations/robokassa/helper.rb +0 -50
  412. data/lib/active_merchant/billing/integrations/robokassa/notification.rb +0 -55
  413. data/lib/active_merchant/billing/integrations/robokassa/return.rb +0 -17
  414. data/lib/active_merchant/billing/integrations/robokassa.rb +0 -49
  415. data/lib/active_merchant/billing/integrations/sage_pay_form/encryption.rb +0 -33
  416. data/lib/active_merchant/billing/integrations/sage_pay_form/helper.rb +0 -136
  417. data/lib/active_merchant/billing/integrations/sage_pay_form/notification.rb +0 -210
  418. data/lib/active_merchant/billing/integrations/sage_pay_form/return.rb +0 -31
  419. data/lib/active_merchant/billing/integrations/sage_pay_form.rb +0 -37
  420. data/lib/active_merchant/billing/integrations/two_checkout/helper.rb +0 -107
  421. data/lib/active_merchant/billing/integrations/two_checkout/notification.rb +0 -171
  422. data/lib/active_merchant/billing/integrations/two_checkout/return.rb +0 -58
  423. data/lib/active_merchant/billing/integrations/two_checkout.rb +0 -44
  424. data/lib/active_merchant/billing/integrations/valitor/helper.rb +0 -86
  425. data/lib/active_merchant/billing/integrations/valitor/notification.rb +0 -13
  426. data/lib/active_merchant/billing/integrations/valitor/response_fields.rb +0 -97
  427. data/lib/active_merchant/billing/integrations/valitor/return.rb +0 -13
  428. data/lib/active_merchant/billing/integrations/valitor.rb +0 -33
  429. data/lib/active_merchant/billing/integrations/verkkomaksut/helper.rb +0 -88
  430. data/lib/active_merchant/billing/integrations/verkkomaksut/notification.rb +0 -59
  431. data/lib/active_merchant/billing/integrations/verkkomaksut.rb +0 -20
  432. data/lib/active_merchant/billing/integrations/web_pay/common.rb +0 -50
  433. data/lib/active_merchant/billing/integrations/web_pay/helper.rb +0 -68
  434. data/lib/active_merchant/billing/integrations/web_pay/notification.rb +0 -51
  435. data/lib/active_merchant/billing/integrations/web_pay.rb +0 -45
  436. data/lib/active_merchant/billing/integrations/webmoney/common.rb +0 -17
  437. data/lib/active_merchant/billing/integrations/webmoney/helper.rb +0 -40
  438. data/lib/active_merchant/billing/integrations/webmoney/notification.rb +0 -47
  439. data/lib/active_merchant/billing/integrations/webmoney.rb +0 -43
  440. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/common.rb +0 -104
  441. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/helper.rb +0 -145
  442. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/notification.rb +0 -101
  443. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/return.rb +0 -35
  444. data/lib/active_merchant/billing/integrations/wirecard_checkout_page.rb +0 -39
  445. data/lib/active_merchant/billing/integrations/world_pay/helper.rb +0 -101
  446. data/lib/active_merchant/billing/integrations/world_pay/notification.rb +0 -160
  447. data/lib/active_merchant/billing/integrations/world_pay.rb +0 -34
  448. data/lib/active_merchant/billing/integrations.rb +0 -17
  449. data.tar.gz.sig +0 -0
  450. metadata.gz.sig +0 -1
@@ -1,42 +1,17 @@
1
- require File.dirname(__FILE__) + '/viaklix'
1
+ require 'active_merchant/billing/gateways/viaklix'
2
2
 
3
3
  module ActiveMerchant #:nodoc:
4
4
  module Billing #:nodoc:
5
- # = Elavon Virtual Merchant Gateway
6
- #
7
- # == Example use:
8
- #
9
- # gateway = ActiveMerchant::Billing::ElavonGateway.new(
10
- # :login => "my_virtual_merchant_id",
11
- # :password => "my_virtual_merchant_pin",
12
- # :user => "my_virtual_merchant_user_id" # optional
13
- # )
14
- #
15
- # # set up credit card obj as in main ActiveMerchant example
16
- # creditcard = ActiveMerchant::Billing::CreditCard.new(
17
- # :type => 'visa',
18
- # :number => '41111111111111111',
19
- # :month => 10,
20
- # :year => 2011,
21
- # :first_name => 'Bob',
22
- # :last_name => 'Bobsen'
23
- # )
24
- #
25
- # # run request
26
- # response = gateway.purchase(1000, creditcard) # authorize and capture 10 USD
27
- #
28
- # puts response.success? # Check whether the transaction was successful
29
- # puts response.message # Retrieve the message returned by Elavon
30
- # puts response.authorization # Retrieve the unique transaction ID returned by Elavon
31
- #
32
5
  class ElavonGateway < Gateway
6
+ include Empty
7
+
33
8
  class_attribute :test_url, :live_url, :delimiter, :actions
34
9
 
35
- self.test_url = 'https://demo.myvirtualmerchant.com/VirtualMerchantDemo/process.do'
36
- self.live_url = 'https://www.myvirtualmerchant.com/VirtualMerchant/process.do'
10
+ self.test_url = 'https://api.demo.convergepay.com/VirtualMerchantDemo/process.do'
11
+ self.live_url = 'https://api.convergepay.com/VirtualMerchant/process.do'
37
12
 
38
13
  self.display_name = 'Elavon MyVirtualMerchant'
39
- self.supported_countries = %w(US CA PR DE IE NO PL LU BE NL)
14
+ self.supported_countries = %w(US CA PR DE IE NO PL LU BE NL MX)
40
15
  self.supported_cardtypes = [:visa, :master, :american_express, :discover]
41
16
  self.homepage_url = 'http://www.elavon.com/'
42
17
 
@@ -47,44 +22,33 @@ module ActiveMerchant #:nodoc:
47
22
  :refund => 'CCRETURN',
48
23
  :authorize => 'CCAUTHONLY',
49
24
  :capture => 'CCFORCE',
50
- :void => 'CCVOID'
25
+ :capture_complete => 'CCCOMPLETE',
26
+ :void => 'CCDELETE',
27
+ :store => 'CCGETTOKEN',
28
+ :update => 'CCUPDATETOKEN',
51
29
  }
52
30
 
53
- # Initialize the Gateway
54
- #
55
- # The gateway requires that a valid login and password be passed
56
- # in the +options+ hash.
57
- #
58
- # ==== Options
59
- #
60
- # * <tt>:login</tt> -- Merchant ID
61
- # * <tt>:password</tt> -- PIN
62
- # * <tt>:user</tt> -- Specify a subuser of the account (optional)
63
- # * <tt>:test => +true+ or +false+</tt> -- Force test transactions
64
31
  def initialize(options = {})
65
32
  requires!(options, :login, :password)
66
33
  super
67
34
  end
68
35
 
69
- # Make a purchase
70
- def purchase(money, creditcard, options = {})
36
+ def purchase(money, payment_method, options = {})
71
37
  form = {}
72
38
  add_salestax(form, options)
73
39
  add_invoice(form, options)
74
- add_creditcard(form, creditcard)
40
+ if payment_method.is_a?(String)
41
+ add_token(form, payment_method)
42
+ else
43
+ add_creditcard(form, payment_method)
44
+ end
75
45
  add_address(form, options)
76
46
  add_customer_data(form, options)
77
47
  add_test_mode(form, options)
78
- commit(:purchase, money, form)
48
+ add_ip(form, options)
49
+ commit(:purchase, money, form, options)
79
50
  end
80
51
 
81
- # Authorize a credit card for a given amount.
82
- #
83
- # ==== Parameters
84
- # * <tt>money</tt> - The amount to be authorized as an Integer value in cents.
85
- # * <tt>credit_card</tt> - The CreditCard details for the transaction.
86
- # * <tt>options</tt>
87
- # * <tt>:billing_address</tt> - The billing address for the cardholder.
88
52
  def authorize(money, creditcard, options = {})
89
53
  form = {}
90
54
  add_salestax(form, options)
@@ -93,68 +57,46 @@ module ActiveMerchant #:nodoc:
93
57
  add_address(form, options)
94
58
  add_customer_data(form, options)
95
59
  add_test_mode(form, options)
96
- commit(:authorize, money, form)
60
+ add_ip(form, options)
61
+ commit(:authorize, money, form, options)
97
62
  end
98
63
 
99
- # Capture authorized funds from a credit card.
100
- #
101
- # ==== Parameters
102
- # * <tt>money</tt> - The amount to be captured as an Integer value in cents.
103
- # * <tt>authorization</tt> - The approval code returned from the initial authorization.
104
- # * <tt>options</tt>
105
- # * <tt>:credit_card</tt> - The CreditCard details from the initial transaction (required).
106
64
  def capture(money, authorization, options = {})
107
- requires!(options, :credit_card)
108
-
109
65
  form = {}
110
- add_salestax(form, options)
111
- add_approval_code(form, authorization)
112
- add_invoice(form, options)
113
- add_creditcard(form, options[:credit_card])
114
- add_customer_data(form, options)
115
- add_test_mode(form, options)
116
- commit(:capture, money, form)
117
- end
118
-
119
- # Refund a transaction.
120
- #
121
- # This transaction indicates to the gateway that
122
- # money should flow from the merchant to the customer.
123
- #
124
- # ==== Parameters
125
- #
126
- # * <tt>money</tt> -- The amount to be credited to the customer as an Integer value in cents.
127
- # * <tt>identification</tt> -- The ID of the original transaction against which the refund is being issued.
128
- # * <tt>options</tt> -- A hash of parameters.
66
+ if options[:credit_card]
67
+ action = :capture
68
+ add_salestax(form, options)
69
+ add_approval_code(form, authorization)
70
+ add_invoice(form, options)
71
+ add_creditcard(form, options[:credit_card])
72
+ add_customer_data(form, options)
73
+ add_test_mode(form, options)
74
+ else
75
+ action = :capture_complete
76
+ add_txn_id(form, authorization)
77
+ add_partial_shipment_flag(form, options)
78
+ add_test_mode(form, options)
79
+ end
80
+ commit(action, money, form, options)
81
+ end
82
+
129
83
  def refund(money, identification, options = {})
130
84
  form = {}
131
85
  add_txn_id(form, identification)
132
86
  add_test_mode(form, options)
133
- commit(:refund, money, form)
87
+ commit(:refund, money, form, options)
134
88
  end
135
89
 
136
- # Void a previous transaction
137
- #
138
- # ==== Parameters
139
- #
140
- # * <tt>authorization</tt> - The authorization returned from the previous request.
141
90
  def void(identification, options = {})
142
91
  form = {}
143
92
  add_txn_id(form, identification)
144
93
  add_test_mode(form, options)
145
- commit(:void, nil, form)
94
+ commit(:void, nil, form, options)
146
95
  end
147
96
 
148
- # Make a credit to a card. Use the refund method if you'd like to credit using
149
- # previous transaction
150
- #
151
- # ==== Parameters
152
- # * <tt>money</tt> - The amount to be credited as an Integer value in cents.
153
- # * <tt>creditcard</tt> - The credit card to be credited.
154
- # * <tt>options</tt>
155
97
  def credit(money, creditcard, options = {})
156
98
  if creditcard.is_a?(String)
157
- raise ArgumentError, "Reference credits are not supported. Please supply the original credit card or use the #refund method."
99
+ raise ArgumentError, 'Reference credits are not supported. Please supply the original credit card or use the #refund method.'
158
100
  end
159
101
 
160
102
  form = {}
@@ -163,14 +105,53 @@ module ActiveMerchant #:nodoc:
163
105
  add_address(form, options)
164
106
  add_customer_data(form, options)
165
107
  add_test_mode(form, options)
166
- commit(:credit, money, form)
108
+ commit(:credit, money, form, options)
167
109
  end
168
110
 
111
+ def verify(credit_card, options = {})
112
+ MultiResponse.run(:use_first_response) do |r|
113
+ r.process { authorize(100, credit_card, options) }
114
+ r.process(:ignore_result) { void(r.authorization, options) }
115
+ end
116
+ end
117
+
118
+ def store(creditcard, options = {})
119
+ form = {}
120
+ add_creditcard(form, creditcard)
121
+ add_address(form, options)
122
+ add_customer_data(form, options)
123
+ add_test_mode(form, options)
124
+ add_verification(form, options)
125
+ form[:add_token] = 'Y'
126
+ commit(:store, nil, form, options)
127
+ end
128
+
129
+ def update(token, creditcard, options = {})
130
+ form = {}
131
+ add_token(form, token)
132
+ add_creditcard(form, creditcard)
133
+ add_address(form, options)
134
+ add_customer_data(form, options)
135
+ add_test_mode(form, options)
136
+ commit(:update, nil, form, options)
137
+ end
138
+
139
+ def supports_scrubbing?
140
+ true
141
+ end
142
+
143
+ def scrub(transcript)
144
+ transcript.
145
+ gsub(%r((&?ssl_pin=)[^&]*)i, '\1[FILTERED]').
146
+ gsub(%r((&?ssl_card_number=)[^&\\n\r\n]*)i, '\1[FILTERED]').
147
+ gsub(%r((&?ssl_cvv2cvc2=)[^&]*)i, '\1[FILTERED]')
148
+ end
169
149
 
170
150
  private
171
- def add_invoice(form,options)
172
- form[:invoice_number] = (options[:order_id] || options[:invoice]).to_s.slice(0, 10)
173
- form[:description] = options[:description].to_s.slice(0, 255)
151
+
152
+ def add_invoice(form, options)
153
+ form[:invoice_number] = truncate((options[:order_id] || options[:invoice]), 10)
154
+ form[:description] = truncate(options[:description], 255)
174
155
  end
175
156
 
176
157
  def add_approval_code(form, authorization)
@@ -193,8 +174,12 @@ module ActiveMerchant #:nodoc:
193
174
  add_verification_value(form, creditcard)
194
175
  end
195
176
 
196
- form[:first_name] = creditcard.first_name.to_s.slice(0, 20)
197
- form[:last_name] = creditcard.last_name.to_s.slice(0, 30)
177
+ form[:first_name] = truncate(creditcard.first_name, 20)
178
+ form[:last_name] = truncate(creditcard.last_name, 30)
179
+ end
180
+
181
+ def add_token(form, token)
182
+ form[:token] = token
198
183
  end
199
184
 
200
185
  def add_verification_value(form, creditcard)
@@ -203,60 +188,62 @@ module ActiveMerchant #:nodoc:
203
188
  end
204
189
 
205
190
  def add_customer_data(form, options)
206
- form[:email] = options[:email].to_s.slice(0, 100) unless options[:email].blank?
207
- form[:customer_code] = options[:customer].to_s.slice(0, 10) unless options[:customer].blank?
191
+ form[:email] = truncate(options[:email], 100) unless empty?(options[:email])
192
+ form[:customer_code] = truncate(options[:customer], 10) unless empty?(options[:customer])
193
+ form[:customer_number] = options[:customer_number] unless empty?(options[:customer_number])
194
+ options[:custom_fields]&.each do |key, value|
195
+ form[key.to_s] = value
196
+ end
208
197
  end
209
198
 
210
199
  def add_salestax(form, options)
211
200
  form[:salestax] = options[:tax] if options[:tax].present?
212
201
  end
213
202
 
214
- def expdate(creditcard)
215
- year = sprintf("%.4i", creditcard.year)
216
- month = sprintf("%.2i", creditcard.month)
217
- "#{month}#{year[2..3]}"
218
- end
219
-
220
- def add_address(form,options)
203
+ def add_address(form, options)
221
204
  billing_address = options[:billing_address] || options[:address]
222
205
 
223
206
  if billing_address
224
- form[:avs_address] = billing_address[:address1].to_s.slice(0, 30)
225
- form[:address2] = billing_address[:address2].to_s.slice(0, 30)
226
- form[:avs_zip] = billing_address[:zip].to_s.slice(0, 10)
227
- form[:city] = billing_address[:city].to_s.slice(0, 30)
228
- form[:state] = billing_address[:state].to_s.slice(0, 10)
229
- form[:company] = billing_address[:company].to_s.slice(0, 50)
230
- form[:phone] = billing_address[:phone].to_s.slice(0, 20)
231
- form[:country] = billing_address[:country].to_s.slice(0, 50)
207
+ form[:avs_address] = truncate(billing_address[:address1], 30)
208
+ form[:address2] = truncate(billing_address[:address2], 30)
209
+ form[:avs_zip] = truncate(billing_address[:zip].to_s.gsub(/[^a-zA-Z0-9]/, ''), 9)
210
+ form[:city] = truncate(billing_address[:city], 30)
211
+ form[:state] = truncate(billing_address[:state], 10)
212
+ form[:company] = truncate(billing_address[:company], 50)
213
+ form[:phone] = truncate(billing_address[:phone], 20)
214
+ form[:country] = truncate(billing_address[:country], 50)
232
215
  end
233
216
 
234
217
  if shipping_address = options[:shipping_address]
235
- first_name, last_name = parse_first_and_last_name(shipping_address[:name])
236
- form[:ship_to_first_name] = first_name.to_s.slice(0, 20)
237
- form[:ship_to_last_name] = last_name.to_s.slice(0, 30)
238
- form[:ship_to_address1] = shipping_address[:address1].to_s.slice(0, 30)
239
- form[:ship_to_address2] = shipping_address[:address2].to_s.slice(0, 30)
240
- form[:ship_to_city] = shipping_address[:city].to_s.slice(0, 30)
241
- form[:ship_to_state] = shipping_address[:state].to_s.slice(0, 10)
242
- form[:ship_to_company] = shipping_address[:company].to_s.slice(0, 50)
243
- form[:ship_to_country] = shipping_address[:country].to_s.slice(0, 50)
244
- form[:ship_to_zip] = shipping_address[:zip].to_s.slice(0, 10)
218
+ first_name, last_name = split_names(shipping_address[:name])
219
+ form[:ship_to_first_name] = truncate(first_name, 20)
220
+ form[:ship_to_last_name] = truncate(last_name, 30)
221
+ form[:ship_to_address1] = truncate(shipping_address[:address1], 30)
222
+ form[:ship_to_address2] = truncate(shipping_address[:address2], 30)
223
+ form[:ship_to_city] = truncate(shipping_address[:city], 30)
224
+ form[:ship_to_state] = truncate(shipping_address[:state], 10)
225
+ form[:ship_to_company] = truncate(shipping_address[:company], 50)
226
+ form[:ship_to_country] = truncate(shipping_address[:country], 50)
227
+ form[:ship_to_zip] = truncate(shipping_address[:zip], 10)
245
228
  end
246
229
  end
247
230
 
248
- def parse_first_and_last_name(value)
249
- name = value.to_s.split(' ')
250
-
251
- last_name = name.pop || ''
252
- first_name = name.join(' ')
253
- [ first_name, last_name ]
231
+ def add_verification(form, options)
232
+ form[:verify] = 'Y' if options[:verify]
254
233
  end
255
234
 
256
235
  def add_test_mode(form, options)
257
236
  form[:test_mode] = 'TRUE' if options[:test_mode]
258
237
  end
259
238
 
239
+ def add_partial_shipment_flag(form, options)
240
+ form[:partial_shipment_flag] = 'Y' if options[:partial_shipment_flag]
241
+ end
242
+
243
+ def add_ip(form, options)
244
+ form[:cardholder_ip] = options[:ip] if options.has_key?(:ip)
245
+ end
246
+
260
247
  def message_from(response)
261
248
  success?(response) ? response['result_message'] : response['errorMessage']
262
249
  end
@@ -265,11 +252,11 @@ module ActiveMerchant #:nodoc:
265
252
  !response.has_key?('errorMessage')
266
253
  end
267
254
 
268
- def commit(action, money, parameters)
255
+ def commit(action, money, parameters, options)
269
256
  parameters[:amount] = amount(money)
270
257
  parameters[:transaction_type] = self.actions[action]
271
258
 
272
- response = parse( ssl_post(test? ? self.test_url : self.live_url, post_data(parameters)) )
259
+ response = parse(ssl_post(test? ? self.test_url : self.live_url, post_data(parameters, options)))
273
260
 
274
261
  Response.new(response['result'] == '0', message_from(response), response,
275
262
  :test => @options[:test] || test?,
@@ -279,10 +266,23 @@ module ActiveMerchant #:nodoc:
279
266
  )
280
267
  end
281
268
 
282
- def post_data(parameters)
269
+ def post_data(parameters, options)
283
270
  result = preamble
284
271
  result.merge!(parameters)
285
- result.collect { |key, value| "ssl_#{key}=#{CGI.escape(value.to_s)}" }.join("&")
272
+ result.collect { |key, value| post_data_string(key, value, options) }.join('&')
273
+ end
274
+
275
+ def post_data_string(key, value, options)
276
+ if custom_field?(key, options)
277
+ "#{key}=#{CGI.escape(value.to_s)}"
278
+ else
279
+ "ssl_#{key}=#{CGI.escape(value.to_s)}"
280
+ end
281
+ end
282
+
283
+ def custom_field?(field_name, options)
284
+ return true if options[:custom_fields]&.include?(field_name.to_sym)
285
+ field_name == :customer_number
286
286
  end
287
287
 
288
288
  def preamble
@@ -293,20 +293,19 @@ module ActiveMerchant #:nodoc:
293
293
  'result_format' => 'ASCII'
294
294
  }
295
295
 
296
- result['user_id'] = @options[:user] unless @options[:user].blank?
296
+ result['user_id'] = @options[:user] unless empty?(@options[:user])
297
297
  result
298
298
  end
299
299
 
300
300
  def parse(msg)
301
301
  resp = {}
302
- msg.split(self.delimiter).collect{|li|
303
- key, value = li.split("=")
304
- resp[key.strip.gsub(/^ssl_/, '')] = value.to_s.strip
305
- }
302
+ msg.split(self.delimiter).collect { |li|
303
+ key, value = li.split('=')
304
+ resp[key.to_s.strip.gsub(/^ssl_/, '')] = value.to_s.strip
305
+ }
306
306
  resp
307
307
  end
308
308
 
309
309
  end
310
310
  end
311
311
  end
312
-