activemerchant 1.42.6 → 1.90.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. checksums.yaml +5 -13
  2. data/CHANGELOG +1420 -2
  3. data/CONTRIBUTORS +106 -0
  4. data/README.md +107 -103
  5. data/lib/active_merchant/billing/apple_pay_payment_token.rb +22 -0
  6. data/lib/active_merchant/billing/avs_result.rb +12 -13
  7. data/lib/active_merchant/billing/base.rb +13 -16
  8. data/lib/active_merchant/billing/check.rb +35 -24
  9. data/lib/active_merchant/billing/compatibility.rb +117 -0
  10. data/lib/active_merchant/billing/credit_card.rb +196 -81
  11. data/lib/active_merchant/billing/credit_card_formatting.rb +6 -4
  12. data/lib/active_merchant/billing/credit_card_methods.rb +199 -75
  13. data/lib/active_merchant/billing/cvv_result.rb +15 -15
  14. data/lib/active_merchant/billing/gateway.rb +171 -39
  15. data/lib/active_merchant/billing/gateways/adyen.rb +380 -0
  16. data/lib/active_merchant/billing/gateways/allied_wallet.rb +205 -0
  17. data/lib/active_merchant/billing/gateways/authorize_net.rb +933 -604
  18. data/lib/active_merchant/billing/gateways/authorize_net_arb.rb +417 -0
  19. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +74 -54
  20. data/lib/active_merchant/billing/gateways/axcessms.rb +181 -0
  21. data/lib/active_merchant/billing/gateways/balanced.rb +130 -370
  22. data/lib/active_merchant/billing/gateways/bank_frick.rb +225 -0
  23. data/lib/active_merchant/billing/gateways/banwire.rb +23 -12
  24. data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +351 -0
  25. data/lib/active_merchant/billing/gateways/barclays_epdq_extra_plus.rb +6 -6
  26. data/lib/active_merchant/billing/gateways/be2bill.rb +2 -2
  27. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +109 -32
  28. data/lib/active_merchant/billing/gateways/beanstream.rb +59 -13
  29. data/lib/active_merchant/billing/gateways/beanstream_interac.rb +12 -9
  30. data/lib/active_merchant/billing/gateways/blue_pay.rb +520 -498
  31. data/lib/active_merchant/billing/gateways/blue_snap.rb +347 -0
  32. data/lib/active_merchant/billing/gateways/bogus.rb +80 -46
  33. data/lib/active_merchant/billing/gateways/borgun.rb +220 -0
  34. data/lib/active_merchant/billing/gateways/bpoint.rb +277 -0
  35. data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +15 -2
  36. data/lib/active_merchant/billing/gateways/braintree.rb +2 -2
  37. data/lib/active_merchant/billing/gateways/braintree_blue.rb +311 -121
  38. data/lib/active_merchant/billing/gateways/braintree_orange.rb +4 -4
  39. data/lib/active_merchant/billing/gateways/bridge_pay.rb +244 -0
  40. data/lib/active_merchant/billing/gateways/cams.rb +230 -0
  41. data/lib/active_merchant/billing/gateways/card_connect.rb +311 -0
  42. data/lib/active_merchant/billing/gateways/card_save.rb +6 -7
  43. data/lib/active_merchant/billing/gateways/card_stream.rb +235 -89
  44. data/lib/active_merchant/billing/gateways/cardknox.rb +327 -0
  45. data/lib/active_merchant/billing/gateways/cardprocess.rb +254 -0
  46. data/lib/active_merchant/billing/gateways/cashnet.rb +219 -0
  47. data/lib/active_merchant/billing/gateways/cc5.rb +50 -8
  48. data/lib/active_merchant/billing/gateways/cecabank.rb +27 -14
  49. data/lib/active_merchant/billing/gateways/cenpos.rb +327 -0
  50. data/lib/active_merchant/billing/gateways/checkout.rb +214 -0
  51. data/lib/active_merchant/billing/gateways/checkout_v2.rb +233 -0
  52. data/lib/active_merchant/billing/gateways/citrus_pay.rb +22 -0
  53. data/lib/active_merchant/billing/gateways/clearhaus.rb +220 -0
  54. data/lib/active_merchant/billing/gateways/commercegate.rb +142 -0
  55. data/lib/active_merchant/billing/gateways/conekta.rb +91 -97
  56. data/lib/active_merchant/billing/gateways/creditcall.rb +271 -0
  57. data/lib/active_merchant/billing/gateways/credorax.rb +356 -0
  58. data/lib/active_merchant/billing/gateways/ct_payment.rb +268 -0
  59. data/lib/active_merchant/billing/gateways/culqi.rb +277 -0
  60. data/lib/active_merchant/billing/gateways/cyber_source.rb +294 -158
  61. data/lib/active_merchant/billing/gateways/d_local.rb +226 -0
  62. data/lib/active_merchant/billing/gateways/data_cash.rb +59 -347
  63. data/lib/active_merchant/billing/gateways/dibs.rb +199 -0
  64. data/lib/active_merchant/billing/gateways/digitzs.rb +292 -0
  65. data/lib/active_merchant/billing/gateways/ebanx.rb +296 -0
  66. data/lib/active_merchant/billing/gateways/efsnet.rb +24 -39
  67. data/lib/active_merchant/billing/gateways/elavon.rb +146 -147
  68. data/lib/active_merchant/billing/gateways/element.rb +356 -0
  69. data/lib/active_merchant/billing/gateways/epay.rb +41 -31
  70. data/lib/active_merchant/billing/gateways/evo_ca.rb +1 -1
  71. data/lib/active_merchant/billing/gateways/eway.rb +79 -78
  72. data/lib/active_merchant/billing/gateways/eway_managed.rb +35 -36
  73. data/lib/active_merchant/billing/gateways/eway_rapid.rb +369 -228
  74. data/lib/active_merchant/billing/gateways/exact.rb +32 -26
  75. data/lib/active_merchant/billing/gateways/ezic.rb +195 -0
  76. data/lib/active_merchant/billing/gateways/fat_zebra.rb +90 -64
  77. data/lib/active_merchant/billing/gateways/federated_canada.rb +6 -14
  78. data/lib/active_merchant/billing/gateways/finansbank.rb +3 -3
  79. data/lib/active_merchant/billing/gateways/first_giving.rb +142 -0
  80. data/lib/active_merchant/billing/gateways/first_pay.rb +128 -122
  81. data/lib/active_merchant/billing/gateways/firstdata_e4.rb +190 -64
  82. data/lib/active_merchant/billing/gateways/firstdata_e4_v27.rb +446 -0
  83. data/lib/active_merchant/billing/gateways/flo2cash.rb +215 -0
  84. data/lib/active_merchant/billing/gateways/flo2cash_simple.rb +20 -0
  85. data/lib/active_merchant/billing/gateways/forte.rb +270 -0
  86. data/lib/active_merchant/billing/gateways/garanti.rb +29 -27
  87. data/lib/active_merchant/billing/gateways/global_collect.rb +340 -0
  88. data/lib/active_merchant/billing/gateways/global_transport.rb +194 -0
  89. data/lib/active_merchant/billing/gateways/hdfc.rb +35 -36
  90. data/lib/active_merchant/billing/gateways/hps.rb +305 -0
  91. data/lib/active_merchant/billing/gateways/iats_payments.rb +271 -16
  92. data/lib/active_merchant/billing/gateways/in_context_paypal_express.rb +15 -0
  93. data/lib/active_merchant/billing/gateways/inspire.rb +29 -32
  94. data/lib/active_merchant/billing/gateways/instapay.rb +5 -6
  95. data/lib/active_merchant/billing/gateways/ipp.rb +175 -0
  96. data/lib/active_merchant/billing/gateways/iridium.rb +247 -41
  97. data/lib/active_merchant/billing/gateways/itransact.rb +4 -5
  98. data/lib/active_merchant/billing/gateways/iveri.rb +251 -0
  99. data/lib/active_merchant/billing/gateways/jetpay.rb +198 -71
  100. data/lib/active_merchant/billing/gateways/jetpay_v2.rb +437 -0
  101. data/lib/active_merchant/billing/gateways/komoju.rb +115 -0
  102. data/lib/active_merchant/billing/gateways/kushki.rb +219 -0
  103. data/lib/active_merchant/billing/gateways/latitude19.rb +411 -0
  104. data/lib/active_merchant/billing/gateways/linkpoint.rb +45 -43
  105. data/lib/active_merchant/billing/gateways/litle.rb +328 -444
  106. data/lib/active_merchant/billing/gateways/mastercard.rb +267 -0
  107. data/lib/active_merchant/billing/gateways/maxipago.rb +145 -115
  108. data/lib/active_merchant/billing/gateways/mercado_pago.rb +277 -0
  109. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +37 -19
  110. data/lib/active_merchant/billing/gateways/merchant_one.rb +13 -15
  111. data/lib/active_merchant/billing/gateways/merchant_partners.rb +245 -0
  112. data/lib/active_merchant/billing/gateways/merchant_ware.rb +57 -60
  113. data/lib/active_merchant/billing/gateways/merchant_ware_version_four.rb +59 -48
  114. data/lib/active_merchant/billing/gateways/merchant_warrior.rb +38 -19
  115. data/lib/active_merchant/billing/gateways/mercury.rb +77 -54
  116. data/lib/active_merchant/billing/gateways/metrics_global.rb +11 -30
  117. data/lib/active_merchant/billing/gateways/micropayment.rb +183 -0
  118. data/lib/active_merchant/billing/gateways/migs.rb +81 -22
  119. data/lib/active_merchant/billing/gateways/modern_payments.rb +3 -3
  120. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +23 -25
  121. data/lib/active_merchant/billing/gateways/monei.rb +307 -0
  122. data/lib/active_merchant/billing/gateways/moneris.rb +146 -64
  123. data/lib/active_merchant/billing/gateways/moneris_us.rb +197 -53
  124. data/lib/active_merchant/billing/gateways/money_movers.rb +6 -15
  125. data/lib/active_merchant/billing/gateways/mundipagg.rb +292 -0
  126. data/lib/active_merchant/billing/gateways/nab_transact.rb +86 -64
  127. data/lib/active_merchant/billing/gateways/ncr_secure_pay.rb +165 -0
  128. data/lib/active_merchant/billing/gateways/net_registry.rb +11 -5
  129. data/lib/active_merchant/billing/gateways/netaxept.rb +21 -22
  130. data/lib/active_merchant/billing/gateways/netbanx.rb +290 -0
  131. data/lib/active_merchant/billing/gateways/netbilling.rb +70 -35
  132. data/lib/active_merchant/billing/gateways/netpay.rb +5 -6
  133. data/lib/active_merchant/billing/gateways/network_merchants.rb +241 -0
  134. data/lib/active_merchant/billing/gateways/nmi.rb +274 -10
  135. data/lib/active_merchant/billing/gateways/ogone.rb +90 -47
  136. data/lib/active_merchant/billing/gateways/omise.rb +324 -0
  137. data/lib/active_merchant/billing/gateways/openpay.rb +48 -20
  138. data/lib/active_merchant/billing/gateways/opp.rb +369 -0
  139. data/lib/active_merchant/billing/gateways/optimal_payment.rb +79 -44
  140. data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +22 -21
  141. data/lib/active_merchant/billing/gateways/orbital.rb +346 -102
  142. data/lib/active_merchant/billing/gateways/pac_net_raven.rb +48 -29
  143. data/lib/active_merchant/billing/gateways/pagarme.rb +246 -0
  144. data/lib/active_merchant/billing/gateways/pago_facil.rb +122 -0
  145. data/lib/active_merchant/billing/gateways/pay_conex.rb +245 -0
  146. data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +67 -48
  147. data/lib/active_merchant/billing/gateways/pay_hub.rb +213 -0
  148. data/lib/active_merchant/billing/gateways/pay_junction.rb +20 -26
  149. data/lib/active_merchant/billing/gateways/pay_junction_v2.rb +188 -0
  150. data/lib/active_merchant/billing/gateways/pay_secure.rb +7 -15
  151. data/lib/active_merchant/billing/gateways/paybox_direct.rb +40 -36
  152. data/lib/active_merchant/billing/gateways/payeezy.rb +410 -0
  153. data/lib/active_merchant/billing/gateways/payex.rb +38 -30
  154. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +62 -36
  155. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +11 -7
  156. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +3 -3
  157. data/lib/active_merchant/billing/gateways/payflow.rb +74 -27
  158. data/lib/active_merchant/billing/gateways/payflow_express.rb +77 -81
  159. data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +2 -3
  160. data/lib/active_merchant/billing/gateways/payflow_uk.rb +5 -6
  161. data/lib/active_merchant/billing/gateways/payment_express.rb +54 -45
  162. data/lib/active_merchant/billing/gateways/paymentez.rb +304 -0
  163. data/lib/active_merchant/billing/gateways/paymill.rb +160 -66
  164. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +54 -7
  165. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +4 -0
  166. data/lib/active_merchant/billing/gateways/paypal/paypal_recurring_api.rb +17 -3
  167. data/lib/active_merchant/billing/gateways/paypal.rb +36 -27
  168. data/lib/active_merchant/billing/gateways/paypal_ca.rb +1 -1
  169. data/lib/active_merchant/billing/gateways/paypal_digital_goods.rb +7 -6
  170. data/lib/active_merchant/billing/gateways/paypal_express.rb +32 -4
  171. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +3 -3
  172. data/lib/active_merchant/billing/gateways/payscout.rb +2 -13
  173. data/lib/active_merchant/billing/gateways/paystation.rb +96 -88
  174. data/lib/active_merchant/billing/gateways/payu_in.rb +248 -0
  175. data/lib/active_merchant/billing/gateways/payu_latam.rb +445 -0
  176. data/lib/active_merchant/billing/gateways/payway.rb +8 -8
  177. data/lib/active_merchant/billing/gateways/pin.rb +74 -18
  178. data/lib/active_merchant/billing/gateways/plugnpay.rb +66 -76
  179. data/lib/active_merchant/billing/gateways/pro_pay.rb +326 -0
  180. data/lib/active_merchant/billing/gateways/psigate.rb +30 -30
  181. data/lib/active_merchant/billing/gateways/psl_card.rb +27 -34
  182. data/lib/active_merchant/billing/gateways/qbms.rb +65 -54
  183. data/lib/active_merchant/billing/gateways/quantum.rb +18 -18
  184. data/lib/active_merchant/billing/gateways/quickbooks.rb +290 -0
  185. data/lib/active_merchant/billing/gateways/quickpay/quickpay_common.rb +184 -0
  186. data/lib/active_merchant/billing/gateways/quickpay/quickpay_v10.rb +295 -0
  187. data/lib/active_merchant/billing/gateways/quickpay/quickpay_v4to7.rb +226 -0
  188. data/lib/active_merchant/billing/gateways/quickpay.rb +10 -350
  189. data/lib/active_merchant/billing/gateways/qvalent.rb +236 -0
  190. data/lib/active_merchant/billing/gateways/realex.rb +78 -48
  191. data/lib/active_merchant/billing/gateways/redsys.rb +310 -170
  192. data/lib/active_merchant/billing/gateways/s5.rb +246 -0
  193. data/lib/active_merchant/billing/gateways/safe_charge.rb +262 -0
  194. data/lib/active_merchant/billing/gateways/sage.rb +415 -119
  195. data/lib/active_merchant/billing/gateways/sage_pay.rb +195 -90
  196. data/lib/active_merchant/billing/gateways/sallie_mae.rb +11 -12
  197. data/lib/active_merchant/billing/gateways/secure_net.rb +51 -43
  198. data/lib/active_merchant/billing/gateways/secure_pay.rb +182 -10
  199. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +25 -14
  200. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +10 -18
  201. data/lib/active_merchant/billing/gateways/securion_pay.rb +264 -0
  202. data/lib/active_merchant/billing/gateways/skip_jack.rb +35 -38
  203. data/lib/active_merchant/billing/gateways/smart_ps.rb +50 -42
  204. data/lib/active_merchant/billing/gateways/so_easy_pay.rb +9 -9
  205. data/lib/active_merchant/billing/gateways/spreedly_core.rb +62 -12
  206. data/lib/active_merchant/billing/gateways/stripe.rb +536 -103
  207. data/lib/active_merchant/billing/gateways/swipe_checkout.rb +12 -18
  208. data/lib/active_merchant/billing/gateways/telr.rb +274 -0
  209. data/lib/active_merchant/billing/gateways/tns.rb +22 -0
  210. data/lib/active_merchant/billing/gateways/trans_first.rb +143 -30
  211. data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +608 -0
  212. data/lib/active_merchant/billing/gateways/transact_pro.rb +224 -0
  213. data/lib/active_merchant/billing/gateways/transax.rb +5 -6
  214. data/lib/active_merchant/billing/gateways/transnational.rb +2 -232
  215. data/lib/active_merchant/billing/gateways/trexle.rb +218 -0
  216. data/lib/active_merchant/billing/gateways/trust_commerce.rb +86 -57
  217. data/lib/active_merchant/billing/gateways/usa_epay.rb +4 -4
  218. data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +196 -89
  219. data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +157 -32
  220. data/lib/active_merchant/billing/gateways/vanco.rb +294 -0
  221. data/lib/active_merchant/billing/gateways/verifi.rb +42 -49
  222. data/lib/active_merchant/billing/gateways/viaklix.rb +11 -24
  223. data/lib/active_merchant/billing/gateways/visanet_peru.rb +233 -0
  224. data/lib/active_merchant/billing/gateways/webpay.rb +26 -28
  225. data/lib/active_merchant/billing/gateways/wepay.rb +237 -0
  226. data/lib/active_merchant/billing/gateways/wirecard.rb +153 -31
  227. data/lib/active_merchant/billing/gateways/world_net.rb +344 -0
  228. data/lib/active_merchant/billing/gateways/worldpay.rb +207 -63
  229. data/lib/active_merchant/billing/gateways/worldpay_online_payments.rb +215 -0
  230. data/lib/active_merchant/billing/gateways/worldpay_us.rb +221 -0
  231. data/lib/active_merchant/billing/gateways.rb +8 -11
  232. data/lib/active_merchant/billing/model.rb +30 -0
  233. data/lib/active_merchant/billing/network_tokenization_credit_card.rb +39 -0
  234. data/lib/active_merchant/billing/payment_token.rb +21 -0
  235. data/lib/active_merchant/billing/rails.rb +3 -0
  236. data/lib/active_merchant/billing/response.rb +31 -24
  237. data/lib/active_merchant/billing.rb +7 -1
  238. data/lib/active_merchant/connection.rb +195 -0
  239. data/lib/active_merchant/country.rb +335 -0
  240. data/lib/active_merchant/empty.rb +20 -0
  241. data/lib/active_merchant/errors.rb +35 -0
  242. data/lib/active_merchant/net_http_ssl_connection.rb +10 -0
  243. data/lib/active_merchant/network_connection_retries.rb +80 -0
  244. data/lib/active_merchant/post_data.rb +25 -0
  245. data/lib/active_merchant/posts_data.rb +92 -0
  246. data/lib/active_merchant/version.rb +1 -1
  247. data/lib/active_merchant.rb +23 -27
  248. data/lib/activemerchant.rb +1 -1
  249. data/lib/certs/cacert.pem +3988 -0
  250. data/lib/support/gateway_support.rb +7 -9
  251. data/lib/support/outbound_hosts.rb +13 -10
  252. data/lib/support/ssl_verify.rb +6 -7
  253. data/lib/support/ssl_version.rb +87 -0
  254. metadata +148 -323
  255. checksums.yaml.gz.sig +0 -0
  256. data/gem-public_cert.pem +0 -21
  257. data/lib/active_merchant/billing/expiry_date.rb +0 -34
  258. data/lib/active_merchant/billing/gateways/app55.rb +0 -185
  259. data/lib/active_merchant/billing/gateways/barclays_epdq.rb +0 -314
  260. data/lib/active_merchant/billing/gateways/certo_direct.rb +0 -277
  261. data/lib/active_merchant/billing/gateways/ideal/ideal_base.rb +0 -249
  262. data/lib/active_merchant/billing/gateways/ideal/ideal_rabobank.pem +0 -13
  263. data/lib/active_merchant/billing/gateways/ideal/ideal_response.rb +0 -29
  264. data/lib/active_merchant/billing/gateways/ideal_rabobank.rb +0 -66
  265. data/lib/active_merchant/billing/gateways/orbital/avs_result.rb +0 -93
  266. data/lib/active_merchant/billing/gateways/orbital/cvv_result.rb +0 -34
  267. data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +0 -93
  268. data/lib/active_merchant/billing/gateways/sage/sage_core.rb +0 -114
  269. data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +0 -102
  270. data/lib/active_merchant/billing/gateways/samurai.rb +0 -118
  271. data/lib/active_merchant/billing/gateways/vindicia.rb +0 -361
  272. data/lib/active_merchant/billing/integrations/a1agregator/helper.rb +0 -31
  273. data/lib/active_merchant/billing/integrations/a1agregator/notification.rb +0 -186
  274. data/lib/active_merchant/billing/integrations/a1agregator/status.rb +0 -38
  275. data/lib/active_merchant/billing/integrations/a1agregator.rb +0 -26
  276. data/lib/active_merchant/billing/integrations/action_view_helper.rb +0 -74
  277. data/lib/active_merchant/billing/integrations/alipay/helper.rb +0 -34
  278. data/lib/active_merchant/billing/integrations/alipay/notification.rb +0 -101
  279. data/lib/active_merchant/billing/integrations/alipay.rb +0 -18
  280. data/lib/active_merchant/billing/integrations/authorize_net_sim/helper.rb +0 -229
  281. data/lib/active_merchant/billing/integrations/authorize_net_sim/notification.rb +0 -340
  282. data/lib/active_merchant/billing/integrations/authorize_net_sim.rb +0 -38
  283. data/lib/active_merchant/billing/integrations/bit_pay/helper.rb +0 -64
  284. data/lib/active_merchant/billing/integrations/bit_pay/notification.rb +0 -74
  285. data/lib/active_merchant/billing/integrations/bit_pay/return.rb +0 -10
  286. data/lib/active_merchant/billing/integrations/bit_pay.rb +0 -30
  287. data/lib/active_merchant/billing/integrations/bogus/helper.rb +0 -17
  288. data/lib/active_merchant/billing/integrations/bogus/notification.rb +0 -11
  289. data/lib/active_merchant/billing/integrations/bogus/return.rb +0 -10
  290. data/lib/active_merchant/billing/integrations/bogus.rb +0 -23
  291. data/lib/active_merchant/billing/integrations/chronopay/helper.rb +0 -120
  292. data/lib/active_merchant/billing/integrations/chronopay/notification.rb +0 -158
  293. data/lib/active_merchant/billing/integrations/chronopay/return.rb +0 -10
  294. data/lib/active_merchant/billing/integrations/chronopay.rb +0 -23
  295. data/lib/active_merchant/billing/integrations/citrus/helper.rb +0 -40
  296. data/lib/active_merchant/billing/integrations/citrus/notification.rb +0 -133
  297. data/lib/active_merchant/billing/integrations/citrus/return.rb +0 -40
  298. data/lib/active_merchant/billing/integrations/citrus.rb +0 -51
  299. data/lib/active_merchant/billing/integrations/direc_pay/helper.rb +0 -200
  300. data/lib/active_merchant/billing/integrations/direc_pay/notification.rb +0 -76
  301. data/lib/active_merchant/billing/integrations/direc_pay/return.rb +0 -32
  302. data/lib/active_merchant/billing/integrations/direc_pay/status.rb +0 -37
  303. data/lib/active_merchant/billing/integrations/direc_pay.rb +0 -41
  304. data/lib/active_merchant/billing/integrations/directebanking/helper.rb +0 -90
  305. data/lib/active_merchant/billing/integrations/directebanking/notification.rb +0 -120
  306. data/lib/active_merchant/billing/integrations/directebanking/return.rb +0 -11
  307. data/lib/active_merchant/billing/integrations/directebanking.rb +0 -47
  308. data/lib/active_merchant/billing/integrations/doku/helper.rb +0 -102
  309. data/lib/active_merchant/billing/integrations/doku/notification.rb +0 -69
  310. data/lib/active_merchant/billing/integrations/doku/return.rb +0 -10
  311. data/lib/active_merchant/billing/integrations/doku.rb +0 -24
  312. data/lib/active_merchant/billing/integrations/dotpay/helper.rb +0 -77
  313. data/lib/active_merchant/billing/integrations/dotpay/notification.rb +0 -86
  314. data/lib/active_merchant/billing/integrations/dotpay/return.rb +0 -11
  315. data/lib/active_merchant/billing/integrations/dotpay.rb +0 -22
  316. data/lib/active_merchant/billing/integrations/dwolla/common.rb +0 -23
  317. data/lib/active_merchant/billing/integrations/dwolla/helper.rb +0 -43
  318. data/lib/active_merchant/billing/integrations/dwolla/notification.rb +0 -64
  319. data/lib/active_merchant/billing/integrations/dwolla/return.rb +0 -49
  320. data/lib/active_merchant/billing/integrations/dwolla.rb +0 -23
  321. data/lib/active_merchant/billing/integrations/e_payment_plans/helper.rb +0 -34
  322. data/lib/active_merchant/billing/integrations/e_payment_plans/notification.rb +0 -84
  323. data/lib/active_merchant/billing/integrations/e_payment_plans.rb +0 -48
  324. data/lib/active_merchant/billing/integrations/easy_pay/common.rb +0 -40
  325. data/lib/active_merchant/billing/integrations/easy_pay/helper.rb +0 -36
  326. data/lib/active_merchant/billing/integrations/easy_pay/notification.rb +0 -59
  327. data/lib/active_merchant/billing/integrations/easy_pay.rb +0 -30
  328. data/lib/active_merchant/billing/integrations/epay/helper.rb +0 -55
  329. data/lib/active_merchant/billing/integrations/epay/notification.rb +0 -110
  330. data/lib/active_merchant/billing/integrations/epay.rb +0 -21
  331. data/lib/active_merchant/billing/integrations/first_data/helper.rb +0 -61
  332. data/lib/active_merchant/billing/integrations/first_data/notification.rb +0 -56
  333. data/lib/active_merchant/billing/integrations/first_data.rb +0 -38
  334. data/lib/active_merchant/billing/integrations/gestpay/common.rb +0 -42
  335. data/lib/active_merchant/billing/integrations/gestpay/helper.rb +0 -70
  336. data/lib/active_merchant/billing/integrations/gestpay/notification.rb +0 -85
  337. data/lib/active_merchant/billing/integrations/gestpay/return.rb +0 -10
  338. data/lib/active_merchant/billing/integrations/gestpay.rb +0 -25
  339. data/lib/active_merchant/billing/integrations/helper.rb +0 -117
  340. data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +0 -58
  341. data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +0 -59
  342. data/lib/active_merchant/billing/integrations/hi_trust/return.rb +0 -68
  343. data/lib/active_merchant/billing/integrations/hi_trust.rb +0 -27
  344. data/lib/active_merchant/billing/integrations/ipay88/helper.rb +0 -118
  345. data/lib/active_merchant/billing/integrations/ipay88/notification.rb +0 -103
  346. data/lib/active_merchant/billing/integrations/ipay88/return.rb +0 -29
  347. data/lib/active_merchant/billing/integrations/ipay88.rb +0 -23
  348. data/lib/active_merchant/billing/integrations/liqpay/helper.rb +0 -43
  349. data/lib/active_merchant/billing/integrations/liqpay/notification.rb +0 -89
  350. data/lib/active_merchant/billing/integrations/liqpay/return.rb +0 -83
  351. data/lib/active_merchant/billing/integrations/liqpay.rb +0 -30
  352. data/lib/active_merchant/billing/integrations/maksuturva/helper.rb +0 -119
  353. data/lib/active_merchant/billing/integrations/maksuturva/notification.rb +0 -48
  354. data/lib/active_merchant/billing/integrations/maksuturva.rb +0 -86
  355. data/lib/active_merchant/billing/integrations/moneybookers/helper.rb +0 -75
  356. data/lib/active_merchant/billing/integrations/moneybookers/notification.rb +0 -123
  357. data/lib/active_merchant/billing/integrations/moneybookers.rb +0 -26
  358. data/lib/active_merchant/billing/integrations/nochex/helper.rb +0 -68
  359. data/lib/active_merchant/billing/integrations/nochex/notification.rb +0 -94
  360. data/lib/active_merchant/billing/integrations/nochex/return.rb +0 -10
  361. data/lib/active_merchant/billing/integrations/nochex.rb +0 -88
  362. data/lib/active_merchant/billing/integrations/notification.rb +0 -71
  363. data/lib/active_merchant/billing/integrations/paxum/common.rb +0 -24
  364. data/lib/active_merchant/billing/integrations/paxum/helper.rb +0 -42
  365. data/lib/active_merchant/billing/integrations/paxum/notification.rb +0 -33
  366. data/lib/active_merchant/billing/integrations/paxum.rb +0 -44
  367. data/lib/active_merchant/billing/integrations/pay_fast/common.rb +0 -42
  368. data/lib/active_merchant/billing/integrations/pay_fast/helper.rb +0 -50
  369. data/lib/active_merchant/billing/integrations/pay_fast/notification.rb +0 -134
  370. data/lib/active_merchant/billing/integrations/pay_fast/return.rb +0 -10
  371. data/lib/active_merchant/billing/integrations/pay_fast.rb +0 -70
  372. data/lib/active_merchant/billing/integrations/paydollar/helper.rb +0 -41
  373. data/lib/active_merchant/billing/integrations/paydollar/notification.rb +0 -60
  374. data/lib/active_merchant/billing/integrations/paydollar/return.rb +0 -15
  375. data/lib/active_merchant/billing/integrations/paydollar.rb +0 -59
  376. data/lib/active_merchant/billing/integrations/payflow_link/helper.rb +0 -116
  377. data/lib/active_merchant/billing/integrations/payflow_link/notification.rb +0 -78
  378. data/lib/active_merchant/billing/integrations/payflow_link.rb +0 -21
  379. data/lib/active_merchant/billing/integrations/paypal/helper.rb +0 -119
  380. data/lib/active_merchant/billing/integrations/paypal/notification.rb +0 -227
  381. data/lib/active_merchant/billing/integrations/paypal/return.rb +0 -10
  382. data/lib/active_merchant/billing/integrations/paypal.rb +0 -39
  383. data/lib/active_merchant/billing/integrations/paypal_payments_advanced/helper.rb +0 -15
  384. data/lib/active_merchant/billing/integrations/paypal_payments_advanced.rb +0 -20
  385. data/lib/active_merchant/billing/integrations/paysbuy/helper.rb +0 -15
  386. data/lib/active_merchant/billing/integrations/paysbuy/notification.rb +0 -39
  387. data/lib/active_merchant/billing/integrations/paysbuy.rb +0 -36
  388. data/lib/active_merchant/billing/integrations/payu_in/helper.rb +0 -76
  389. data/lib/active_merchant/billing/integrations/payu_in/notification.rb +0 -154
  390. data/lib/active_merchant/billing/integrations/payu_in/return.rb +0 -36
  391. data/lib/active_merchant/billing/integrations/payu_in.rb +0 -36
  392. data/lib/active_merchant/billing/integrations/payu_in_paisa/helper.rb +0 -19
  393. data/lib/active_merchant/billing/integrations/payu_in_paisa/notification.rb +0 -13
  394. data/lib/active_merchant/billing/integrations/payu_in_paisa/return.rb +0 -16
  395. data/lib/active_merchant/billing/integrations/payu_in_paisa.rb +0 -30
  396. data/lib/active_merchant/billing/integrations/platron/helper.rb +0 -32
  397. data/lib/active_merchant/billing/integrations/platron/notification.rb +0 -113
  398. data/lib/active_merchant/billing/integrations/platron.rb +0 -28
  399. data/lib/active_merchant/billing/integrations/pxpay/helper.rb +0 -112
  400. data/lib/active_merchant/billing/integrations/pxpay/notification.rb +0 -157
  401. data/lib/active_merchant/billing/integrations/pxpay/return.rb +0 -25
  402. data/lib/active_merchant/billing/integrations/pxpay.rb +0 -31
  403. data/lib/active_merchant/billing/integrations/quickpay/helper.rb +0 -96
  404. data/lib/active_merchant/billing/integrations/quickpay/notification.rb +0 -137
  405. data/lib/active_merchant/billing/integrations/quickpay.rb +0 -21
  406. data/lib/active_merchant/billing/integrations/rbkmoney/helper.rb +0 -23
  407. data/lib/active_merchant/billing/integrations/rbkmoney/notification.rb +0 -91
  408. data/lib/active_merchant/billing/integrations/rbkmoney.rb +0 -17
  409. data/lib/active_merchant/billing/integrations/return.rb +0 -42
  410. data/lib/active_merchant/billing/integrations/robokassa/common.rb +0 -19
  411. data/lib/active_merchant/billing/integrations/robokassa/helper.rb +0 -50
  412. data/lib/active_merchant/billing/integrations/robokassa/notification.rb +0 -55
  413. data/lib/active_merchant/billing/integrations/robokassa/return.rb +0 -17
  414. data/lib/active_merchant/billing/integrations/robokassa.rb +0 -49
  415. data/lib/active_merchant/billing/integrations/sage_pay_form/encryption.rb +0 -33
  416. data/lib/active_merchant/billing/integrations/sage_pay_form/helper.rb +0 -136
  417. data/lib/active_merchant/billing/integrations/sage_pay_form/notification.rb +0 -210
  418. data/lib/active_merchant/billing/integrations/sage_pay_form/return.rb +0 -31
  419. data/lib/active_merchant/billing/integrations/sage_pay_form.rb +0 -37
  420. data/lib/active_merchant/billing/integrations/two_checkout/helper.rb +0 -107
  421. data/lib/active_merchant/billing/integrations/two_checkout/notification.rb +0 -171
  422. data/lib/active_merchant/billing/integrations/two_checkout/return.rb +0 -58
  423. data/lib/active_merchant/billing/integrations/two_checkout.rb +0 -44
  424. data/lib/active_merchant/billing/integrations/valitor/helper.rb +0 -86
  425. data/lib/active_merchant/billing/integrations/valitor/notification.rb +0 -13
  426. data/lib/active_merchant/billing/integrations/valitor/response_fields.rb +0 -97
  427. data/lib/active_merchant/billing/integrations/valitor/return.rb +0 -13
  428. data/lib/active_merchant/billing/integrations/valitor.rb +0 -33
  429. data/lib/active_merchant/billing/integrations/verkkomaksut/helper.rb +0 -88
  430. data/lib/active_merchant/billing/integrations/verkkomaksut/notification.rb +0 -59
  431. data/lib/active_merchant/billing/integrations/verkkomaksut.rb +0 -20
  432. data/lib/active_merchant/billing/integrations/web_pay/common.rb +0 -50
  433. data/lib/active_merchant/billing/integrations/web_pay/helper.rb +0 -68
  434. data/lib/active_merchant/billing/integrations/web_pay/notification.rb +0 -51
  435. data/lib/active_merchant/billing/integrations/web_pay.rb +0 -45
  436. data/lib/active_merchant/billing/integrations/webmoney/common.rb +0 -17
  437. data/lib/active_merchant/billing/integrations/webmoney/helper.rb +0 -40
  438. data/lib/active_merchant/billing/integrations/webmoney/notification.rb +0 -47
  439. data/lib/active_merchant/billing/integrations/webmoney.rb +0 -43
  440. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/common.rb +0 -104
  441. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/helper.rb +0 -145
  442. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/notification.rb +0 -101
  443. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/return.rb +0 -35
  444. data/lib/active_merchant/billing/integrations/wirecard_checkout_page.rb +0 -39
  445. data/lib/active_merchant/billing/integrations/world_pay/helper.rb +0 -101
  446. data/lib/active_merchant/billing/integrations/world_pay/notification.rb +0 -160
  447. data/lib/active_merchant/billing/integrations/world_pay.rb +0 -34
  448. data/lib/active_merchant/billing/integrations.rb +0 -17
  449. data.tar.gz.sig +0 -0
  450. metadata.gz.sig +0 -1
