swiss-crm-activemerchant 1.0.12

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 (287) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG +4033 -0
  3. data/CONTRIBUTORS +568 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.md +252 -0
  6. data/lib/active_merchant/billing/apple_pay_payment_token.rb +22 -0
  7. data/lib/active_merchant/billing/avs_result.rb +95 -0
  8. data/lib/active_merchant/billing/base.rb +48 -0
  9. data/lib/active_merchant/billing/check.rb +112 -0
  10. data/lib/active_merchant/billing/compatibility.rb +118 -0
  11. data/lib/active_merchant/billing/credit_card.rb +451 -0
  12. data/lib/active_merchant/billing/credit_card_formatting.rb +24 -0
  13. data/lib/active_merchant/billing/credit_card_methods.rb +512 -0
  14. data/lib/active_merchant/billing/cvv_result.rb +37 -0
  15. data/lib/active_merchant/billing/gateway.rb +332 -0
  16. data/lib/active_merchant/billing/gateways/adyen.rb +774 -0
  17. data/lib/active_merchant/billing/gateways/airwallex.rb +370 -0
  18. data/lib/active_merchant/billing/gateways/alelo.rb +256 -0
  19. data/lib/active_merchant/billing/gateways/allied_wallet.rb +205 -0
  20. data/lib/active_merchant/billing/gateways/authorize_net.rb +1125 -0
  21. data/lib/active_merchant/billing/gateways/authorize_net_arb.rb +424 -0
  22. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +977 -0
  23. data/lib/active_merchant/billing/gateways/axcessms.rb +242 -0
  24. data/lib/active_merchant/billing/gateways/balanced.rb +263 -0
  25. data/lib/active_merchant/billing/gateways/bambora_apac.rb +222 -0
  26. data/lib/active_merchant/billing/gateways/bank_frick.rb +225 -0
  27. data/lib/active_merchant/billing/gateways/banwire.rb +116 -0
  28. data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +397 -0
  29. data/lib/active_merchant/billing/gateways/barclays_epdq_extra_plus.rb +15 -0
  30. data/lib/active_merchant/billing/gateways/be2bill.rb +131 -0
  31. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +474 -0
  32. data/lib/active_merchant/billing/gateways/beanstream.rb +238 -0
  33. data/lib/active_merchant/billing/gateways/beanstream_interac.rb +57 -0
  34. data/lib/active_merchant/billing/gateways/blue_pay.rb +549 -0
  35. data/lib/active_merchant/billing/gateways/blue_snap.rb +644 -0
  36. data/lib/active_merchant/billing/gateways/bogus.rb +190 -0
  37. data/lib/active_merchant/billing/gateways/borgun.rb +272 -0
  38. data/lib/active_merchant/billing/gateways/bpoint.rb +277 -0
  39. data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +28 -0
  40. data/lib/active_merchant/billing/gateways/braintree/token_nonce.rb +113 -0
  41. data/lib/active_merchant/billing/gateways/braintree.rb +19 -0
  42. data/lib/active_merchant/billing/gateways/braintree_blue.rb +952 -0
  43. data/lib/active_merchant/billing/gateways/braintree_orange.rb +19 -0
  44. data/lib/active_merchant/billing/gateways/bridge_pay.rb +244 -0
  45. data/lib/active_merchant/billing/gateways/cams.rb +230 -0
  46. data/lib/active_merchant/billing/gateways/card_connect.rb +338 -0
  47. data/lib/active_merchant/billing/gateways/card_save.rb +21 -0
  48. data/lib/active_merchant/billing/gateways/card_stream.rb +394 -0
  49. data/lib/active_merchant/billing/gateways/cardknox.rb +327 -0
  50. data/lib/active_merchant/billing/gateways/cardprocess.rb +256 -0
  51. data/lib/active_merchant/billing/gateways/cashnet.rb +235 -0
  52. data/lib/active_merchant/billing/gateways/cc5.rb +198 -0
  53. data/lib/active_merchant/billing/gateways/cecabank.rb +249 -0
  54. data/lib/active_merchant/billing/gateways/cenpos.rb +328 -0
  55. data/lib/active_merchant/billing/gateways/checkout.rb +212 -0
  56. data/lib/active_merchant/billing/gateways/checkout_v2.rb +587 -0
  57. data/lib/active_merchant/billing/gateways/citrus_pay.rb +21 -0
  58. data/lib/active_merchant/billing/gateways/clearhaus.rb +219 -0
  59. data/lib/active_merchant/billing/gateways/commerce_hub.rb +366 -0
  60. data/lib/active_merchant/billing/gateways/commercegate.rb +142 -0
  61. data/lib/active_merchant/billing/gateways/conekta.rb +230 -0
  62. data/lib/active_merchant/billing/gateways/creditcall.rb +272 -0
  63. data/lib/active_merchant/billing/gateways/credorax.rb +526 -0
  64. data/lib/active_merchant/billing/gateways/ct_payment.rb +269 -0
  65. data/lib/active_merchant/billing/gateways/culqi.rb +279 -0
  66. data/lib/active_merchant/billing/gateways/cyber_source/cyber_source_common.rb +36 -0
  67. data/lib/active_merchant/billing/gateways/cyber_source.rb +1148 -0
  68. data/lib/active_merchant/billing/gateways/cyber_source_rest.rb +454 -0
  69. data/lib/active_merchant/billing/gateways/d_local.rb +343 -0
  70. data/lib/active_merchant/billing/gateways/data_cash.rb +302 -0
  71. data/lib/active_merchant/billing/gateways/decidir.rb +358 -0
  72. data/lib/active_merchant/billing/gateways/decidir_plus.rb +344 -0
  73. data/lib/active_merchant/billing/gateways/dibs.rb +199 -0
  74. data/lib/active_merchant/billing/gateways/digitzs.rb +295 -0
  75. data/lib/active_merchant/billing/gateways/ebanx.rb +346 -0
  76. data/lib/active_merchant/billing/gateways/efsnet.rb +215 -0
  77. data/lib/active_merchant/billing/gateways/elavon.rb +475 -0
  78. data/lib/active_merchant/billing/gateways/element.rb +406 -0
  79. data/lib/active_merchant/billing/gateways/epay.rb +296 -0
  80. data/lib/active_merchant/billing/gateways/evo_ca.rb +307 -0
  81. data/lib/active_merchant/billing/gateways/eway.rb +226 -0
  82. data/lib/active_merchant/billing/gateways/eway_managed.rb +289 -0
  83. data/lib/active_merchant/billing/gateways/eway_rapid.rb +578 -0
  84. data/lib/active_merchant/billing/gateways/exact.rb +219 -0
  85. data/lib/active_merchant/billing/gateways/ezic.rb +195 -0
  86. data/lib/active_merchant/billing/gateways/fat_zebra.rb +223 -0
  87. data/lib/active_merchant/billing/gateways/federated_canada.rb +158 -0
  88. data/lib/active_merchant/billing/gateways/finansbank.rb +22 -0
  89. data/lib/active_merchant/billing/gateways/first_giving.rb +143 -0
  90. data/lib/active_merchant/billing/gateways/first_pay.rb +182 -0
  91. data/lib/active_merchant/billing/gateways/firstdata_e4.rb +452 -0
  92. data/lib/active_merchant/billing/gateways/firstdata_e4_v27.rb +505 -0
  93. data/lib/active_merchant/billing/gateways/flo2cash.rb +215 -0
  94. data/lib/active_merchant/billing/gateways/flo2cash_simple.rb +20 -0
  95. data/lib/active_merchant/billing/gateways/fluidpay.rb +275 -0
  96. data/lib/active_merchant/billing/gateways/forte.rb +286 -0
  97. data/lib/active_merchant/billing/gateways/garanti.rb +256 -0
  98. data/lib/active_merchant/billing/gateways/global_collect.rb +580 -0
  99. data/lib/active_merchant/billing/gateways/global_transport.rb +193 -0
  100. data/lib/active_merchant/billing/gateways/hdfc.rb +205 -0
  101. data/lib/active_merchant/billing/gateways/hps.rb +472 -0
  102. data/lib/active_merchant/billing/gateways/iats_payments.rb +312 -0
  103. data/lib/active_merchant/billing/gateways/in_context_paypal_express.rb +15 -0
  104. data/lib/active_merchant/billing/gateways/inspire.rb +213 -0
  105. data/lib/active_merchant/billing/gateways/instapay.rb +159 -0
  106. data/lib/active_merchant/billing/gateways/ipg.rb +420 -0
  107. data/lib/active_merchant/billing/gateways/ipp.rb +176 -0
  108. data/lib/active_merchant/billing/gateways/iridium.rb +467 -0
  109. data/lib/active_merchant/billing/gateways/itransact.rb +448 -0
  110. data/lib/active_merchant/billing/gateways/iveri.rb +290 -0
  111. data/lib/active_merchant/billing/gateways/ixopay.rb +320 -0
  112. data/lib/active_merchant/billing/gateways/jetpay.rb +395 -0
  113. data/lib/active_merchant/billing/gateways/jetpay_v2.rb +432 -0
  114. data/lib/active_merchant/billing/gateways/klarna.rb +317 -0
  115. data/lib/active_merchant/billing/gateways/komoju.rb +115 -0
  116. data/lib/active_merchant/billing/gateways/kushki.rb +297 -0
  117. data/lib/active_merchant/billing/gateways/latitude19.rb +412 -0
  118. data/lib/active_merchant/billing/gateways/linkpoint.rb +448 -0
  119. data/lib/active_merchant/billing/gateways/litle.rb +643 -0
  120. data/lib/active_merchant/billing/gateways/mastercard.rb +286 -0
  121. data/lib/active_merchant/billing/gateways/maxipago.rb +220 -0
  122. data/lib/active_merchant/billing/gateways/mercado_pago.rb +348 -0
  123. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +228 -0
  124. data/lib/active_merchant/billing/gateways/merchant_one.rb +110 -0
  125. data/lib/active_merchant/billing/gateways/merchant_partners.rb +245 -0
  126. data/lib/active_merchant/billing/gateways/merchant_ware.rb +313 -0
  127. data/lib/active_merchant/billing/gateways/merchant_ware_version_four.rb +284 -0
  128. data/lib/active_merchant/billing/gateways/merchant_warrior.rb +248 -0
  129. data/lib/active_merchant/billing/gateways/mercury.rb +352 -0
  130. data/lib/active_merchant/billing/gateways/metrics_global.rb +293 -0
  131. data/lib/active_merchant/billing/gateways/micropayment.rb +182 -0
  132. data/lib/active_merchant/billing/gateways/migs/migs_codes.rb +100 -0
  133. data/lib/active_merchant/billing/gateways/migs.rb +329 -0
  134. data/lib/active_merchant/billing/gateways/mit.rb +260 -0
  135. data/lib/active_merchant/billing/gateways/modern_payments.rb +37 -0
  136. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +215 -0
  137. data/lib/active_merchant/billing/gateways/moka.rb +290 -0
  138. data/lib/active_merchant/billing/gateways/monei.rb +424 -0
  139. data/lib/active_merchant/billing/gateways/moneris.rb +488 -0
  140. data/lib/active_merchant/billing/gateways/money_movers.rb +150 -0
  141. data/lib/active_merchant/billing/gateways/mundipagg.rb +366 -0
  142. data/lib/active_merchant/billing/gateways/nab_transact.rb +299 -0
  143. data/lib/active_merchant/billing/gateways/ncr_secure_pay.rb +163 -0
  144. data/lib/active_merchant/billing/gateways/net_registry.rb +198 -0
  145. data/lib/active_merchant/billing/gateways/netaxept.rb +180 -0
  146. data/lib/active_merchant/billing/gateways/netbanx.rb +376 -0
  147. data/lib/active_merchant/billing/gateways/netbilling.rb +229 -0
  148. data/lib/active_merchant/billing/gateways/netpay.rb +223 -0
  149. data/lib/active_merchant/billing/gateways/network_merchants.rb +238 -0
  150. data/lib/active_merchant/billing/gateways/nmi.rb +396 -0
  151. data/lib/active_merchant/billing/gateways/ogone.rb +509 -0
  152. data/lib/active_merchant/billing/gateways/omise.rb +323 -0
  153. data/lib/active_merchant/billing/gateways/openpay.rb +246 -0
  154. data/lib/active_merchant/billing/gateways/opp.rb +394 -0
  155. data/lib/active_merchant/billing/gateways/optimal_payment.rb +331 -0
  156. data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +45 -0
  157. data/lib/active_merchant/billing/gateways/orbital.rb +1267 -0
  158. data/lib/active_merchant/billing/gateways/pac_net_raven.rb +206 -0
  159. data/lib/active_merchant/billing/gateways/pagarme.rb +239 -0
  160. data/lib/active_merchant/billing/gateways/pago_facil.rb +120 -0
  161. data/lib/active_merchant/billing/gateways/pay_arc.rb +392 -0
  162. data/lib/active_merchant/billing/gateways/pay_conex.rb +245 -0
  163. data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +277 -0
  164. data/lib/active_merchant/billing/gateways/pay_hub.rb +213 -0
  165. data/lib/active_merchant/billing/gateways/pay_junction.rb +390 -0
  166. data/lib/active_merchant/billing/gateways/pay_junction_v2.rb +206 -0
  167. data/lib/active_merchant/billing/gateways/pay_secure.rb +110 -0
  168. data/lib/active_merchant/billing/gateways/pay_trace.rb +450 -0
  169. data/lib/active_merchant/billing/gateways/paybox_direct.rb +224 -0
  170. data/lib/active_merchant/billing/gateways/payeezy.rb +513 -0
  171. data/lib/active_merchant/billing/gateways/payex.rb +409 -0
  172. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +235 -0
  173. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +42 -0
  174. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +13 -0
  175. data/lib/active_merchant/billing/gateways/payflow.rb +473 -0
  176. data/lib/active_merchant/billing/gateways/payflow_express.rb +220 -0
  177. data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +14 -0
  178. data/lib/active_merchant/billing/gateways/payflow_uk.rb +20 -0
  179. data/lib/active_merchant/billing/gateways/payment_express.rb +373 -0
  180. data/lib/active_merchant/billing/gateways/paymentez.rb +365 -0
  181. data/lib/active_merchant/billing/gateways/paymill.rb +369 -0
  182. data/lib/active_merchant/billing/gateways/paynetworx.rb +228 -0
  183. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +718 -0
  184. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +69 -0
  185. data/lib/active_merchant/billing/gateways/paypal/paypal_recurring_api.rb +262 -0
  186. data/lib/active_merchant/billing/gateways/paypal.rb +136 -0
  187. data/lib/active_merchant/billing/gateways/paypal_ca.rb +13 -0
  188. data/lib/active_merchant/billing/gateways/paypal_digital_goods.rb +44 -0
  189. data/lib/active_merchant/billing/gateways/paypal_express.rb +272 -0
  190. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +30 -0
  191. data/lib/active_merchant/billing/gateways/paypal_standard.rb +281 -0
  192. data/lib/active_merchant/billing/gateways/paysafe.rb +420 -0
  193. data/lib/active_merchant/billing/gateways/payscout.rb +159 -0
  194. data/lib/active_merchant/billing/gateways/paystation.rb +204 -0
  195. data/lib/active_merchant/billing/gateways/payu_in.rb +249 -0
  196. data/lib/active_merchant/billing/gateways/payu_latam.rb +482 -0
  197. data/lib/active_merchant/billing/gateways/payway.rb +207 -0
  198. data/lib/active_merchant/billing/gateways/payway_dot_com.rb +253 -0
  199. data/lib/active_merchant/billing/gateways/pin.rb +273 -0
  200. data/lib/active_merchant/billing/gateways/pixxels.rb +263 -0
  201. data/lib/active_merchant/billing/gateways/plexo.rb +308 -0
  202. data/lib/active_merchant/billing/gateways/plugnpay.rb +283 -0
  203. data/lib/active_merchant/billing/gateways/priority.rb +392 -0
  204. data/lib/active_merchant/billing/gateways/pro_pay.rb +325 -0
  205. data/lib/active_merchant/billing/gateways/psigate.rb +227 -0
  206. data/lib/active_merchant/billing/gateways/psl_card.rb +295 -0
  207. data/lib/active_merchant/billing/gateways/qbms.rb +302 -0
  208. data/lib/active_merchant/billing/gateways/quantum.rb +274 -0
  209. data/lib/active_merchant/billing/gateways/quickbooks.rb +377 -0
  210. data/lib/active_merchant/billing/gateways/quickpay/quickpay_common.rb +184 -0
  211. data/lib/active_merchant/billing/gateways/quickpay/quickpay_v10.rb +297 -0
  212. data/lib/active_merchant/billing/gateways/quickpay/quickpay_v4to7.rb +226 -0
  213. data/lib/active_merchant/billing/gateways/quickpay.rb +24 -0
  214. data/lib/active_merchant/billing/gateways/qvalent.rb +305 -0
  215. data/lib/active_merchant/billing/gateways/rapyd.rb +319 -0
  216. data/lib/active_merchant/billing/gateways/reach.rb +277 -0
  217. data/lib/active_merchant/billing/gateways/realex.rb +400 -0
  218. data/lib/active_merchant/billing/gateways/redsys.rb +723 -0
  219. data/lib/active_merchant/billing/gateways/s5.rb +247 -0
  220. data/lib/active_merchant/billing/gateways/safe_charge.rb +298 -0
  221. data/lib/active_merchant/billing/gateways/sage.rb +446 -0
  222. data/lib/active_merchant/billing/gateways/sage_pay.rb +434 -0
  223. data/lib/active_merchant/billing/gateways/sallie_mae.rb +141 -0
  224. data/lib/active_merchant/billing/gateways/secure_net.rb +260 -0
  225. data/lib/active_merchant/billing/gateways/secure_pay.rb +191 -0
  226. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +290 -0
  227. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +103 -0
  228. data/lib/active_merchant/billing/gateways/securion_pay.rb +305 -0
  229. data/lib/active_merchant/billing/gateways/shift4.rb +345 -0
  230. data/lib/active_merchant/billing/gateways/simetrik.rb +368 -0
  231. data/lib/active_merchant/billing/gateways/skip_jack.rb +450 -0
  232. data/lib/active_merchant/billing/gateways/smart_ps.rb +274 -0
  233. data/lib/active_merchant/billing/gateways/so_easy_pay.rb +194 -0
  234. data/lib/active_merchant/billing/gateways/spreedly_core.rb +354 -0
  235. data/lib/active_merchant/billing/gateways/stripe.rb +866 -0
  236. data/lib/active_merchant/billing/gateways/stripe_payment_intents.rb +602 -0
  237. data/lib/active_merchant/billing/gateways/swipe_checkout.rb +151 -0
  238. data/lib/active_merchant/billing/gateways/telr.rb +273 -0
  239. data/lib/active_merchant/billing/gateways/tns.rb +23 -0
  240. data/lib/active_merchant/billing/gateways/trans_first.rb +240 -0
  241. data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +612 -0
  242. data/lib/active_merchant/billing/gateways/transact_pro.rb +222 -0
  243. data/lib/active_merchant/billing/gateways/transax.rb +21 -0
  244. data/lib/active_merchant/billing/gateways/transnational.rb +9 -0
  245. data/lib/active_merchant/billing/gateways/trexle.rb +221 -0
  246. data/lib/active_merchant/billing/gateways/trust_commerce.rb +500 -0
  247. data/lib/active_merchant/billing/gateways/usa_epay.rb +24 -0
  248. data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +1612 -0
  249. data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +367 -0
  250. data/lib/active_merchant/billing/gateways/vanco.rb +303 -0
  251. data/lib/active_merchant/billing/gateways/verifi.rb +224 -0
  252. data/lib/active_merchant/billing/gateways/viaklix.rb +171 -0
  253. data/lib/active_merchant/billing/gateways/visanet_peru.rb +250 -0
  254. data/lib/active_merchant/billing/gateways/vpos.rb +223 -0
  255. data/lib/active_merchant/billing/gateways/webpay.rb +97 -0
  256. data/lib/active_merchant/billing/gateways/wepay.rb +235 -0
  257. data/lib/active_merchant/billing/gateways/wirecard.rb +430 -0
  258. data/lib/active_merchant/billing/gateways/wompi.rb +197 -0
  259. data/lib/active_merchant/billing/gateways/world_net.rb +345 -0
  260. data/lib/active_merchant/billing/gateways/worldpay.rb +1050 -0
  261. data/lib/active_merchant/billing/gateways/worldpay_online_payments.rb +208 -0
  262. data/lib/active_merchant/billing/gateways/worldpay_us.rb +221 -0
  263. data/lib/active_merchant/billing/gateways.rb +14 -0
  264. data/lib/active_merchant/billing/model.rb +30 -0
  265. data/lib/active_merchant/billing/network_tokenization_credit_card.rb +39 -0
  266. data/lib/active_merchant/billing/payment_token.rb +21 -0
  267. data/lib/active_merchant/billing/rails.rb +3 -0
  268. data/lib/active_merchant/billing/response.rb +121 -0
  269. data/lib/active_merchant/billing/three_d_secure_eci_mapper.rb +27 -0
  270. data/lib/active_merchant/billing.rb +16 -0
  271. data/lib/active_merchant/connection.rb +194 -0
  272. data/lib/active_merchant/country.rb +338 -0
  273. data/lib/active_merchant/empty.rb +20 -0
  274. data/lib/active_merchant/errors.rb +38 -0
  275. data/lib/active_merchant/net_http_ssl_connection.rb +11 -0
  276. data/lib/active_merchant/network_connection_retries.rb +78 -0
  277. data/lib/active_merchant/post_data.rb +26 -0
  278. data/lib/active_merchant/posts_data.rb +92 -0
  279. data/lib/active_merchant/version.rb +3 -0
  280. data/lib/active_merchant.rb +63 -0
  281. data/lib/activemerchant.rb +1 -0
  282. data/lib/certs/cacert.pem +3214 -0
  283. data/lib/support/gateway_support.rb +69 -0
  284. data/lib/support/outbound_hosts.rb +28 -0
  285. data/lib/support/ssl_verify.rb +88 -0
  286. data/lib/support/ssl_version.rb +86 -0
  287. metadata +506 -0
