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,277 @@
1
+ require 'digest/md5'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ # This gateway accepts the following arguments:
6
+ # :login => your PayJunction username
7
+ # :password => your PayJunction pass
8
+ # Example use:
9
+ #
10
+ # gateway = ActiveMerchant::Billing::Base.gateway(:pay_gate_xml).new(
11
+ # :login => "my_account",
12
+ # :password => "my_pass"
13
+ # )
14
+ #
15
+ # # set up credit card obj as in main ActiveMerchant example
16
+ # creditcard = ActiveMerchant::Billing::CreditCard.new(
17
+ # :type => 'visa',
18
+ # :number => '4242424242424242',
19
+ # :month => 8,
20
+ # :year => 2009,
21
+ # :first_name => 'Bob',
22
+ # :last_name => 'Bobsen'
23
+ # )
24
+ #
25
+ # # run request
26
+ # response = gateway.purchase(1000, creditcard) # charge 10 dollars
27
+ #
28
+ # 1) Check whether the transaction was successful
29
+ #
30
+ # response.success?
31
+ #
32
+ # 2) Retrieve the message returned by PayJunction
33
+ #
34
+ # response.message
35
+ #
36
+ # 3) Retrieve the unique transaction ID returned by PayGateXML
37
+ #
38
+ # response.authorization
39
+ #
40
+ # This gateway has many other features which are not implemented here yet
41
+ # The basic setup here only supports auth/capture transactions.
42
+ #
43
+ # Test Transactions
44
+ #
45
+ # PayGateXML has a global test user/pass, but you can also sign up for your own.
46
+ # The class and the test come equipped with the global test creds
47
+ #
48
+ # Usage Details
49
+ #
50
+ # Below is a map of only SOME of the values accepted by PayGateXML and how you should submit
51
+ # each to ActiveMerchant
52
+ #
53
+ # PayGateXML Field ActiveMerchant Use
54
+ #
55
+ # pgid use :login value to gateway instantiation
56
+ # pwd use :password value to gateway instantiation
57
+ #
58
+ # cname credit_card.name
59
+ # cc credit_card.number
60
+ # exp credit_card values formatted to YYYYMMDD
61
+ # budp South Africa only - set to 0 if purchase is not on budget
62
+ # amt include as argument to method for your transaction type
63
+ # ver do nothing, always set to current API version
64
+ #
65
+ # cref provide as :invoice in options, varchar(80)
66
+ # cur 3 char field, currently only ZAR
67
+ # cvv credit_card.verification
68
+ # bno batch processing number, i.e. you supply this
69
+ #
70
+ # others -- not used in this implementation
71
+ # nurl, rurl - must remain blank or absent or they will use an alternative authentication mechanism
72
+ # email, ip - must remain blank or absent or they will use a PayGate extra service call PayProtector
73
+ # threed - must remain blank unless you are using your own 3D Secure server
74
+ #
75
+ class PayGateXmlGateway < Gateway
76
+ self.live_url = 'https://www.paygate.co.za/payxml/process.trans'
77
+
78
+ # The countries the gateway supports merchants from as 2 digit ISO country codes
79
+ self.supported_countries = %w[US ZA]
80
+
81
+ # The card types supported by the payment gateway
82
+ self.supported_cardtypes = %i[visa master american_express diners_club]
83
+
84
+ # The homepage URL of the gateway
85
+ self.homepage_url = 'http://paygate.co.za/'
86
+
87
+ # The name of the gateway
88
+ self.display_name = 'PayGate PayXML'
89
+
90
+ # PayGate only supports Rands
91
+ self.default_currency = 'ZAR'
92
+
93
+ # PayGate accepts only lowest denomination
94
+ self.money_format = :cents
95
+
96
+ # PayGateXML public test account - you can get a private one too
97
+ TEST_ID_3DSECURE = '10011013800'
98
+ TEST_ID = '10011021600'
99
+ TEST_PWD = 'test'
100
+
101
+ API_VERSION = '4.0'
102
+
103
+ DECLINE_CODES = {
104
+ # Credit Card Errors - These RESULT_CODEs are returned if the transaction cannot be authorized due to a problem with the card. The TRANSACTION_STATUS will be 2
105
+ 900001 => 'Call for Approval',
106
+ 900002 => 'Card Expired',
107
+ 900003 => 'Insufficient Funds',
108
+ 900004 => 'Invalid Card Number',
109
+ 900005 => 'Bank Interface Timeout', # indicates a communications failure between the banks systems
110
+ 900006 => 'Invalid Card',
111
+ 900007 => 'Declined',
112
+ 900009 => 'Lost Card',
113
+ 900010 => 'Invalid Card Length',
114
+ 900011 => 'Suspected Fraud',
115
+ 900012 => 'Card Reported As Stolen',
116
+ 900013 => 'Restricted Card',
117
+ 900014 => 'Excessive Card Usage',
118
+ 900015 => 'Card Blacklisted',
119
+
120
+ 900207 => 'Declined; authentication failed', # indicates the cardholder did not enter their MasterCard SecureCode / Verified by Visa password correctly
121
+
122
+ 990020 => 'Auth Declined',
123
+
124
+ 991001 => 'Invalid expiry date',
125
+ 991002 => 'Invalid amount',
126
+
127
+ # Communication Errors - These RESULT_CODEs are returned if the transaction cannot be completed due to an unexpected error. TRANSACTION_STATUS will be 0.
128
+ 900205 => 'Unexpected authentication result (phase 1)',
129
+ 900206 => 'Unexpected authentication result (phase 1)',
130
+
131
+ 990001 => 'Could not insert into Database',
132
+
133
+ 990022 => 'Bank not available',
134
+
135
+ 990053 => 'Error processing transaction',
136
+
137
+ # Miscellaneous - Unless otherwise noted, the TRANSACTION_STATUS will be 0.
138
+ 900209 => 'Transaction verification failed (phase 2)', # Indicates the verification data returned from MasterCard SecureCode / Verified by Visa has been altered
139
+ 900210 => 'Authentication complete; transaction must be restarted', # Indicates that the MasterCard SecuerCode / Verified by Visa transaction has already been completed. Most likely caused by the customer clicking the refresh button
140
+
141
+ 990024 => 'Duplicate Transaction Detected. Please check before submitting',
142
+
143
+ 990028 => 'Transaction cancelled' # Customer clicks the 'Cancel' button on the payment page
144
+ }
145
+
146
+ SUCCESS_CODES = %w(990004 990005 990017 990012 990018 990031)
147
+
148
+ TRANSACTION_CODES = {
149
+ 0 => 'Not Done',
150
+ 1 => 'Approved',
151
+ 2 => 'Declined',
152
+ 3 => 'Paid',
153
+ 4 => 'Refunded',
154
+ 5 => 'Received by PayGate',
155
+ 6 => 'Replied to Client'
156
+ }
157
+
158
+ def initialize(options = {})
159
+ requires!(options, :login, :password)
160
+ super
161
+ end
162
+
163
+ def purchase(money, creditcard, options = {})
164
+ MultiResponse.run do |r|
165
+ r.process { authorize(money, creditcard, options) }
166
+ r.process { capture(money, r.authorization, options) }
167
+ end
168
+ end
169
+
170
+ def authorize(money, creditcard, options = {})
171
+ action = 'authtx'
172
+
173
+ options[:money] = money
174
+ options[:creditcard] = creditcard
175
+ commit(action, build_request(action, options))
176
+ end
177
+
178
+ def capture(money, authorization, options = {})
179
+ action = 'settletx'
180
+
181
+ options[:money] = money
182
+ options[:authorization] = authorization
183
+ commit(action, build_request(action, options), authorization)
184
+ end
185
+
186
+ def refund(money, authorization, options = {})
187
+ action = 'refundtx'
188
+
189
+ options[:money] = money
190
+ options[:authorization] = authorization
191
+ commit(action, build_request(action, options))
192
+ end
193
+
194
+ private
195
+
196
+ def successful?(response)
197
+ SUCCESS_CODES.include?(response[:res])
198
+ end
199
+
200
+ def build_request(action, options = {})
201
+ xml = Builder::XmlMarkup.new
202
+ xml.instruct!
203
+
204
+ xml.tag! 'protocol', ver: API_VERSION, pgid: (test? ? TEST_ID : @options[:login]), pwd: @options[:password] do |protocol|
205
+ money = options.delete(:money)
206
+ authorization = options.delete(:authorization)
207
+ creditcard = options.delete(:creditcard)
208
+ case action
209
+ when 'authtx'
210
+ build_authorization(protocol, money, creditcard, options)
211
+ when 'settletx'
212
+ build_capture(protocol, money, authorization, options)
213
+ when 'refundtx'
214
+ build_refund(protocol, money, authorization, options)
215
+ else
216
+ raise 'no action specified for build_request'
217
+ end
218
+ end
219
+
220
+ xml.target!
221
+ end
222
+
223
+ def build_authorization(xml, money, creditcard, options = {})
224
+ xml.tag! 'authtx', {
225
+ cref: options[:order_id],
226
+ cname: creditcard.name,
227
+ cc: creditcard.number,
228
+ exp: "#{format(creditcard.month, :two_digits)}#{format(creditcard.year, :four_digits)}",
229
+ budp: 0,
230
+ amt: amount(money),
231
+ cur: (options[:currency] || currency(money)),
232
+ cvv: creditcard.verification_value,
233
+ email: options[:email],
234
+ ip: options[:ip]
235
+ }
236
+ end
237
+
238
+ def build_capture(xml, money, authorization, options = {})
239
+ xml.tag! 'settletx', {
240
+ tid: authorization
241
+ }
242
+ end
243
+
244
+ def build_refund(xml, money, authorization, options = {})
245
+ xml.tag! 'refundtx', {
246
+ tid: authorization,
247
+ amt: amount(money)
248
+ }
249
+ end
250
+
251
+ def parse(action, body)
252
+ hash = {}
253
+ xml = REXML::Document.new(body)
254
+
255
+ response_action = action.gsub(/tx/, 'rx')
256
+ root = REXML::XPath.first(xml.root, response_action)
257
+ # we might have gotten an error
258
+ root = REXML::XPath.first(xml.root, 'errorrx') if root.nil?
259
+ root.attributes.each do |name, value|
260
+ hash[name.to_sym] = value
261
+ end
262
+ hash
263
+ end
264
+
265
+ def commit(action, request, authorization = nil)
266
+ response = parse(action, ssl_post(self.live_url, request))
267
+ Response.new(successful?(response), message_from(response), response,
268
+ test: test?,
269
+ authorization: authorization || response[:tid])
270
+ end
271
+
272
+ def message_from(response)
273
+ (response[:rdesc] || response[:edesc])
274
+ end
275
+ end
276
+ end
277
+ end
@@ -0,0 +1,213 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ class PayHubGateway < Gateway
4
+ self.live_url = 'https://checkout.payhub.com/transaction/api'
5
+
6
+ self.supported_countries = ['US']
7
+ self.default_currency = 'USD'
8
+ self.supported_cardtypes = %i[visa master american_express discover]
9
+
10
+ self.homepage_url = 'http://www.payhub.com/'
11
+ self.display_name = 'PayHub'
12
+
13
+ CVV_CODE_TRANSLATOR = {
14
+ 'M' => 'CVV matches',
15
+ 'N' => 'CVV does not match',
16
+ 'P' => 'CVV not processed',
17
+ 'S' => 'CVV should have been present',
18
+ 'U' => 'CVV request unable to be processed by issuer'
19
+ }
20
+
21
+ AVS_CODE_TRANSLATOR = {
22
+ '0' => 'Approved, Address verification was not requested.',
23
+ 'A' => 'Approved, Address matches only.',
24
+ 'B' => 'Address Match. Street Address math for international transaction Postal Code not verified because of incompatible formats (Acquirer sent both street address and Postal Code)',
25
+ 'C' => 'Serv Unavailable. Street address and Postal Code not verified for international transaction because of incompatible formats (Acquirer sent both street and Postal Code).',
26
+ 'D' => 'Exact Match, Street Address and Postal Code match for international transaction.',
27
+ 'F' => 'Exact Match, Street Address and Postal Code match. Applies to UK only.',
28
+ 'G' => 'Ver Unavailable, Non-U.S. Issuer does not participate.',
29
+ 'I' => 'Ver Unavailable, Address information not verified for international transaction',
30
+ 'M' => 'Exact Match, Street Address and Postal Code match for international transaction',
31
+ 'N' => 'No - Address and ZIP Code does not match',
32
+ 'P' => 'Zip Match, Postal Codes match for international transaction Street address not verified because of incompatible formats (Acquirer sent both street address and Postal Code).',
33
+ 'R' => 'Retry - Issuer system unavailable',
34
+ 'S' => 'Serv Unavailable, Service not supported',
35
+ 'U' => 'Ver Unavailable, Address unavailable.',
36
+ 'W' => 'ZIP match - Nine character numeric ZIP match only.',
37
+ 'X' => 'Exact match, Address and nine-character ZIP match.',
38
+ 'Y' => 'Exact Match, Address and five character ZIP match.',
39
+ 'Z' => 'Zip Match, Five character numeric ZIP match only.',
40
+ '1' => 'Cardholder name and ZIP match AMEX only.',
41
+ '2' => 'Cardholder name, address, and ZIP match AMEX only.',
42
+ '3' => 'Cardholder name and address match AMEX only.',
43
+ '4' => 'Cardholder name match AMEX only.',
44
+ '5' => 'Cardholder name incorrect, ZIP match AMEX only.',
45
+ '6' => 'Cardholder name incorrect, address and ZIP match AMEX only.',
46
+ '7' => 'Cardholder name incorrect, address match AMEX only.',
47
+ '8' => 'Cardholder, all do not match AMEX only.'
48
+ }
49
+
50
+ STANDARD_ERROR_CODE_MAPPING = {
51
+ '14' => STANDARD_ERROR_CODE[:invalid_number],
52
+ '80' => STANDARD_ERROR_CODE[:invalid_expiry_date],
53
+ '82' => STANDARD_ERROR_CODE[:invalid_cvc],
54
+ '54' => STANDARD_ERROR_CODE[:expired_card],
55
+ '51' => STANDARD_ERROR_CODE[:card_declined],
56
+ '05' => STANDARD_ERROR_CODE[:card_declined],
57
+ '61' => STANDARD_ERROR_CODE[:card_declined],
58
+ '62' => STANDARD_ERROR_CODE[:card_declined],
59
+ '65' => STANDARD_ERROR_CODE[:card_declined],
60
+ '93' => STANDARD_ERROR_CODE[:card_declined],
61
+ '01' => STANDARD_ERROR_CODE[:call_issuer],
62
+ '02' => STANDARD_ERROR_CODE[:call_issuer],
63
+ '04' => STANDARD_ERROR_CODE[:pickup_card],
64
+ '07' => STANDARD_ERROR_CODE[:pickup_card],
65
+ '41' => STANDARD_ERROR_CODE[:pickup_card],
66
+ '43' => STANDARD_ERROR_CODE[:pickup_card]
67
+ }
68
+
69
+ def initialize(options = {})
70
+ requires!(options, :orgid, :username, :password, :tid)
71
+
72
+ super
73
+ end
74
+
75
+ def authorize(amount, creditcard, options = {})
76
+ post = setup_post('auth')
77
+ add_creditcard(post, creditcard)
78
+ add_amount(post, amount)
79
+ add_address(post, (options[:address] || options[:billing_address]))
80
+ add_customer_data(post, options)
81
+
82
+ commit(post)
83
+ end
84
+
85
+ def purchase(amount, creditcard, options = {})
86
+ post = setup_post('sale')
87
+ add_creditcard(post, creditcard)
88
+ add_amount(post, amount)
89
+ add_address(post, (options[:address] || options[:billing_address]))
90
+ add_customer_data(post, options)
91
+
92
+ commit(post)
93
+ end
94
+
95
+ def refund(amount, trans_id, options = {})
96
+ # Attempt a void in case the transaction is unsettled
97
+ post = setup_post('void')
98
+ add_reference(post, trans_id)
99
+ response = commit(post)
100
+ return response if response.success?
101
+
102
+ post = setup_post('refund')
103
+ add_reference(post, trans_id)
104
+ commit(post)
105
+ end
106
+
107
+ def capture(amount, trans_id, options = {})
108
+ post = setup_post('capture')
109
+
110
+ add_reference(post, trans_id)
111
+ add_amount(post, amount)
112
+
113
+ commit(post)
114
+ end
115
+
116
+ # No void, as PayHub's void does not work on authorizations
117
+
118
+ def verify(creditcard, options = {})
119
+ authorize(100, creditcard, options)
120
+ end
121
+
122
+ private
123
+
124
+ def setup_post(action)
125
+ post = {}
126
+ post[:orgid] = @options[:orgid]
127
+ post[:tid] = @options[:tid]
128
+ post[:username] = @options[:username]
129
+ post[:password] = @options[:password]
130
+ post[:mode] = (test? ? 'demo' : 'live')
131
+ post[:trans_type] = action
132
+ post
133
+ end
134
+
135
+ def add_reference(post, trans_id)
136
+ post[:trans_id] = trans_id
137
+ end
138
+
139
+ def add_customer_data(post, options = {})
140
+ post[:first_name] = options[:first_name]
141
+ post[:last_name] = options[:last_name]
142
+ post[:phone] = options[:phone]
143
+ post[:email] = options[:email]
144
+ end
145
+
146
+ def add_address(post, address)
147
+ return unless address
148
+
149
+ post[:address1] = address[:address1]
150
+ post[:address2] = address[:address2]
151
+ post[:zip] = address[:zip]
152
+ post[:state] = address[:state]
153
+ post[:city] = address[:city]
154
+ end
155
+
156
+ def add_amount(post, amount)
157
+ post[:amount] = amount(amount)
158
+ end
159
+
160
+ def add_creditcard(post, creditcard)
161
+ post[:cc] = creditcard.number
162
+ post[:month] = creditcard.month.to_s
163
+ post[:year] = creditcard.year.to_s
164
+ post[:cvv] = creditcard.verification_value
165
+ end
166
+
167
+ def parse(body)
168
+ JSON.parse(body)
169
+ end
170
+
171
+ def commit(post)
172
+ success = false
173
+
174
+ begin
175
+ raw_response = ssl_post(live_url, post.to_json, { 'Content-Type' => 'application/json' })
176
+ response = parse(raw_response)
177
+ success = (response['RESPONSE_CODE'] == '00')
178
+ rescue ResponseError => e
179
+ raw_response = e.response.body
180
+ response = response_error(raw_response)
181
+ rescue JSON::ParserError
182
+ response = json_error(raw_response)
183
+ end
184
+
185
+ Response.new(success,
186
+ response_message(response),
187
+ response,
188
+ test: test?,
189
+ avs_result: { code: response['AVS_RESULT_CODE'] },
190
+ cvv_result: response['VERIFICATION_RESULT_CODE'],
191
+ error_code: (success ? nil : STANDARD_ERROR_CODE_MAPPING[response['RESPONSE_CODE']]),
192
+ authorization: response['TRANSACTION_ID'])
193
+ end
194
+
195
+ def response_error(raw_response)
196
+ parse(raw_response)
197
+ rescue JSON::ParserError
198
+ json_error(raw_response)
199
+ end
200
+
201
+ def json_error(raw_response)
202
+ {
203
+ error_message: 'Invalid response received from the Payhub API. Please contact wecare@payhub.com if you continue to receive this message.' \
204
+ " (The raw response returned by the API was #{raw_response.inspect})"
205
+ }
206
+ end
207
+
208
+ def response_message(response)
209
+ (response['RESPONSE_TEXT'] || response['RESPONSE_CODE'] || response[:error_message])
210
+ end
211
+ end
212
+ end
213
+ end