@@ -0,0 +1,417 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ # For more information on the Authorize.Net Gateway please visit their {Integration Center}[http://developer.authorize.net/]
4
+ #
5
+ # The login and password are not the username and password you use to
6
+ # login to the Authorize.Net Merchant Interface. Instead, you will
7
+ # use the API Login ID as the login and Transaction Key as the
8
+ # password.
9
+ #
10
+ # ==== How to Get Your API Login ID and Transaction Key
11
+ #
12
+ # 1. Log into the Merchant Interface
13
+ # 2. Select Settings from the Main Menu
14
+ # 3. Click on API Login ID and Transaction Key in the Security section
15
+ # 4. Type in the answer to the secret question configured on setup
16
+ # 5. Click Submit
17
+ #
18
+ # ==== Automated Recurring Billing (ARB)
19
+ #
20
+ # Automated Recurring Billing (ARB) is an optional service for submitting and managing recurring, or subscription-based, transactions.
21
+ #
22
+ # To use recurring, update_recurring, cancel_recurring and status_recurring ARB must be enabled for your account.
23
+ #
24
+ # Information about ARB is available on the {Authorize.Net website}[http://www.authorize.net/solutions/merchantsolutions/merchantservices/automatedrecurringbilling/].
25
+ # Information about the ARB API is available at the {Authorize.Net Integration Center}[http://developer.authorize.net/]
26
+ class AuthorizeNetArbGateway < Gateway
27
+ API_VERSION = '3.1'
28
+
29
+ self.test_url = 'https://apitest.authorize.net/xml/v1/request.api'
30
+ self.live_url = 'https://api.authorize.net/xml/v1/request.api'
31
+
32
+ self.default_currency = 'USD'
33
+
34
+ self.supported_countries = ['US', 'CA', 'GB']
35
+ self.supported_cardtypes = [:visa, :master, :american_express, :discover, :diners_club, :jcb]
36
+ self.homepage_url = 'http://www.authorize.net/'
37
+ self.display_name = 'Authorize.Net'
38
+
39
+ AUTHORIZE_NET_ARB_NAMESPACE = 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'
40
+
41
+ RECURRING_ACTIONS = {
42
+ :create => 'ARBCreateSubscription',
43
+ :update => 'ARBUpdateSubscription',
44
+ :cancel => 'ARBCancelSubscription',
45
+ :status => 'ARBGetSubscriptionStatus'
46
+ }
47
+
48
+ # Creates a new AuthorizeNetArbGateway
49
+ #
50
+ # The gateway requires that a valid login and password be passed
51
+ # in the +options+ hash.
52
+ #
53
+ # ==== Options
54
+ #
55
+ # * <tt>:login</tt> -- The Authorize.Net API Login ID (REQUIRED)
56
+ # * <tt>:password</tt> -- The Authorize.Net Transaction Key. (REQUIRED)
57
+ # * <tt>:test</tt> -- +true+ or +false+. If true, perform transactions against the test server.
58
+ # Otherwise, perform transactions against the production server.
59
+ def initialize(options = {})
60
+ ActiveMerchant.deprecated 'ARB functionality in ActiveMerchant is deprecated and will be removed in a future version. Please contact the ActiveMerchant maintainers if you have an interest in taking ownership of a separate gem that continues support for it.'
61
+ requires!(options, :login, :password)
62
+ super
63
+ end
64
+
65
+ # Create a recurring payment.
66
+ #
67
+ # This transaction creates a new Automated Recurring Billing (ARB) subscription. Your account must have ARB enabled.
68
+ #
69
+ # ==== Parameters
70
+ #
71
+ # * <tt>money</tt> -- The amount to be charged to the customer at each interval as an Integer value in cents.
72
+ # * <tt>creditcard</tt> -- The CreditCard details for the transaction.
73
+ # * <tt>options</tt> -- A hash of parameters.
74
+ #
75
+ # ==== Options
76
+ #
77
+ # * <tt>:interval</tt> -- A hash containing information about the interval of time between payments. Must
78
+ # contain the keys <tt>:length</tt> and <tt>:unit</tt>. <tt>:unit</tt> can be either <tt>:months</tt> or <tt>:days</tt>.
79
+ # If <tt>:unit</tt> is <tt>:months</tt> then <tt>:length</tt> must be an integer between 1 and 12 inclusive.
80
+ # If <tt>:unit</tt> is <tt>:days</tt> then <tt>:length</tt> must be an integer between 7 and 365 inclusive.
81
+ # For example, to charge the customer once every three months the hash would be
82
+ # +:interval => { :unit => :months, :length => 3 }+ (REQUIRED)
83
+ # * <tt>:duration</tt> -- A hash containing keys for the <tt>:start_date</tt> the subscription begins (also the date the
84
+ # initial billing occurs) and the total number of billing <tt>:occurrences</tt> or payments for the subscription. (REQUIRED)
85
+ def recurring(money, creditcard, options={})
86
+ requires!(options, :interval, :duration, :billing_address)
87
+ requires!(options[:interval], :length, [:unit, :days, :months])
88
+ requires!(options[:duration], :start_date, :occurrences)
89
+ requires!(options[:billing_address], :first_name, :last_name)
90
+
91
+ options[:credit_card] = creditcard
92
+ options[:amount] = money
93
+
94
+ request = build_recurring_request(:create, options)
95
+ recurring_commit(:create, request)
96
+ end
97
+
98
+ # Update a recurring payment's details.
99
+ #
100
+ # This transaction updates an existing Automated Recurring Billing (ARB) subscription. Your account must have ARB enabled
101
+ # and the subscription must have already been created previously by calling +recurring()+. The ability to change certain
102
+ # details about a recurring payment is dependent on transaction history and cannot be determined until after calling
103
+ # +update_recurring()+. See the ARB XML Guide for such conditions.
104
+ #
105
+ # ==== Parameters
106
+ #
107
+ # * <tt>options</tt> -- A hash of parameters.
108
+ #
109
+ # ==== Options
110
+ #
111
+ # * <tt>:subscription_id</tt> -- A string containing the <tt>:subscription_id</tt> of the recurring payment already in place
112
+ # for a given credit card. (REQUIRED)
113
+ def update_recurring(options={})
114
+ requires!(options, :subscription_id)
115
+ request = build_recurring_request(:update, options)
116
+ recurring_commit(:update, request)
117
+ end
118
+
119
+ # Cancel a recurring payment.
120
+ #
121
+ # This transaction cancels an existing Automated Recurring Billing (ARB) subscription. Your account must have ARB enabled
122
+ # and the subscription must have already been created previously by calling recurring()
123
+ #
124
+ # ==== Parameters
125
+ #
126
+ # * <tt>subscription_id</tt> -- A string containing the +subscription_id+ of the recurring payment already in place
127
+ # for a given credit card. (REQUIRED)
128
+ def cancel_recurring(subscription_id)
129
+ request = build_recurring_request(:cancel, :subscription_id => subscription_id)
130
+ recurring_commit(:cancel, request)
131
+ end
132
+
133
+ # Get Subscription Status of a recurring payment.
134
+ #
135
+ # This transaction gets the status of an existing Automated Recurring Billing (ARB) subscription. Your account must have ARB enabled.
136
+ #
137
+ # ==== Parameters
138
+ #
139
+ # * <tt>subscription_id</tt> -- A string containing the +subscription_id+ of the recurring payment already in place
140
+ # for a given credit card. (REQUIRED)
141
+ def status_recurring(subscription_id)
142
+ request = build_recurring_request(:status, :subscription_id => subscription_id)
143
+ recurring_commit(:status, request)
144
+ end
145
+
146
+ private
147
+
148
+ # Builds recurring billing request
149
+ def build_recurring_request(action, options = {})
150
+ unless RECURRING_ACTIONS.include?(action)
151
+ raise StandardError, "Invalid Automated Recurring Billing Action: #{action}"
152
+ end
153
+
154
+ xml = Builder::XmlMarkup.new(:indent => 2)
155
+ xml.instruct!(:xml, :version => '1.0', :encoding => 'utf-8')
156
+ xml.tag!("#{RECURRING_ACTIONS[action]}Request", :xmlns => AUTHORIZE_NET_ARB_NAMESPACE) do
157
+ add_merchant_authentication(xml)
158
+ # Merchant-assigned reference ID for the request
159
+ xml.tag!('refId', options[:ref_id]) if options[:ref_id]
160
+ send("build_#{action}_subscription_request", xml, options)
161
+ end
162
+ end
163
+
164
+ # Contains the merchant’s payment gateway account authentication information
165
+ def add_merchant_authentication(xml)
166
+ xml.tag!('merchantAuthentication') do
167
+ xml.tag!('name', @options[:login])
168
+ xml.tag!('transactionKey', @options[:password])
169
+ end
170
+ end
171
+
172
+ # Builds body for ARBCreateSubscriptionRequest
173
+ def build_create_subscription_request(xml, options)
174
+ # Subscription
175
+ add_subscription(xml, options)
176
+
177
+ xml.target!
178
+ end
179
+
180
+ # Builds body for ARBUpdateSubscriptionRequest
181
+ def build_update_subscription_request(xml, options)
182
+ xml.tag!('subscriptionId', options[:subscription_id])
183
+ # Adds Subscription
184
+ add_subscription(xml, options)
185
+
186
+ xml.target!
187
+ end
188
+
189
+ # Builds body for ARBCancelSubscriptionRequest
190
+ def build_cancel_subscription_request(xml, options)
191
+ xml.tag!('subscriptionId', options[:subscription_id])
192
+
193
+ xml.target!
194
+ end
195
+
196
+ # Builds body for ARBGetSubscriptionStatusRequest
197
+ def build_status_subscription_request(xml, options)
198
+ xml.tag!('subscriptionId', options[:subscription_id])
199
+
200
+ xml.target!
201
+ end
202
+
203
+ # Adds subscription information
204
+ def add_subscription(xml, options)
205
+ xml.tag!('subscription') do
206
+ # Merchant-assigned name for the subscription (optional)
207
+ xml.tag!('name', options[:subscription_name]) if options[:subscription_name]
208
+ # Contains information about the payment schedule
209
+ add_payment_schedule(xml, options)
210
+ # The amount to be billed to the customer
211
+ # for each payment in the subscription
212
+ xml.tag!('amount', amount(options[:amount])) if options[:amount]
213
+ if trial = options[:trial]
214
+ # The amount to be charged for each payment during a trial period (conditional)
215
+ xml.tag!('trialAmount', amount(trial[:amount])) if trial[:amount]
216
+ end
217
+ # Contains either the customer’s credit card
218
+ # or bank account payment information
219
+ add_payment(xml, options)
220
+ # Contains order information (optional)
221
+ add_order(xml, options)
222
+ # Contains information about the customer
223
+ add_customer(xml, options)
224
+ # Contains the customer's billing address information
225
+ add_address(xml, 'billTo', options[:billing_address])
226
+ # Contains the customer's shipping address information (optional)
227
+ add_address(xml, 'shipTo', options[:shipping_address])
228
+ end
229
+ end
230
+
231
+ # Adds information about the interval of time between payments
232
+ def add_interval(xml, options)
233
+ interval = options[:interval]
234
+ return unless interval
235
+ xml.tag!('interval') do
236
+ # The measurement of time, in association with the Interval Unit,
237
+ # that is used to define the frequency of the billing occurrences
238
+ xml.tag!('length', interval[:length])
239
+ # The unit of time, in association with the Interval Length,
240
+ # between each billing occurrence
241
+ xml.tag!('unit', interval[:unit].to_s)
242
+ end
243
+ end
244
+
245
+ # Adds information about the subscription duration
246
+ def add_duration(xml, options)
247
+ duration = options[:duration]
248
+ return unless duration
249
+ # The date the subscription begins
250
+ # (also the date the initial billing occurs)
251
+ xml.tag!('startDate', duration[:start_date]) if duration[:start_date]
252
+ # Number of billing occurrences or payments for the subscription
253
+ xml.tag!('totalOccurrences', duration[:occurrences]) if duration[:occurrences]
254
+ end
255
+
256
+ def add_payment_schedule(xml, options)
257
+ return unless options[:interval] || options[:duration]
258
+ xml.tag!('paymentSchedule') do
259
+ # Contains information about the interval of time between payments
260
+ add_interval(xml, options)
261
+ add_duration(xml, options)
262
+ if trial = options[:trial]
263
+ # Number of billing occurrences or payments in the trial period (optional)
264
+ xml.tag!('trialOccurrences', trial[:occurrences]) if trial[:occurrences]
265
+ end
266
+ end
267
+ end
268
+
269
+ # Adds customer's credit card or bank account payment information
270
+ def add_payment(xml, options)
271
+ return unless options[:credit_card] || options[:bank_account]
272
+ xml.tag!('payment') do
273
+ # Contains the customer’s credit card information
274
+ add_credit_card(xml, options)
275
+ # Contains the customer’s bank account information
276
+ add_bank_account(xml, options)
277
+ end
278
+ end
279
+
280
+ # Adds customer’s credit card information
281
+ # Note: This element should only be included
282
+ # when the payment method is credit card.
283
+ def add_credit_card(xml, options)
284
+ credit_card = options[:credit_card]
285
+ return unless credit_card
286
+ xml.tag!('creditCard') do
287
+ # The credit card number used for payment of the subscription
288
+ xml.tag!('cardNumber', credit_card.number)
289
+ # The expiration date of the credit card used for the subscription
290
+ xml.tag!('expirationDate', expdate(credit_card))
291
+ end
292
+ end
293
+
294
+ # Adds customer’s bank account information
295
+ # Note: This element should only be included
296
+ # when the payment method is bank account.
297
+ def add_bank_account(xml, options)
298
+ bank_account = options[:bank_account]
299
+ return unless bank_account
300
+ xml.tag!('bankAccount') do
301
+ # The type of bank account used for payment of the subscription
302
+ xml.tag!('accountType', bank_account[:account_type])
303
+ # The routing number of the customer’s bank
304
+ xml.tag!('routingNumber', bank_account[:routing_number])
305
+ # The bank account number used for payment of the subscription
306
+ xml.tag!('accountNumber', bank_account[:account_number])
307
+ # The full name of the individual associated
308
+ # with the bank account number
309
+ xml.tag!('nameOfAccount', bank_account[:name_of_account])
310
+ # The full name of the individual associated
311
+ # with the bank account number (optional)
312
+ xml.tag!('bankName', bank_account[:bank_name]) if bank_account[:bank_name]
313
+ # The type of electronic check transaction used for the subscription
314
+ xml.tag!('echeckType', bank_account[:echeck_type])
315
+ end
316
+ end
317
+
318
+ # Adds order information (optional)
319
+ def add_order(xml, options)
320
+ order = options[:order]
321
+ return unless order
322
+ xml.tag!('order') do
323
+ # Merchant-assigned invoice number for the subscription (optional)
324
+ xml.tag!('invoiceNumber', order[:invoice_number])
325
+ # Description of the subscription (optional)
326
+ xml.tag!('description', order[:description])
327
+ end
328
+ end
329
+
330
+ # Adds information about the customer
331
+ def add_customer(xml, options)
332
+ customer = options[:customer]
333
+ return unless customer
334
+ xml.tag!('customer') do
335
+ xml.tag!('type', customer[:type]) if customer[:type]
336
+ xml.tag!('id', customer[:id]) if customer[:id]
337
+ xml.tag!('email', customer[:email]) if customer[:email]
338
+ xml.tag!('phoneNumber', customer[:phone_number]) if customer[:phone_number]
339
+ xml.tag!('faxNumber', customer[:fax_number]) if customer[:fax_number]
340
+ add_drivers_license(xml, options)
341
+ xml.tag!('taxId', customer[:tax_id]) if customer[:tax_id]
342
+ end
343
+ end
344
+
345
+ # Adds the customer's driver's license information (conditional)
346
+ def add_drivers_license(xml, options)
347
+ return unless customer = options[:customer]
348
+ return unless drivers_license = customer[:drivers_license]
349
+ xml.tag!('driversLicense') do
350
+ # The customer's driver's license number
351
+ xml.tag!('number', drivers_license[:number])
352
+ # The customer's driver's license state
353
+ xml.tag!('state', drivers_license[:state])
354
+ # The customer's driver's license date of birth
355
+ xml.tag!('dateOfBirth', drivers_license[:date_of_birth])
356
+ end
357
+ end
358
+
359
+ # Adds address information
360
+ def add_address(xml, container_name, address)
361
+ return if address.blank?
362
+ xml.tag!(container_name) do
363
+ xml.tag!('firstName', address[:first_name])
364
+ xml.tag!('lastName', address[:last_name])
365
+ xml.tag!('company', address[:company])
366
+ xml.tag!('address', address[:address1])
367
+ xml.tag!('city', address[:city])
368
+ xml.tag!('state', address[:state])
369
+ xml.tag!('zip', address[:zip])
370
+ xml.tag!('country', address[:country])
371
+ end
372
+ end
373
+
374
+ def expdate(credit_card)
375
+ sprintf('%04d-%02d', credit_card.year, credit_card.month)
376
+ end
377
+
378
+ def recurring_commit(action, request)
379
+ url = test? ? test_url : live_url
380
+ xml = ssl_post(url, request, 'Content-Type' => 'text/xml')
381
+
382
+ response = recurring_parse(action, xml)
383
+
384
+ message = response[:message] || response[:text]
385
+ test_mode = test? || message =~ /Test Mode/
386
+ success = response[:result_code] == 'Ok'
387
+
388
+ Response.new(success, message, response,
389
+ :test => test_mode,
390
+ :authorization => response[:subscription_id]
391
+ )
392
+ end
393
+
394
+ def recurring_parse(action, xml)
395
+ response = {}
396
+ xml = REXML::Document.new(xml)
397
+ root = REXML::XPath.first(xml, "//#{RECURRING_ACTIONS[action]}Response") ||
398
+ REXML::XPath.first(xml, '//ErrorResponse')
399
+ if root
400
+ root.elements.to_a.each do |node|
401
+ recurring_parse_element(response, node)
402
+ end
403
+ end
404
+
405
+ response
406
+ end
407
+
408
+ def recurring_parse_element(response, node)
409
+ if node.has_elements?
410
+ node.elements.each { |e| recurring_parse_element(response, e) }
411
+ else
412
+ response[node.name.underscore.to_sym] = node.text
413
+ end
414
+ end
415
+ end
416
+ end
417
+ end
@@ -28,7 +28,7 @@ module ActiveMerchant #:nodoc:
28
28
  # 5. Click Submit
