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,151 @@
1
+ require 'json'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ class SwipeCheckoutGateway < Gateway
6
+ TRANSACTION_APPROVED_MSG = 'Transaction approved'
7
+ TRANSACTION_DECLINED_MSG = 'Transaction declined'
8
+
9
+ self.live_url = 'https://api.swipehq.com'
10
+ self.test_url = 'https://api.swipehq.com'
11
+
12
+ TRANSACTION_API = '/createShopifyTransaction.php'
13
+
14
+ self.supported_countries = %w[NZ CA]
15
+ self.default_currency = 'NZD'
16
+ self.supported_cardtypes = %i[visa master]
17
+ self.homepage_url = 'https://www.swipehq.com/checkout'
18
+ self.display_name = 'Swipe Checkout'
19
+ self.money_format = :dollars
20
+
21
+ # Swipe Checkout requires the merchant's email and API key for authorization.
22
+ # This can be found under Settings > API Credentials after logging in to your
23
+ # Swipe Checkout merchant console at https://merchant.swipehq.[com|ca]
24
+ #
25
+ # :region determines which Swipe URL is used, this can be one of "NZ" or "CA".
26
+ # Currently Swipe Checkout has New Zealand and Canadian domains (swipehq.com
27
+ # and swipehq.ca respectively). Merchants must use the region that they
28
+ # signed up in for authentication with their merchant ID and API key to succeed.
29
+ def initialize(options = {})
30
+ requires!(options, :login, :api_key, :region)
31
+ super
32
+ end
33
+
34
+ # Transfers funds immediately.
35
+ # Note that Swipe Checkout only supports purchase at this stage
36
+ def purchase(money, creditcard, options = {})
37
+ post = {}
38
+ add_invoice(post, options)
39
+ add_creditcard(post, creditcard)
40
+ add_customer_data(post, creditcard, options)
41
+ add_amount(post, money, options)
42
+
43
+ commit('sale', money, post)
44
+ end
45
+
46
+ private
47
+
48
+ def add_customer_data(post, creditcard, options)
49
+ post[:email] = options[:email]
50
+ post[:ip_address] = options[:ip]
51
+
52
+ address = options[:billing_address] || options[:address]
53
+ return if address.nil?
54
+
55
+ post[:company] = address[:company]
56
+
57
+ post[:first_name], post[:last_name] = split_names(address[:name])
58
+ post[:address] = "#{address[:address1]}, #{address[:address2]}"
59
+ post[:city] = address[:city]
60
+ post[:country] = address[:country]
61
+ post[:mobile] = address[:phone] # API only has a "mobile" field, no "phone"
62
+ end
63
+
64
+ def add_invoice(post, options)
65
+ # store shopping-cart order ID in Swipe for merchant's records
66
+ post[:td_user_data] = options[:order_id] if options[:order_id]
67
+ post[:td_item] = options[:description] if options[:description]
68
+ post[:td_description] = options[:description] if options[:description]
69
+ post[:item_quantity] = '1'
70
+ end
71
+
72
+ def add_creditcard(post, creditcard)
73
+ post[:card_number] = creditcard.number
74
+ post[:card_type] = creditcard.brand
75
+ post[:name_on_card] = "#{creditcard.first_name} #{creditcard.last_name}"
76
+ post[:card_expiry] = expdate(creditcard)
77
+ post[:secure_number] = creditcard.verification_value
78
+ end
79
+
80
+ def expdate(creditcard)
81
+ year = format(creditcard.year, :two_digits)
82
+ month = format(creditcard.month, :two_digits)
83
+
84
+ "#{month}#{year}"
85
+ end
86
+
87
+ def add_amount(post, money, options)
88
+ post[:amount] = money.to_s
89
+
90
+ post[:currency] = (options[:currency] || currency(money))
91
+ end
92
+
93
+ def commit(action, money, parameters)
94
+ case action
95
+ when 'sale'
96
+ begin
97
+ response = call_api(TRANSACTION_API, parameters)
98
+
99
+ # response code and message params should always be present
100
+ code = response['response_code']
101
+ message = response['message']
102
+
103
+ if code == 200
104
+ result = response['data']['result']
105
+ success = (result == 'accepted' || (test? && result == 'test-accepted'))
106
+
107
+ Response.new(success,
108
+ success ?
109
+ TRANSACTION_APPROVED_MSG :
110
+ TRANSACTION_DECLINED_MSG,
111
+ response,
112
+ test: test?)
113
+ else
114
+ build_error_response(message, response)
115
+ end
116
+ rescue ResponseError => e
117
+ build_error_response("ssl_post() with url #{url} raised ResponseError: #{e}")
118
+ rescue JSON::ParserError => e
119
+ msg = 'Invalid response received from the Swipe Checkout API. ' \
120
+ 'Please contact support@optimizerhq.com if you continue to receive this message.' \
121
+ " (Full error message: #{e})"
122
+ build_error_response(msg)
123
+ end
124
+ end
125
+ end
126
+
127
+ def call_api(api, params = nil)
128
+ params ||= {}
129
+ params[:merchant_id] = @options[:login]
130
+ params[:api_key] = @options[:api_key]
131
+
132
+ # ssl_post() returns the response body as a string on success,
133
+ # or raises a ResponseError exception on failure
134
+ JSON.parse(ssl_post(url(api), params.to_query))
135
+ end
136
+
137
+ def url(api)
138
+ (test? ? self.test_url : self.live_url) + api
139
+ end
140
+
141
+ def build_error_response(message, params = {})
142
+ Response.new(
143
+ false,
144
+ message,
145
+ params,
146
+ test: test?
147
+ )
148
+ end
149
+ end
150
+ end
151
+ end
@@ -0,0 +1,273 @@
1
+ require 'nokogiri'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ class TelrGateway < Gateway
6
+ self.display_name = 'Telr'
7
+ self.homepage_url = 'http://www.telr.com/'
8
+
9
+ self.live_url = 'https://secure.telr.com/gateway/remote.xml'
10
+
11
+ self.supported_countries = %w[AE IN SA]
12
+ self.default_currency = 'AED'
13
+ self.money_format = :dollars
14
+ self.supported_cardtypes = %i[visa master american_express maestro jcb]
15
+
16
+ CVC_CODE_TRANSLATOR = {
17
+ 'Y' => 'M',
18
+ 'N' => 'N',
19
+ 'X' => 'P',
20
+ 'E' => 'U'
21
+ }
22
+
23
+ AVS_CODE_TRANSLATOR = {
24
+ 'Y' => 'M',
25
+ 'P' => 'A',
26
+ 'N' => 'N',
27
+ 'X' => 'I',
28
+ 'E' => 'R'
29
+ }
30
+
31
+ def initialize(options = {})
32
+ requires!(options, :merchant_id, :api_key)
33
+ super
34
+ end
35
+
36
+ def purchase(amount, payment_method, options = {})
37
+ commit(:purchase, amount, options[:currency]) do |doc|
38
+ add_invoice(doc, 'sale', amount, payment_method, options)
39
+ add_payment_method(doc, payment_method, options)
40
+ add_customer_data(doc, payment_method, options)
41
+ end
42
+ end
43
+
44
+ def authorize(amount, payment_method, options = {})
45
+ commit(:authorize, amount, options[:currency]) do |doc|
46
+ add_invoice(doc, 'auth', amount, payment_method, options)
47
+ add_payment_method(doc, payment_method, options)
48
+ add_customer_data(doc, payment_method, options)
49
+ end
50
+ end
51
+
52
+ def capture(amount, authorization, options = {})
53
+ commit(:capture) do |doc|
54
+ add_invoice(doc, 'capture', amount, authorization, options)
55
+ end
56
+ end
57
+
58
+ def void(authorization, options = {})
59
+ _, amount, currency = split_authorization(authorization)
60
+ commit(:void) do |doc|
61
+ add_invoice(doc, 'void', amount.to_i, authorization, options.merge(currency: currency))
62
+ end
63
+ end
64
+
65
+ def refund(amount, authorization, options = {})
66
+ commit(:refund) do |doc|
67
+ add_invoice(doc, 'refund', amount, authorization, options)
68
+ end
69
+ end
70
+
71
+ def verify(credit_card, options = {})
72
+ commit(:verify) do |doc|
73
+ add_invoice(doc, 'verify', 100, credit_card, options)
74
+ add_payment_method(doc, credit_card, options)
75
+ add_customer_data(doc, credit_card, options)
76
+ end
77
+ end
78
+
79
+ def verify_credentials
80
+ response = void('0')
81
+ !%w[01 04].include?(response.error_code)
82
+ end
83
+
84
+ def supports_scrubbing?
85
+ true
86
+ end
87
+
88
+ def scrub(transcript)
89
+ transcript.
90
+ gsub(%r((<Number>)[^<]+(<))i, '\1[FILTERED]\2').
91
+ gsub(%r((<CVV>)[^<]+(<))i, '\1[FILTERED]\2').
92
+ gsub(%r((<Key>)[^<]+(<))i, '\1[FILTERED]\2')
93
+ end
94
+
95
+ private
96
+
97
+ def add_invoice(doc, action, money, payment_method, options)
98
+ doc.tran do
99
+ doc.type(action)
100
+ doc.amount(amount(money))
101
+ doc.currency(options[:currency] || currency(money))
102
+ doc.cartid(options[:order_id])
103
+ doc.class_(transaction_class(action, payment_method))
104
+ doc.description(options[:description] || 'Description')
105
+ doc.test_(test_mode)
106
+ add_ref(doc, action, payment_method)
107
+ end
108
+ end
109
+
110
+ def add_payment_method(doc, payment_method, options)
111
+ return if payment_method.is_a?(String)
112
+
113
+ doc.card do
114
+ doc.number(payment_method.number)
115
+ doc.cvv(payment_method.verification_value)
116
+ doc.expiry do
117
+ doc.month(format(payment_method.month, :two_digits))
118
+ doc.year(format(payment_method.year, :four_digits))
119
+ end
120
+ end
121
+ end
122
+
123
+ def add_customer_data(doc, payment_method, options)
124
+ return if payment_method.is_a?(String)
125
+
126
+ doc.billing do
127
+ doc.name do
128
+ doc.first(payment_method.first_name)
129
+ doc.last(payment_method.last_name)
130
+ end
131
+ doc.email(options[:email] || 'unspecified@email.com')
132
+ doc.ip(options[:ip]) if options[:ip]
133
+ doc.address do
134
+ add_address(doc, options)
135
+ end
136
+ end
137
+ end
138
+
139
+ def add_address(doc, options)
140
+ address = options[:billing_address] || {}
141
+ doc.country(address[:country] ? lookup_country_code(address[:country]) : 'NA')
142
+ doc.city(address[:city] || 'City')
143
+ doc.line1(address[:address1] || 'Address')
144
+ return unless address
145
+
146
+ doc.line2(address[:address2]) if address[:address2]
147
+ doc.zip(address[:zip]) if address[:zip]
148
+ doc.region(address[:state]) if address[:state]
149
+ end
150
+
151
+ def add_ref(doc, action, payment_method)
152
+ doc.ref(split_authorization(payment_method)[0]) if %w[capture refund void].include?(action) || payment_method.is_a?(String)
153
+ end
154
+
155
+ def add_authentication(doc)
156
+ doc.store(@options[:merchant_id])
157
+ doc.key(@options[:api_key])
158
+ end
159
+
160
+ def lookup_country_code(code)
161
+ country = Country.find(code) rescue nil
162
+ country.code(:alpha2)
163
+ end
164
+
165
+ def commit(action, amount = nil, currency = nil)
166
+ currency = default_currency if currency == nil
167
+ request = build_xml_request { |doc| yield(doc) }
168
+ response = ssl_post(live_url, request, headers)
169
+ parsed = parse(response)
170
+
171
+ succeeded = success_from(parsed)
172
+ Response.new(
173
+ succeeded,
174
+ message_from(succeeded, parsed),
175
+ parsed,
176
+ authorization: authorization_from(action, parsed, amount, currency),
177
+ avs_result: avs_result(parsed),
178
+ cvv_result: cvv_result(parsed),
179
+ error_code: error_code_from(succeeded, parsed),
180
+ test: test?
181
+ )
182
+ end
183
+
184
+ def root_attributes
185
+ {
186
+ store: @options[:merchant_id],
187
+ key: @options[:api_key]
188
+ }
189
+ end
190
+
191
+ def build_xml_request
192
+ builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
193
+ xml.remote do |doc|
194
+ add_authentication(doc)
195
+ yield(doc)
196
+ end
197
+ end
198
+
199
+ builder.doc.to_xml
200
+ end
201
+
202
+ def test_mode
203
+ test? ? '1' : '0'
204
+ end
205
+
206
+ def transaction_class(action, payment_method)
207
+ if payment_method.is_a?(String) && action == 'sale'
208
+ return 'cont'
209
+ else
210
+ return 'moto'
211
+ end
212
+ end
213
+
214
+ def parse(xml)
215
+ response = {}
216
+
217
+ doc = Nokogiri::XML(xml)
218
+ doc.root&.xpath('*')&.each do |node|
219
+ if node.elements.size == 0
220
+ response[node.name.downcase.to_sym] = node.text
221
+ else
222
+ node.elements.each do |childnode|
223
+ name = childnode.name.downcase
224
+ response[name.to_sym] = childnode.text
225
+ end
226
+ end
227
+ end
228
+
229
+ response
230
+ end
231
+
232
+ def authorization_from(action, response, amount, currency)
233
+ auth = response[:tranref]
234
+ auth = [auth, amount, currency].join('|')
235
+ auth
236
+ end
237
+
238
+ def split_authorization(authorization)
239
+ authorization.split('|')
240
+ end
241
+
242
+ def success_from(response)
243
+ response[:status] == 'A'
244
+ end
245
+
246
+ def message_from(succeeded, response)
247
+ if succeeded
248
+ 'Succeeded'
249
+ else
250
+ response[:message]
251
+ end
252
+ end
253
+
254
+ def error_code_from(succeeded, response)
255
+ response[:code] unless succeeded
256
+ end
257
+
258
+ def cvv_result(parsed)
259
+ CVVResult.new(CVC_CODE_TRANSLATOR[parsed[:cvv]])
260
+ end
261
+
262
+ def avs_result(parsed)
263
+ AVSResult.new(code: AVS_CODE_TRANSLATOR[parsed[:avs]])
264
+ end
265
+
266
+ def headers
267
+ {
268
+ 'Content-Type' => 'text/xml'
269
+ }
270
+ end
271
+ end
272
+ end
273
+ end
@@ -0,0 +1,23 @@
1
+ module ActiveMerchant
2
+ module Billing
3
+ class TnsGateway < Gateway
4
+ include MastercardGateway
5
+
6
+ class_attribute :live_na_url, :live_ap_url, :live_eu_url, :test_na_url, :test_ap_url, :test_eu_url
7
+
8
+ VERSION = '52'
9
+
10
+ self.live_na_url = "https://secure.na.tnspayments.com/api/rest/version/#{VERSION}/"
11
+ self.live_ap_url = "https://secure.ap.tnspayments.com/api/rest/version/#{VERSION}/"
12
+ self.live_eu_url = "https://secure.eu.tnspayments.com/api/rest/version/#{VERSION}/"
13
+
14
+ self.test_url = "https://secure.uat.tnspayments.com/api/rest/version/#{VERSION}/"
15
+
16
+ self.display_name = 'TNS'
17
+ self.homepage_url = 'http://www.tnsi.com/'
18
+ self.supported_countries = %w(AR AU BR FR DE HK MX NZ SG GB US)
19
+ self.default_currency = 'USD'
20
+ self.supported_cardtypes = %i[visa master american_express discover diners_club jcb maestro]
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,240 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ class TransFirstGateway < Gateway
4
+ self.test_url = 'https://ws.cert.transfirst.com'
5
+ self.live_url = 'https://webservices.primerchants.com'
6
+
7
+ self.supported_countries = ['US']
8
+ self.supported_cardtypes = %i[visa master american_express discover]
9
+ self.homepage_url = 'http://www.transfirst.com/'
10
+ self.display_name = 'TransFirst'
11
+
12
+ UNUSED_CREDIT_CARD_FIELDS = %w(UserId TrackData MerchZIP MerchCustPNum MCC InstallmentNum InstallmentOf POSInd POSEntryMode POSConditionCode EComInd AuthCharInd CardCertData CAVVData)
13
+
14
+ DECLINED = 'The transaction was declined'
15
+
16
+ ACTIONS = {
17
+ purchase: 'CCSale',
18
+ purchase_echeck: 'ACHDebit',
19
+ refund: 'CreditCardCredit',
20
+ refund_echeck: 'ACHVoidTransaction',
21
+ void: 'CreditCardAutoRefundorVoid'
22
+ }
23
+
24
+ ENDPOINTS = {
25
+ purchase: 'creditcard.asmx',
26
+ purchase_echeck: 'checkverifyws/checkverifyws.asmx',
27
+ refund: 'creditcard.asmx',
28
+ refund_echeck: 'checkverifyws/checkverifyws.asmx',
29
+ void: 'creditcard.asmx'
30
+ }
31
+
32
+ def initialize(options = {})
33
+ requires!(options, :login, :password)
34
+ super
35
+ end
36
+
37
+ def purchase(money, payment, options = {})
38
+ post = {}
39
+
40
+ add_amount(post, money)
41
+ add_payment(post, payment)
42
+ add_address(post, options)
43
+ add_invoice(post, options) if payment.credit_card?
44
+ add_pair(post, :RefID, options[:order_id], required: true)
45
+
46
+ commit((payment.is_a?(Check) ? :purchase_echeck : :purchase), post)
47
+ end
48
+
49
+ def refund(money, authorization, options = {})
50
+ post = {}
51
+
52
+ transaction_id, payment_type = split_authorization(authorization)
53
+ add_amount(post, money)
54
+ add_pair(post, :TransID, transaction_id)
55
+ add_pair(post, :RefID, options[:order_id], required: true)
56
+
57
+ commit((payment_type == 'check' ? :refund_echeck : :refund), post)
58
+ end
59
+
60
+ def void(authorization, options = {})
61
+ post = {}
62
+
63
+ transaction_id, = split_authorization(authorization)
64
+ add_pair(post, :TransID, transaction_id)
65
+
66
+ commit(:void, post)
67
+ end
68
+
69
+ def supports_scrubbing?
70
+ true
71
+ end
72
+
73
+ def scrub(transcript)
74
+ transcript.
75
+ gsub(%r((&?RegKey=)\w*(&?)), '\1[FILTERED]\2').
76
+ gsub(%r((&?CardNumber=)\d*(&?)), '\1[FILTERED]\2').
77
+ gsub(%r((&?CVV2=)\d*(&?)), '\1[FILTERED]\2').
78
+ gsub(%r((&?TransRoute=)\d*(&?)), '\1[FILTERED]\2').
79
+ gsub(%r((&?BankAccountNo=)\d*(&?)), '\1[FILTERED]\2')
80
+ end
81
+
82
+ private
83
+
84
+ def add_amount(post, money)
85
+ add_pair(post, :Amount, amount(money), required: true)
86
+ end
87
+
88
+ def add_address(post, options)
89
+ address = options[:billing_address] || options[:address]
90
+
91
+ if address
92
+ add_pair(post, :Address, address[:address1], required: true)
93
+ add_pair(post, :ZipCode, address[:zip], required: true)
94
+ else
95
+ add_pair(post, :Address, '', required: true)
96
+ add_pair(post, :ZipCode, '', required: true)
97
+ end
98
+ end
99
+
100
+ def add_invoice(post, options)
101
+ add_pair(post, :SECCCode, options[:invoice], required: true)
102
+ add_pair(post, :PONumber, options[:invoice], required: true)
103
+ add_pair(post, :SaleTaxAmount, amount(options[:tax] || 0))
104
+ add_pair(post, :TaxIndicator, 0)
105
+ add_pair(post, :PaymentDesc, options[:description] || '', required: true)
106
+ add_pair(post, :CompanyName, options[:company_name] || '', required: true)
107
+ end
108
+
109
+ def add_payment(post, payment)
110
+ if payment.is_a?(Check)
111
+ add_echeck(post, payment)
112
+ else
113
+ add_credit_card(post, payment)
114
+ end
115
+ end
116
+
117
+ def add_credit_card(post, payment)
118
+ add_pair(post, :CardHolderName, payment.name, required: true)
119
+ add_pair(post, :CardNumber, payment.number, required: true)
120
+ add_pair(post, :Expiration, expdate(payment), required: true)
121
+ add_pair(post, :CVV2, payment.verification_value, required: true)
122
+ end
123
+
124
+ def add_echeck(post, payment)
125
+ add_pair(post, :TransRoute, payment.routing_number, required: true)
126
+ add_pair(post, :BankAccountNo, payment.account_number, required: true)
127
+ add_pair(post, :BankAccountType, add_or_use_default(payment.account_type, 'Checking'), required: true)
128
+ add_pair(post, :CheckType, add_or_use_default(payment.account_holder_type, 'Personal'), required: true)
129
+ add_pair(post, :Name, payment.name, required: true)
130
+ add_pair(post, :ProcessDate, Time.now.strftime('%m%d%y'), required: true)
131
+ add_pair(post, :Description, '', required: true)
132
+ end
133
+
134
+ def add_or_use_default(payment_data, default_value)
135
+ return payment_data.capitalize if payment_data
136
+
137
+ return default_value
138
+ end
139
+
140
+ def add_unused_fields(action, post)
141
+ return unless action == :purchase
142
+
143
+ UNUSED_CREDIT_CARD_FIELDS.each do |f|
144
+ post[f] = ''
145
+ end
146
+ end
147
+
148
+ def expdate(credit_card)
149
+ year = format(credit_card.year, :two_digits)
150
+ month = format(credit_card.month, :two_digits)
151
+
152
+ "#{month}#{year}"
153
+ end
154
+
155
+ def parse(data)
156
+ response = {}
157
+
158
+ xml = REXML::Document.new(data)
159
+ root = REXML::XPath.first(xml, '*')
160
+
161
+ if root.nil?
162
+ response[:message] = data.to_s.strip
163
+ else
164
+ root.elements.to_a.each do |node|
165
+ response[node.name.underscore.to_sym] = node.text
166
+ end
167
+ end
168
+
169
+ response
170
+ end
171
+
172
+ def commit(action, params)
173
+ response = parse(ssl_post(url(action), post_data(action, params)))
174
+ Response.new(
175
+ success_from(response),
176
+ message_from(response),
177
+ response,
178
+ test: test?,
179
+ authorization: authorization_from(response),
180
+ avs_result: { code: response[:avs_code] },
181
+ cvv_result: response[:cvv2_code]
182
+ )
183
+ end
184
+
185
+ def authorization_from(response)
186
+ if response[:status] == 'APPROVED'
187
+ "#{response[:trans_id]}|check"
188
+ else
189
+ "#{response[:trans_id]}|creditcard"
190
+ end
191
+ end
192
+
193
+ def success_from(response)
194
+ case response[:status]
195
+ when 'Authorized'
196
+ true
197
+ when 'Voided'
198
+ true
199
+ when 'APPROVED'
200
+ true
201
+ when 'VOIDED'
202
+ true
203
+ else
204
+ false
205
+ end
206
+ end
207
+
208
+ def message_from(response)
209
+ case response[:message]
210
+ when 'Call Voice Center'
211
+ DECLINED
212
+ else
213
+ response[:message]
214
+ end
215
+ end
216
+
217
+ def post_data(action, params = {})
218
+ add_unused_fields(action, params)
219
+ params[:MerchantID] = @options[:login]
220
+ params[:RegKey] = @options[:password]
221
+
222
+ request = params.collect { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join('&')
223
+ request
224
+ end
225
+
226
+ def add_pair(post, key, value, options = {})
227
+ post[key] = value if !value.blank? || options[:required]
228
+ end
229
+
230
+ def url(action)
231
+ base_url = test? ? test_url : live_url
232
+ "#{base_url}/#{ENDPOINTS[action]}/#{ACTIONS[action]}"
233
+ end
234
+
235
+ def split_authorization(authorization)
236
+ authorization.split('|')
237
+ end
238
+ end
239
+ end
240
+ end