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,190 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ # Bogus Gateway
4
+ class BogusGateway < Gateway
5
+ AUTHORIZATION = '53433'
6
+
7
+ AUTHORIZATION_EMV_SUCCESS = '8A023030'
8
+ AUTHORIZATION_EMV_DECLINE = '8A023035'
9
+
10
+ SUCCESS_MESSAGE = 'Bogus Gateway: Forced success'
11
+ FAILURE_MESSAGE = 'Bogus Gateway: Forced failure'
12
+ NUMBER_ERROR_MESSAGE = 'Bogus Gateway: Use CreditCard number ending in 1 for success, 2 for exception and anything else for error'
13
+ AMOUNT_ERROR_MESSAGE = 'Bogus Gateway: Use amount ending in 00 for success, 05 for failure and anything else for exception'
14
+ UNSTORE_ERROR_MESSAGE = 'Bogus Gateway: Use trans_id ending in 1 for success, 2 for exception and anything else for error'
15
+ CAPTURE_ERROR_MESSAGE = 'Bogus Gateway: Use authorization number ending in 1 for exception, 2 for error and anything else for success'
16
+ VOID_ERROR_MESSAGE = 'Bogus Gateway: Use authorization number ending in 1 for exception, 2 for error and anything else for success'
17
+ REFUND_ERROR_MESSAGE = 'Bogus Gateway: Use trans_id number ending in 1 for exception, 2 for error and anything else for success'
18
+ CHECK_ERROR_MESSAGE = 'Bogus Gateway: Use bank account number ending in 1 for success, 2 for exception and anything else for error'
19
+
20
+ self.supported_countries = []
21
+ self.supported_cardtypes = [:bogus]
22
+ self.homepage_url = 'http://example.com'
23
+ self.display_name = 'Bogus'
24
+
25
+ def authorize(money, paysource, options = {})
26
+ if paysource.respond_to?(:emv?) && paysource.emv?
27
+ authorize_emv(money, paysource, options)
28
+ else
29
+ authorize_swipe(money, paysource, options)
30
+ end
31
+ end
32
+
33
+ def purchase(money, paysource, options = {})
34
+ if paysource.respond_to?(:emv?) && paysource.emv?
35
+ purchase_emv(money, paysource, options)
36
+ else
37
+ purchase_swipe(money, paysource, options)
38
+ end
39
+ end
40
+
41
+ def credit(money, paysource, options = {})
42
+ if paysource.is_a?(String)
43
+ ActiveMerchant.deprecated CREDIT_DEPRECATION_MESSAGE
44
+ return refund(money, paysource, options)
45
+ end
46
+
47
+ money = amount(money)
48
+ case normalize(paysource)
49
+ when /1$/
50
+ Response.new(true, SUCCESS_MESSAGE, { paid_amount: money }, test: true)
51
+ when /2$/
52
+ Response.new(false, FAILURE_MESSAGE, { paid_amount: money, error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error])
53
+ else
54
+ raise Error, error_message(paysource)
55
+ end
56
+ end
57
+
58
+ def refund(money, reference, options = {})
59
+ money = amount(money)
60
+ case reference
61
+ when /1$/
62
+ raise Error, REFUND_ERROR_MESSAGE
63
+ when /2$/
64
+ Response.new(false, FAILURE_MESSAGE, { paid_amount: money, error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error])
65
+ else
66
+ Response.new(true, SUCCESS_MESSAGE, { paid_amount: money }, test: true)
67
+ end
68
+ end
69
+
70
+ def capture(money, reference, options = {})
71
+ money = amount(money)
72
+ case reference
73
+ when /1$/
74
+ raise Error, CAPTURE_ERROR_MESSAGE
75
+ when /2$/
76
+ Response.new(false, FAILURE_MESSAGE, { paid_amount: money, error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error])
77
+ else
78
+ Response.new(true, SUCCESS_MESSAGE, { paid_amount: money }, test: true)
79
+ end
80
+ end
81
+
82
+ def void(reference, options = {})
83
+ case reference
84
+ when /1$/
85
+ raise Error, VOID_ERROR_MESSAGE
86
+ when /2$/
87
+ Response.new(false, FAILURE_MESSAGE, { authorization: reference, error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error])
88
+ else
89
+ Response.new(true, SUCCESS_MESSAGE, { authorization: reference }, test: true)
90
+ end
91
+ end
92
+
93
+ def verify(credit_card, options = {})
94
+ authorize(0, credit_card, options)
95
+ end
96
+
97
+ def store(paysource, options = {})
98
+ case normalize(paysource)
99
+ when /1$/
100
+ Response.new(true, SUCCESS_MESSAGE, { billingid: '1' }, test: true, authorization: AUTHORIZATION)
101
+ when /2$/
102
+ Response.new(false, FAILURE_MESSAGE, { billingid: nil, error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error])
103
+ else
104
+ raise Error, error_message(paysource)
105
+ end
106
+ end
107
+
108
+ def unstore(reference, options = {})
109
+ case reference
110
+ when /1$/
111
+ Response.new(true, SUCCESS_MESSAGE, {}, test: true)
112
+ when /2$/
113
+ Response.new(false, FAILURE_MESSAGE, { error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error])
114
+ else
115
+ raise Error, UNSTORE_ERROR_MESSAGE
116
+ end
117
+ end
118
+
119
+ private
120
+
121
+ def authorize_emv(money, paysource, options = {})
122
+ money = amount(money)
123
+ case money
124
+ when /00$/
125
+ Response.new(true, SUCCESS_MESSAGE, { authorized_amount: money }, test: true, authorization: AUTHORIZATION, emv_authorization: AUTHORIZATION_EMV_SUCCESS)
126
+ when /05$/
127
+ Response.new(false, FAILURE_MESSAGE, { authorized_amount: money, error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error], emv_authorization: AUTHORIZATION_EMV_DECLINE)
128
+ else
129
+ raise Error, error_message(paysource)
130
+ end
131
+ end
132
+
133
+ def authorize_swipe(money, paysource, options = {})
134
+ money = amount(money)
135
+ case normalize(paysource)
136
+ when /1$/, AUTHORIZATION
137
+ Response.new(true, SUCCESS_MESSAGE, { authorized_amount: money }, test: true, authorization: AUTHORIZATION)
138
+ when /2$/
139
+ Response.new(false, FAILURE_MESSAGE, { authorized_amount: money, error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error])
140
+ else
141
+ raise Error, error_message(paysource)
142
+ end
143
+ end
144
+
145
+ def purchase_emv(money, paysource, options = {})
146
+ money = amount(money)
147
+ case money
148
+ when /00$/
149
+ Response.new(true, SUCCESS_MESSAGE, { paid_amount: money }, test: true, authorization: AUTHORIZATION, emv_authorization: AUTHORIZATION_EMV_SUCCESS)
150
+ when /05$/
151
+ Response.new(false, FAILURE_MESSAGE, { paid_amount: money, error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error], emv_authorization: AUTHORIZATION_EMV_DECLINE)
152
+ else
153
+ raise Error, error_message(paysource)
154
+ end
155
+ end
156
+
157
+ def purchase_swipe(money, paysource, options = {})
158
+ money = amount(money)
159
+ case normalize(paysource)
160
+ when /1$/, AUTHORIZATION
161
+ Response.new(true, SUCCESS_MESSAGE, { paid_amount: money }, test: true, authorization: AUTHORIZATION)
162
+ when /2$/
163
+ Response.new(false, FAILURE_MESSAGE, { paid_amount: money, error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error])
164
+ else
165
+ raise Error, error_message(paysource)
166
+ end
167
+ end
168
+
169
+ def normalize(paysource)
170
+ if paysource.respond_to?(:account_number) && (paysource.try(:number).blank? || paysource.number.blank?)
171
+ paysource.account_number
172
+ elsif paysource.respond_to?(:number)
173
+ paysource.number
174
+ else
175
+ paysource.to_s
176
+ end
177
+ end
178
+
179
+ def error_message(paysource)
180
+ if paysource.respond_to?(:emv?) && paysource.emv?
181
+ AMOUNT_ERROR_MESSAGE
182
+ elsif paysource.respond_to?(:account_number)
183
+ CHECK_ERROR_MESSAGE
184
+ elsif paysource.respond_to?(:number)
185
+ NUMBER_ERROR_MESSAGE
186
+ end
187
+ end
188
+ end
189
+ end
190
+ end
@@ -0,0 +1,272 @@
1
+ require 'nokogiri'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ class BorgunGateway < Gateway
6
+ self.display_name = 'Borgun'
7
+ self.homepage_url = 'http://www.borgun.com'
8
+
9
+ self.test_url = 'https://gatewaytest.borgun.is/ws/Heimir.pub.ws:Authorization'
10
+ self.live_url = 'https://gateway01.borgun.is/ws/Heimir.pub.ws:Authorization'
11
+
12
+ self.supported_countries = %w[IS GB HU CZ DE DK SE]
13
+ self.default_currency = 'ISK'
14
+ self.money_format = :cents
15
+ self.supported_cardtypes = %i[visa master american_express diners_club discover jcb]
16
+
17
+ self.homepage_url = 'https://www.borgun.is/'
18
+
19
+ def initialize(options = {})
20
+ requires!(options, :processor, :merchant_id, :username, :password)
21
+ super
22
+ end
23
+
24
+ def purchase(money, payment, options = {})
25
+ post = {}
26
+ action = ''
27
+ if options[:apply_3d_secure] == '1'
28
+ add_3ds_preauth_fields(post, options)
29
+ action = '3ds_preauth'
30
+ else
31
+ post[:TransType] = '1'
32
+ add_3ds_fields(post, options)
33
+ action = 'sale'
34
+ end
35
+ add_invoice(post, money, options)
36
+ add_payment_method(post, payment)
37
+ commit(action, post, options)
38
+ end
39
+
40
+ def authorize(money, payment, options = {})
41
+ post = {}
42
+ action = ''
43
+ if options[:apply_3d_secure] == '1'
44
+ add_3ds_preauth_fields(post, options)
45
+ action = '3ds_preauth'
46
+ else
47
+ post[:TransType] = '5'
48
+ add_3ds_fields(post, options)
49
+ action = 'authonly'
50
+ end
51
+ add_invoice(post, money, options)
52
+ add_payment_method(post, payment)
53
+ commit(action, post, options)
54
+ end
55
+
56
+ def capture(money, authorization, options = {})
57
+ post = {}
58
+ post[:TransType] = '1'
59
+ add_invoice(post, money, options)
60
+ add_reference(post, authorization)
61
+ commit('capture', post)
62
+ end
63
+
64
+ def refund(money, authorization, options = {})
65
+ post = {}
66
+ post[:TransType] = '3'
67
+ add_invoice(post, money, options)
68
+ add_reference(post, authorization)
69
+ commit('refund', post)
70
+ end
71
+
72
+ def void(authorization, options = {})
73
+ post = {}
74
+ # TransType, TrAmount, and currency must match original values from auth or purchase.
75
+ _, _, _, _, _, transtype, tramount, currency = split_authorization(authorization)
76
+ post[:TransType] = transtype
77
+ options[:currency] = options[:currency] || CURRENCY_CODES.key(currency)
78
+ add_invoice(post, tramount.to_i, options)
79
+ add_reference(post, authorization)
80
+ commit('void', post)
81
+ end
82
+
83
+ def supports_scrubbing
84
+ true
85
+ end
86
+
87
+ def scrub(transcript)
88
+ transcript.gsub(%r((&lt;PAN&gt;)[^&]*(&lt;/PAN&gt;))i, '\1[FILTERED]\2').
89
+ gsub(%r((&lt;CVC2&gt;)[^&]*(&lt;/CVC2&gt;))i, '\1[FILTERED]\2').
90
+ gsub(%r(((?:\r\n)?Authorization: Basic )[^\r\n]+(\r\n)?), '\1[FILTERED]\2')
91
+ end
92
+
93
+ private
94
+
95
+ CURRENCY_CODES = Hash.new { |_h, k| raise ArgumentError.new("Unsupported currency for HDFC: #{k}") }
96
+ CURRENCY_CODES['ISK'] = '352'
97
+ CURRENCY_CODES['EUR'] = '978'
98
+ CURRENCY_CODES['USD'] = '840'
99
+ CURRENCY_CODES['GBP'] = '826'
100
+
101
+ def add_3ds_fields(post, options)
102
+ post[:ThreeDSMessageId] = options[:three_ds_message_id] if options[:three_ds_message_id]
103
+ post[:ThreeDS_PARes] = options[:three_ds_pares] if options[:three_ds_pares]
104
+ post[:ThreeDS_CRes] = options[:three_ds_cres] if options[:three_ds_cres]
105
+ end
106
+
107
+ def add_3ds_preauth_fields(post, options)
108
+ post[:SaleDescription] = options[:sale_description] || ''
109
+ post[:MerchantReturnURL] = options[:redirect_url] if options[:redirect_url]
110
+ end
111
+
112
+ def add_invoice(post, money, options)
113
+ post[:TrAmount] = amount(money)
114
+ post[:TrCurrency] = CURRENCY_CODES[options[:currency] || currency(money)]
115
+ # The ISK currency must have a currency exponent of 2 on the 3DS request but not on the auth request
116
+ if post[:TrCurrency] == '352' && options[:apply_3d_secure] != '1'
117
+ post[:TrCurrencyExponent] = 0
118
+ else
119
+ post[:TrCurrencyExponent] = 2
120
+ end
121
+ post[:TerminalID] = options[:terminal_id] || '1'
122
+ end
123
+
124
+ def add_payment_method(post, payment_method)
125
+ post[:PAN] = payment_method.number
126
+ post[:ExpDate] = format(payment_method.year, :two_digits) + format(payment_method.month, :two_digits)
127
+ post[:CVC2] = payment_method.verification_value
128
+ post[:DateAndTime] = Time.now.strftime('%y%m%d%H%M%S')
129
+ post[:RRN] = 'AMRCNT' + six_random_digits
130
+ end
131
+
132
+ def add_reference(post, authorization)
133
+ dateandtime, _batch, transaction, rrn, authcode, = split_authorization(authorization)
134
+ post[:DateAndTime] = dateandtime
135
+ post[:Transaction] = transaction
136
+ post[:RRN] = rrn
137
+ post[:AuthCode] = authcode
138
+ end
139
+
140
+ def parse(xml, options = nil)
141
+ response = {}
142
+
143
+ doc = Nokogiri::XML(CGI.unescapeHTML(xml))
144
+ body = options[:apply_3d_secure] == '1' ? doc.xpath('//get3DSAuthenticationReply') : doc.xpath('//getAuthorizationReply')
145
+ body = doc.xpath('//cancelAuthorizationReply') if body.length == 0
146
+ body.children.each do |node|
147
+ if node.text?
148
+ next
149
+ elsif node.elements.size == 0
150
+ response[node.name.downcase.to_sym] = node.text
151
+ else
152
+ node.elements.each do |childnode|
153
+ name = "#{node.name.downcase}_#{childnode.name.downcase}"
154
+ response[name.to_sym] = childnode.text
155
+ end
156
+ end
157
+ end
158
+ response
159
+ end
160
+
161
+ def commit(action, post, options = {})
162
+ post[:Version] = '1000'
163
+ post[:Processor] = @options[:processor]
164
+ post[:MerchantID] = @options[:merchant_id]
165
+
166
+ request = build_request(action, post, options)
167
+ raw = ssl_post(url(action), request, headers)
168
+ pairs = parse(raw, options)
169
+ success = success_from(pairs)
170
+
171
+ Response.new(
172
+ success,
173
+ message_from(success, pairs),
174
+ pairs,
175
+ authorization: authorization_from(pairs),
176
+ test: test?
177
+ )
178
+ end
179
+
180
+ def success_from(response)
181
+ (response[:actioncode] == '000') || (response[:status_resultcode] == '0')
182
+ end
183
+
184
+ def message_from(succeeded, response)
185
+ if succeeded
186
+ 'Succeeded'
187
+ else
188
+ response[:message] || "Error with ActionCode=#{response[:actioncode]}"
189
+ end
190
+ end
191
+
192
+ def authorization_from(response)
193
+ [
194
+ response[:dateandtime],
195
+ response[:batch],
196
+ response[:transaction],
197
+ response[:rrn],
198
+ response[:authcode],
199
+ response[:transtype],
200
+ response[:tramount],
201
+ response[:trcurrency]
202
+ ].join('|')
203
+ end
204
+
205
+ def split_authorization(authorization)
206
+ dateandtime, batch, transaction, rrn, authcode, transtype, tramount, currency = authorization.split('|')
207
+ [dateandtime, batch, transaction, rrn, authcode, transtype, tramount, currency]
208
+ end
209
+
210
+ def headers
211
+ {
212
+ 'Authorization' => 'Basic ' + Base64.strict_encode64(@options[:username].to_s + ':' + @options[:password].to_s)
213
+ }
214
+ end
215
+
216
+ def build_request(action, post, options = {})
217
+ mode = action == 'void' ? 'cancel' : 'get'
218
+ transaction_type = action == '3ds_preauth' ? '3DSAuthentication' : 'Authorization'
219
+ xml = Builder::XmlMarkup.new indent: 18
220
+ xml.instruct!(:xml, version: '1.0', encoding: 'utf-8')
221
+ xml.tag!("#{mode}#{transaction_type}") do
222
+ post.each do |field, value|
223
+ xml.tag!(field, value)
224
+ end
225
+ build_airline_xml(xml, options[:passenger_itinerary_data]) if options[:passenger_itinerary_data]
226
+ end
227
+ inner = CGI.escapeHTML(xml.target!)
228
+ envelope(mode, action).sub(/{{ :body }}/, inner)
229
+ end
230
+
231
+ def build_airline_xml(xml, airline_data)
232
+ xml.tag!('PassengerItineraryData') do
233
+ xml.tag!('A1') do
234
+ airline_data.each do |field, value|
235
+ xml.tag!(field, value)
236
+ end
237
+ end
238
+ end
239
+ end
240
+
241
+ def envelope(mode, action)
242
+ if action == '3ds_preauth'
243
+ transaction_action = "#{mode}3DSAuthentication"
244
+ request_action = "#{mode}Auth3DSReqXml"
245
+ else
246
+ transaction_action = "#{mode}AuthorizationInput"
247
+ request_action = "#{mode}AuthReqXml"
248
+ end
249
+ <<-XML
250
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:aut="http://Borgun/Heimir/pub/ws/Authorization">
251
+ <soapenv:Header/>
252
+ <soapenv:Body>
253
+ <aut:#{transaction_action}>
254
+ <#{request_action}>
255
+ {{ :body }}
256
+ </#{request_action}>
257
+ </aut:#{transaction_action}>
258
+ </soapenv:Body>
259
+ </soapenv:Envelope>
260
+ XML
261
+ end
262
+
263
+ def url(action)
264
+ (test? ? test_url : live_url)
265
+ end
266
+
267
+ def six_random_digits
268
+ (0...6).map { rand(48..57).chr }.join
269
+ end
270
+ end
271
+ end
272
+ end