29
29
  class AuthorizeNetCimGateway < Gateway
30
30
  self.test_url = 'https://apitest.authorize.net/xml/v1/request.api'
31
- self.live_url = 'https://api.authorize.net/xml/v1/request.api'
31
+ self.live_url = 'https://api2.authorize.net/xml/v1/request.api'
32
32
 
33
33
  AUTHORIZE_NET_CIM_NAMESPACE = 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'
34
34
 
@@ -363,6 +363,10 @@ module ActiveMerchant #:nodoc:
363
363
  # - :type = (:void, :refund, :prior_auth_capture) (NOT USED)
364
364
  # - :type = (:auth_only, :capture_only, :auth_capture) (OPTIONAL)
365
365
  #
366
+ # * <tt>:recurring_billing</tt> -- The recurring billing status (OPTIONAL)
367
+ # - :type = (:void, :refund, :prior_auth_capture) (NOT USED)
368
+ # - :type = (:auth_only, :capture_only, :auth_capture) (OPTIONAL)
369
+ #
366
370
  # * <tt>:customer_shipping_address_id</tt> -- Payment gateway assigned ID associated with the customer shipping address (CONDITIONAL)
367
371
  # - :type = (:void, :refund) (OPTIONAL)
368
372
  # - :type = (:auth_only, :capture_only, :auth_capture) (NOT USED)