@@ -0,0 +1,424 @@
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 = %w[US CA GB]
35
+ self.supported_cardtypes = %i[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, %i[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
+ raise StandardError, "Invalid Automated Recurring Billing Action: #{action}" unless RECURRING_ACTIONS.include?(action)
151
+
152
+ xml = Builder::XmlMarkup.new(indent: 2)
153
+ xml.instruct!(:xml, version: '1.0', encoding: 'utf-8')
154
+ xml.tag!("#{RECURRING_ACTIONS[action]}Request", xmlns: AUTHORIZE_NET_ARB_NAMESPACE) do
155
+ add_merchant_authentication(xml)
156
+ # Merchant-assigned reference ID for the request
157
+ xml.tag!('refId', options[:ref_id]) if options[:ref_id]
158
+ send("build_#{action}_subscription_request", xml, options)
159
+ end
160
+ end
161
+
162
+ # Contains the merchant’s payment gateway account authentication information
163
+ def add_merchant_authentication(xml)
164
+ xml.tag!('merchantAuthentication') do
165
+ xml.tag!('name', @options[:login])
166
+ xml.tag!('transactionKey', @options[:password])
167
+ end
168
+ end
169
+
170
+ # Builds body for ARBCreateSubscriptionRequest
171
+ def build_create_subscription_request(xml, options)
172
+ # Subscription
173
+ add_subscription(xml, options)
174
+
175
+ xml.target!
176
+ end
177
+
178
+ # Builds body for ARBUpdateSubscriptionRequest
179
+ def build_update_subscription_request(xml, options)
180
+ xml.tag!('subscriptionId', options[:subscription_id])
181
+ # Adds Subscription
182
+ add_subscription(xml, options)
183
+
184
+ xml.target!
185
+ end
186
+
187
+ # Builds body for ARBCancelSubscriptionRequest
188
+ def build_cancel_subscription_request(xml, options)
189
+ xml.tag!('subscriptionId', options[:subscription_id])
190
+
191
+ xml.target!
192
+ end
193
+
194
+ # Builds body for ARBGetSubscriptionStatusRequest
195
+ def build_status_subscription_request(xml, options)
196
+ xml.tag!('subscriptionId', options[:subscription_id])
197
+
198
+ xml.target!
199
+ end
200
+
201
+ # Adds subscription information
202
+ def add_subscription(xml, options)
203
+ xml.tag!('subscription') do
204
+ # Merchant-assigned name for the subscription (optional)
205
+ xml.tag!('name', options[:subscription_name]) if options[:subscription_name]
206
+ # Contains information about the payment schedule
207
+ add_payment_schedule(xml, options)
208
+ # The amount to be billed to the customer
209
+ # for each payment in the subscription
210
+ xml.tag!('amount', amount(options[:amount])) if options[:amount]
211
+ if trial = options[:trial]
212
+ # The amount to be charged for each payment during a trial period (conditional)
213
+ xml.tag!('trialAmount', amount(trial[:amount])) if trial[:amount]
214
+ end
215
+ # Contains either the customer’s credit card
216
+ # or bank account payment information
217
+ add_payment(xml, options)
218
+ # Contains order information (optional)
219
+ add_order(xml, options)
220
+ # Contains information about the customer
221
+ add_customer(xml, options)
222
+ # Contains the customer's billing address information
223
+ add_address(xml, 'billTo', options[:billing_address])
224
+ # Contains the customer's shipping address information (optional)
225
+ add_address(xml, 'shipTo', options[:shipping_address])
226
+ end
227
+ end
228
+
229
+ # Adds information about the interval of time between payments
230
+ def add_interval(xml, options)
231
+ interval = options[:interval]
232
+ return unless interval
233
+
234
+ xml.tag!('interval') do
235
+ # The measurement of time, in association with the Interval Unit,
236
+ # that is used to define the frequency of the billing occurrences
237
+ xml.tag!('length', interval[:length])
238
+ # The unit of time, in association with the Interval Length,
239
+ # between each billing occurrence
240
+ xml.tag!('unit', interval[:unit].to_s)
241
+ end
242
+ end
243
+
244
+ # Adds information about the subscription duration
245
+ def add_duration(xml, options)
246
+ duration = options[:duration]
247
+ return unless duration
248
+
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
+
259
+ xml.tag!('paymentSchedule') do
260
+ # Contains information about the interval of time between payments
261
+ add_interval(xml, options)
262
+ add_duration(xml, options)
263
+ if trial = options[:trial]
264
+ # Number of billing occurrences or payments in the trial period (optional)
265
+ xml.tag!('trialOccurrences', trial[:occurrences]) if trial[:occurrences]
266
+ end
267
+ end
268
+ end
269
+
270
+ # Adds customer's credit card or bank account payment information
271
+ def add_payment(xml, options)
272
+ return unless options[:credit_card] || options[:bank_account]
273
+
274
+ xml.tag!('payment') do
275
+ # Contains the customer’s credit card information
276
+ add_credit_card(xml, options)
277
+ # Contains the customer’s bank account information
278
+ add_bank_account(xml, options)
279
+ end
280
+ end
281
+
282
+ # Adds customer’s credit card information
283
+ # Note: This element should only be included
284
+ # when the payment method is credit card.
285
+ def add_credit_card(xml, options)
286
+ credit_card = options[:credit_card]
287
+ return unless credit_card
288
+
289
+ xml.tag!('creditCard') do
290
+ # The credit card number used for payment of the subscription
291
+ xml.tag!('cardNumber', credit_card.number)
292
+ # The expiration date of the credit card used for the subscription
293
+ xml.tag!('expirationDate', expdate(credit_card))
294
+ end
295
+ end
296
+
297
+ # Adds customer’s bank account information
298
+ # Note: This element should only be included
299
+ # when the payment method is bank account.
300
+ def add_bank_account(xml, options)
301
+ bank_account = options[:bank_account]
302
+ return unless bank_account
303
+
304
+ xml.tag!('bankAccount') do
305
+ # The type of bank account used for payment of the subscription
306
+ xml.tag!('accountType', bank_account[:account_type])
307
+ # The routing number of the customer’s bank
308
+ xml.tag!('routingNumber', bank_account[:routing_number])
309
+ # The bank account number used for payment of the subscription
310
+ xml.tag!('accountNumber', bank_account[:account_number])
311
+ # The full name of the individual associated
312
+ # with the bank account number
313
+ xml.tag!('nameOfAccount', bank_account[:name_of_account])
314
+ # The full name of the individual associated
315
+ # with the bank account number (optional)
316
+ xml.tag!('bankName', bank_account[:bank_name]) if bank_account[:bank_name]
317
+ # The type of electronic check transaction used for the subscription
318
+ xml.tag!('echeckType', bank_account[:echeck_type])
319
+ end
320
+ end
321
+
322
+ # Adds order information (optional)
323
+ def add_order(xml, options)
324
+ order = options[:order]
325
+ return unless order
326
+
327
+ xml.tag!('order') do
328
+ # Merchant-assigned invoice number for the subscription (optional)
329
+ xml.tag!('invoiceNumber', order[:invoice_number])
330
+ # Description of the subscription (optional)
331
+ xml.tag!('description', order[:description])
332
+ end
333
+ end
334
+
335
+ # Adds information about the customer
336
+ def add_customer(xml, options)
337
+ customer = options[:customer]
338
+ return unless customer
339
+
340
+ xml.tag!('customer') do
341
+ xml.tag!('type', customer[:type]) if customer[:type]
342
+ xml.tag!('id', customer[:id]) if customer[:id]
343
+ xml.tag!('email', customer[:email]) if customer[:email]
344
+ xml.tag!('phoneNumber', customer[:phone_number]) if customer[:phone_number]
345
+ xml.tag!('faxNumber', customer[:fax_number]) if customer[:fax_number]
346
+ add_drivers_license(xml, options)
347
+ xml.tag!('taxId', customer[:tax_id]) if customer[:tax_id]
348
+ end
349
+ end
350
+
351
+ # Adds the customer's driver's license information (conditional)
352
+ def add_drivers_license(xml, options)
353
+ return unless customer = options[:customer]
354
+ return unless drivers_license = customer[:drivers_license]
355
+
356
+ xml.tag!('driversLicense') do
357
+ # The customer's driver's license number
358
+ xml.tag!('number', drivers_license[:number])
359
+ # The customer's driver's license state
360
+ xml.tag!('state', drivers_license[:state])
361
+ # The customer's driver's license date of birth
362
+ xml.tag!('dateOfBirth', drivers_license[:date_of_birth])
363
+ end
364
+ end
365
+
366
+ # Adds address information
367
+ def add_address(xml, container_name, address)
368
+ return if address.blank?
369
+
370
+ xml.tag!(container_name) do
371
+ xml.tag!('firstName', address[:first_name])
372
+ xml.tag!('lastName', address[:last_name])
373
+ xml.tag!('company', address[:company])
374
+ xml.tag!('address', address[:address1])
375
+ xml.tag!('city', address[:city])
376
+ xml.tag!('state', address[:state])
377
+ xml.tag!('zip', address[:zip])
378
+ xml.tag!('country', address[:country])
379
+ end
380
+ end
381
+
382
+ def expdate(credit_card)
383
+ sprintf('%04d-%02d', credit_card.year, credit_card.month)
384
+ end
385
+
386
+ def recurring_commit(action, request)
387
+ url = test? ? test_url : live_url
388
+ xml = ssl_post(url, request, 'Content-Type' => 'text/xml')
389
+
390
+ response = recurring_parse(action, xml)
391
+
392
+ message = response[:message] || response[:text]
393
+ test_mode = test? || message =~ /Test Mode/
394
+ success = response[:result_code] == 'Ok'
395
+
396
+ Response.new(success, message, response,
397
+ test: test_mode,
398
+ authorization: response[:subscription_id])
399
+ end
400
+
401
+ def recurring_parse(action, xml)
402
+ response = {}
403
+ xml = REXML::Document.new(xml)
404
+ root = REXML::XPath.first(xml, "//#{RECURRING_ACTIONS[action]}Response") ||
405
+ REXML::XPath.first(xml, '//ErrorResponse')
406
+ if root
407
+ root.elements.to_a.each do |node|
408
+ recurring_parse_element(response, node)
409
+ end
410
+ end
411
+
412
+ response
413
+ end
414
+
415
+ def recurring_parse_element(response, node)
416
+ if node.has_elements?
417
+ node.elements.each { |e| recurring_parse_element(response, e) }
418
+ else
419
+ response[node.name.underscore.to_sym] = node.text
420
+ end
421
+ end
422
+ end
423
+ end
424
+ end