@@ -375,19 +379,19 @@ module ActiveMerchant #:nodoc:
375
379
  requires!(options, :transaction)
376
380
  requires!(options[:transaction], :type)
377
381
  case options[:transaction][:type]
378
- when :void
379
- requires!(options[:transaction], :trans_id)
380
- when :refund
381
- requires!(options[:transaction], :trans_id) &&
382
- (
383
- (options[:transaction][:customer_profile_id] && options[:transaction][:customer_payment_profile_id]) ||
384
- options[:transaction][:credit_card_number_masked] ||
385
- (options[:transaction][:bank_routing_number_masked] && options[:transaction][:bank_account_number_masked])
386
- )
387
- when :prior_auth_capture
388
- requires!(options[:transaction], :amount, :trans_id)
389
- else
390
- requires!(options[:transaction], :amount, :customer_profile_id, :customer_payment_profile_id)
382
+ when :void
383
+ requires!(options[:transaction], :trans_id)
384
+ when :refund
385
+ requires!(options[:transaction], :trans_id) &&
386
+ (
387
+ (options[:transaction][:customer_profile_id] && options[:transaction][:customer_payment_profile_id]) ||
388
+ options[:transaction][:credit_card_number_masked] ||
389
+ (options[:transaction][:bank_routing_number_masked] && options[:transaction][:bank_account_number_masked])
390
+ )
391
+ when :prior_auth_capture
392
+ requires!(options[:transaction], :amount, :trans_id)
393
+ else
394
+ requires!(options[:transaction], :amount, :customer_profile_id, :customer_payment_profile_id)
391
395
  end
392
396
  request = build_request(:create_customer_profile_transaction, options)
393
397
  commit(:create_customer_profile_transaction, request)
@@ -570,6 +574,7 @@ module ActiveMerchant #:nodoc:
570
574
  def build_get_customer_payment_profile_request(xml, options)
571
575
  xml.tag!('customerProfileId', options[:customer_profile_id])
572
576
  xml.tag!('customerPaymentProfileId', options[:customer_payment_profile_id])
577
+ xml.tag!('unmaskExpirationDate', options[:unmask_expiration_date]) if options[:unmask_expiration_date]
573
578
  xml.target!
574
579
  end
575
580
 
@@ -609,10 +614,12 @@ module ActiveMerchant #:nodoc:
609
614
 
610
615
  def build_create_customer_profile_transaction_request(xml, options)
611
616
  options[:extra_options] ||= {}
612
- options[:extra_options].merge!('x_test_request' => 'TRUE') if @options[:test_requests]
617
+ options[:extra_options]['x_delim_char'] = @options[:delimiter] if @options[:delimiter]
613
618
 
614
619
  add_transaction(xml, options[:transaction])
615
- tag_unless_blank(xml, 'extraOptions', format_extra_options(options[:extra_options]))
620
+ xml.tag!('extraOptions') do
621
+ xml.cdata!(format_extra_options(options[:extra_options]))
622
+ end unless options[:extra_options].blank?
616
623
 
617
624
  xml.target!
618
625
  end
@@ -658,35 +665,40 @@ module ActiveMerchant #:nodoc:
658
665
  xml.tag!(CIM_TRANSACTION_TYPES[transaction[:type]]) do
659
666
  # The amount to be billed to the customer
660
667
  case transaction[:type]
661
- when :void
662
- tag_unless_blank(xml,'customerProfileId', transaction[:customer_profile_id])
663
- tag_unless_blank(xml,'customerPaymentProfileId', transaction[:customer_payment_profile_id])
664
- tag_unless_blank(xml,'customerShippingAddressId', transaction[:customer_shipping_address_id])
665
- xml.tag!('transId', transaction[:trans_id])
666
- when :refund
667
- #TODO - add lineItems field
668
- xml.tag!('amount', transaction[:amount])
669
- tag_unless_blank(xml, 'customerProfileId', transaction[:customer_profile_id])
670
- tag_unless_blank(xml, 'customerPaymentProfileId', transaction[:customer_payment_profile_id])
671
- tag_unless_blank(xml, 'customerShippingAddressId', transaction[:customer_shipping_address_id])
672
- tag_unless_blank(xml, 'creditCardNumberMasked', transaction[:credit_card_number_masked])
673
- tag_unless_blank(xml, 'bankRoutingNumberMasked', transaction[:bank_routing_number_masked])
674
- tag_unless_blank(xml, 'bankAccountNumberMasked', transaction[:bank_account_number_masked])
675
- xml.tag!('transId', transaction[:trans_id])
676
- add_tax(xml, transaction[:tax]) if transaction[:tax]
677
- add_duty(xml, transaction[:duty]) if transaction[:duty]
678
- add_shipping(xml, transaction[:shipping]) if transaction[:shipping]
679
- when :prior_auth_capture
680
- xml.tag!('amount', transaction[:amount])
681
- xml.tag!('transId', transaction[:trans_id])
682
- else
683
- xml.tag!('amount', transaction[:amount])
684
- xml.tag!('customerProfileId', transaction[:customer_profile_id])
685
- xml.tag!('customerPaymentProfileId', transaction[:customer_payment_profile_id])
686
- xml.tag!('approvalCode', transaction[:approval_code]) if transaction[:type] == :capture_only
668
+ when :void
669
+ tag_unless_blank(xml, 'customerProfileId', transaction[:customer_profile_id])
670
+ tag_unless_blank(xml, 'customerPaymentProfileId', transaction[:customer_payment_profile_id])
671
+ tag_unless_blank(xml, 'customerShippingAddressId', transaction[:customer_shipping_address_id])
672
+ xml.tag!('transId', transaction[:trans_id])
673
+ when :refund
674
+ xml.tag!('amount', transaction[:amount])
675
+ tag_unless_blank(xml, 'customerProfileId', transaction[:customer_profile_id])
676
+ tag_unless_blank(xml, 'customerPaymentProfileId', transaction[:customer_payment_profile_id])
677
+ tag_unless_blank(xml, 'customerShippingAddressId', transaction[:customer_shipping_address_id])
678
+ tag_unless_blank(xml, 'creditCardNumberMasked', transaction[:credit_card_number_masked])
679
+ tag_unless_blank(xml, 'bankRoutingNumberMasked', transaction[:bank_routing_number_masked])
680
+ tag_unless_blank(xml, 'bankAccountNumberMasked', transaction[:bank_account_number_masked])
681
+ add_order(xml, transaction[:order]) if transaction[:order].present?
682
+ xml.tag!('transId', transaction[:trans_id])
683
+ add_tax(xml, transaction[:tax]) if transaction[:tax]
684
+ add_duty(xml, transaction[:duty]) if transaction[:duty]
685
+ add_shipping(xml, transaction[:shipping]) if transaction[:shipping]
686
+ when :prior_auth_capture
687
+ xml.tag!('amount', transaction[:amount])
688
+ add_order(xml, transaction[:order]) if transaction[:order].present?
689
+ xml.tag!('transId', transaction[:trans_id])
690
+ else
691
+ xml.tag!('amount', transaction[:amount])
692
+ xml.tag!('customerProfileId', transaction[:customer_profile_id])
693
+ xml.tag!('customerPaymentProfileId', transaction[:customer_payment_profile_id])
694
+ xml.tag!('approvalCode', transaction[:approval_code]) if transaction[:type] == :capture_only
695
+ add_order(xml, transaction[:order]) if transaction[:order].present?
696
+
697
+ end
698
+ if [:auth_capture, :auth_only, :capture_only].include?(transaction[:type])
699
+ xml.tag!('recurringBilling', transaction[:recurring_billing]) if transaction.has_key?(:recurring_billing)
687
700
  end
688
- add_order(xml, transaction[:order]) if transaction[:order].present?
689
- unless [:void,:refund,:prior_auth_capture].include?(transaction[:type])
701
+ unless [:void, :refund, :prior_auth_capture].include?(transaction[:type])
690
702
  tag_unless_blank(xml, 'cardCode', transaction[:card_code])
691
703
  end
692
704
  end
@@ -787,7 +799,7 @@ module ActiveMerchant #:nodoc:
787
799
  return unless credit_card
788
800
  xml.tag!('creditCard') do
789
801
  # The credit card number used for payment of the subscription
790
- xml.tag!('cardNumber', credit_card.number)
802
+ xml.tag!('cardNumber', full_or_masked_card_number(credit_card.number))
791
803
  # The expiration date of the credit card used for the subscription
792
804
  xml.tag!('expirationDate', expdate(credit_card))
793
805
  # Note that Authorize.net does not save CVV codes as part of the
@@ -841,20 +853,24 @@ module ActiveMerchant #:nodoc:
841
853
 
842
854
  def commit(action, request)
843
855
  url = test? ? test_url : live_url
844
- xml = ssl_post(url, request, "Content-Type" => "text/xml")
856
+ xml = ssl_post(url, request, 'Content-Type' => 'text/xml')
845
857
 
846
858
  response_params = parse(action, xml)
847
859
 
848
- message = response_params['messages']['message']['text']
860
+ message_element= response_params['messages']['message']
861
+ first_error = message_element.is_a?(Array) ? message_element.first : message_element
862
+ message = first_error['text']
849
863
  test_mode = @options[:test_requests] || message =~ /Test Mode/
850
864
  success = response_params['messages']['result_code'] == 'Ok'
851
865
  response_params['direct_response'] = parse_direct_response(response_params['direct_response']) if response_params['direct_response']
852
866
  transaction_id = response_params['direct_response']['transaction_id'] if response_params['direct_response']
853
867
 
854
- Response.new(success, message, response_params,
855
- :test => test_mode,
856
- :authorization => transaction_id || response_params['customer_profile_id'] || (response_params['profile'] ? response_params['profile']['customer_profile_id'] : nil)
857
- )
868
+ response_options = {}
869
+ response_options[:test] = test_mode
870
+ response_options[:authorization] = transaction_id || response_params['customer_profile_id'] || (response_params['profile'] ? response_params['profile']['customer_profile_id'] : nil)
871
+ response_options[:error_code] = first_error['code'] unless success
872
+
873
+ Response.new(success, message, response_params, response_options)
858
874
  end
859
875
 
860
876
  def tag_unless_blank(xml, tag_name, data)
@@ -862,7 +878,7 @@ module ActiveMerchant #:nodoc:
862
878
  end
863
879
 
864
880
  def format_extra_options(options)
865
- options.map{ |k, v| "#{k}=#{v}" }.join('&') unless options.nil?
881
+ options&.map { |k, v| "#{k}=#{v}" }&.join('&')
866
882
  end
867
883
 
868
884
  def parse_direct_response(params)
@@ -925,7 +941,7 @@ module ActiveMerchant #:nodoc:
925
941
  def parse(action, xml)
926
942
  xml = REXML::Document.new(xml)
927
943
  root = REXML::XPath.first(xml, "//#{CIM_ACTIONS[action]}Response") ||
928
- REXML::XPath.first(xml, "//ErrorResponse")
944
+ REXML::XPath.first(xml, '//ErrorResponse')
929
945
  if root
930
946
  response = parse_element(root)
931
947
  end
@@ -936,7 +952,7 @@ module ActiveMerchant #:nodoc:
936
952
  def parse_element(node)
937
953
  if node.has_elements?
938
954
  response = {}
939
- node.elements.each{ |e|
955
+ node.elements.each { |e|
940
956
  key = e.name.underscore
941
957
  value = parse_element(e)
942
958
  if response.has_key?(key)
@@ -955,6 +971,10 @@ module ActiveMerchant #:nodoc:
955
971
 
956
972
  response
957
973
  end
974
+
975
+ def full_or_masked_card_number(card_number)
976
+ !card_number.nil? && card_number.length == 4 ? "XXXX#{card_number}" : card_number
977
+ end
958
978
  end
959
979
  end
960
980
  end