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,397 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ class BarclaycardSmartpayGateway < Gateway
4
+ self.test_url = 'https://pal-test.barclaycardsmartpay.com/pal/servlet'
5
+ self.live_url = 'https://pal-live.barclaycardsmartpay.com/pal/servlet'
6
+
7
+ self.supported_countries = %w[AL AD AM AT AZ BY BE BA BG HR CY CZ DK EE FI FR DE GR HU IS IE IT KZ LV LI LT LU MK MT MD MC ME NL NO PL PT RO RU SM RS SK SI ES SE CH TR UA GB VA]
8
+ self.default_currency = 'EUR'
9
+ self.currencies_with_three_decimal_places = %w(BHD KWD OMR RSD TND IQD JOD LYD)
10
+ self.money_format = :cents
11
+ self.supported_cardtypes = %i[visa master american_express discover diners_club jcb dankort maestro]
12
+ self.currencies_without_fractions = %w(CVE DJF GNF IDR JPY KMF KRW PYG RWF UGX VND VUV XAF XOF XPF)
13
+
14
+ self.homepage_url = 'https://www.barclaycardsmartpay.com/'
15
+ self.display_name = 'Barclaycard Smartpay'
16
+
17
+ API_VERSION = 'v40'
18
+
19
+ def initialize(options = {})
20
+ requires!(options, :company, :merchant, :password)
21
+ super
22
+ end
23
+
24
+ def purchase(money, creditcard, options = {})
25
+ requires!(options, :order_id)
26
+
27
+ MultiResponse.run do |r|
28
+ r.process { authorize(money, creditcard, options) }
29
+ r.process { capture(money, r.authorization, options) }
30
+ end
31
+ end
32
+
33
+ def authorize(money, creditcard, options = {})
34
+ requires!(options, :order_id)
35
+
36
+ post = payment_request(money, options)
37
+ post[:amount] = amount_hash(money, options[:currency])
38
+ post[:card] = credit_card_hash(creditcard)
39
+ post[:billingAddress] = billing_address_hash(options) if options[:billing_address]
40
+ post[:deliveryAddress] = shipping_address_hash(options) if options[:shipping_address]
41
+ post[:shopperStatement] = options[:shopper_statement] if options[:shopper_statement]
42
+
43
+ add_3ds(post, options)
44
+ commit('authorise', post)
45
+ end
46
+
47
+ def capture(money, authorization, options = {})
48
+ requires!(options, :order_id)
49
+
50
+ post = modification_request(authorization, options)
51
+ post[:modificationAmount] = amount_hash(money, options[:currency])
52
+
53
+ commit('capture', post)
54
+ end
55
+
56
+ def refund(money, authorization, options = {})
57
+ requires!(options, :order_id)
58
+
59
+ post = modification_request(authorization, options)
60
+ post[:modificationAmount] = amount_hash(money, options[:currency])
61
+
62
+ commit('refund', post)
63
+ end
64
+
65
+ def credit(money, creditcard, options = {})
66
+ post = payment_request(money, options)
67
+ post[:amount] = amount_hash(money, options[:currency])
68
+ post[:card] = credit_card_hash(creditcard)
69
+ post[:dateOfBirth] = options[:date_of_birth] if options[:date_of_birth]
70
+ post[:entityType] = options[:entity_type] if options[:entity_type]
71
+ post[:nationality] = options[:nationality] if options[:nationality]
72
+ post[:shopperName] = options[:shopper_name] if options[:shopper_name]
73
+
74
+ if options[:third_party_payout]
75
+ post[:recurring] = options[:recurring_contract] || { contract: 'PAYOUT' }
76
+ MultiResponse.run do |r|
77
+ r.process {
78
+ commit(
79
+ 'storeDetailAndSubmitThirdParty',
80
+ post,
81
+ @options[:store_payout_account],
82
+ @options[:store_payout_password]
83
+ )
84
+ }
85
+ r.process {
86
+ commit(
87
+ 'confirmThirdParty',
88
+ modification_request(r.authorization, @options),
89
+ @options[:review_payout_account],
90
+ @options[:review_payout_password]
91
+ )
92
+ }
93
+ end
94
+ else
95
+ commit('refundWithData', post)
96
+ end
97
+ end
98
+
99
+ def void(identification, options = {})
100
+ requires!(options, :order_id)
101
+
102
+ post = modification_request(identification, options)
103
+
104
+ commit('cancel', post)
105
+ end
106
+
107
+ def verify(creditcard, options = {})
108
+ authorize(0, creditcard, options)
109
+ end
110
+
111
+ def store(creditcard, options = {})
112
+ post = store_request(options)
113
+ post[:card] = credit_card_hash(creditcard)
114
+ post[:recurring] = { contract: 'RECURRING' }
115
+
116
+ commit('store', post)
117
+ end
118
+
119
+ def supports_scrubbing?
120
+ true
121
+ end
122
+
123
+ def scrub(transcript)
124
+ transcript.
125
+ gsub(%r(((?:\r\n)?Authorization: Basic )[^\r\n]+(\r\n)?), '\1[FILTERED]').
126
+ gsub(%r((card.number=)\d+), '\1[FILTERED]').
127
+ gsub(%r((card.cvc=)\d+), '\1[FILTERED]')
128
+ end
129
+
130
+ private
131
+
132
+ # Smartpay may return AVS codes not covered by standard AVSResult codes.
133
+ # Smartpay's descriptions noted below.
134
+ AVS_MAPPING = {
135
+ '0' => 'R', # Unknown
136
+ '1' => 'A', # Address matches, postal code doesn't
137
+ '2' => 'N', # Neither postal code nor address match
138
+ '3' => 'R', # AVS unavailable
139
+ '4' => 'E', # AVS not supported for this card type
140
+ '5' => 'U', # No AVS data provided
141
+ '6' => 'Z', # Postal code matches, address doesn't match
142
+ '7' => 'D', # Both postal code and address match
143
+ '8' => 'U', # Address not checked, postal code unknown
144
+ '9' => 'B', # Address matches, postal code unknown
145
+ '10' => 'N', # Address doesn't match, postal code unknown
146
+ '11' => 'U', # Postal code not checked, address unknown
147
+ '12' => 'B', # Address matches, postal code not checked
148
+ '13' => 'U', # Address doesn't match, postal code not checked
149
+ '14' => 'P', # Postal code matches, address unknown
150
+ '15' => 'P', # Postal code matches, address not checked
151
+ '16' => 'N', # Postal code doesn't match, address unknown
152
+ '17' => 'U', # Postal code doesn't match, address not checked
153
+ '18' => 'I' # Neither postal code nor address were checked
154
+ }
155
+
156
+ def commit(action, post, account = 'ws', password = @options[:password])
157
+ request = post_data(flatten_hash(post))
158
+ request_headers = headers(account, password)
159
+ raw_response = ssl_post(build_url(action), request, request_headers)
160
+ response = parse(raw_response)
161
+
162
+ Response.new(
163
+ success_from(response),
164
+ message_from(response),
165
+ response,
166
+ test: test?,
167
+ avs_result: AVSResult.new(code: parse_avs_code(response)),
168
+ authorization: response['recurringDetailReference'] || authorization_from(post, response)
169
+ )
170
+ rescue ResponseError => e
171
+ case e.response.code
172
+ when '401'
173
+ return Response.new(false, 'Invalid credentials', {}, test: test?)
174
+ when '403'
175
+ return Response.new(false, 'Not allowed', {}, test: test?)
176
+ when '422', '500'
177
+ if e.response.body.split(/\W+/).any? { |word| %w(validation configuration security).include?(word) }
178
+ error_message = e.response.body[/#{Regexp.escape('message=')}(.*?)#{Regexp.escape('&')}/m, 1].tr('+', ' ')
179
+ error_code = e.response.body[/#{Regexp.escape('errorCode=')}(.*?)#{Regexp.escape('&')}/m, 1]
180
+ return Response.new(false, error_code + ': ' + error_message, {}, test: test?)
181
+ end
182
+ end
183
+ raise
184
+ end
185
+
186
+ def authorization_from(parameters, response)
187
+ authorization = [parameters[:originalReference], response['pspReference']].compact
188
+
189
+ return nil if authorization.empty?
190
+
191
+ return authorization.join('#')
192
+ end
193
+
194
+ def parse_avs_code(response)
195
+ AVS_MAPPING[response['additionalData']['avsResult'][0..1].strip] if response.dig('additionalData', 'avsResult')
196
+ end
197
+
198
+ def flatten_hash(hash, prefix = nil)
199
+ flat_hash = {}
200
+ hash.each_pair do |key, val|
201
+ conc_key = prefix.nil? ? key : "#{prefix}.#{key}"
202
+ if val.is_a?(Hash)
203
+ flat_hash.merge!(flatten_hash(val, conc_key))
204
+ else
205
+ flat_hash[conc_key] = val
206
+ end
207
+ end
208
+ flat_hash
209
+ end
210
+
211
+ def headers(account, password)
212
+ {
213
+ 'Content-Type' => 'application/x-www-form-urlencoded; charset=utf-8',
214
+ 'Authorization' => 'Basic ' + Base64.strict_encode64("#{account}@Company.#{@options[:company]}:#{password}").strip
215
+ }
216
+ end
217
+
218
+ def parse(response)
219
+ parsed_response = {}
220
+ params = CGI.parse(response)
221
+ params.each do |key, value|
222
+ parsed_key = key.split('.', 2)
223
+ if parsed_key.size > 1
224
+ parsed_response[parsed_key[0]] ||= {}
225
+ parsed_response[parsed_key[0]][parsed_key[1]] = value[0]
226
+ else
227
+ parsed_response[parsed_key[0]] = value[0]
228
+ end
229
+ end
230
+ parsed_response
231
+ end
232
+
233
+ def post_data(data)
234
+ data.map do |key, val|
235
+ "#{key}=#{CGI.escape(val.to_s)}"
236
+ end.reduce do |x, y|
237
+ "#{x}&#{y}"
238
+ end
239
+ end
240
+
241
+ def message_from(response)
242
+ return response['resultCode'] if response.has_key?('resultCode') # Payment request
243
+ return response['response'] if response['response'] # Modification request
244
+ return response['result'] if response.has_key?('result') # Store/Recurring request
245
+
246
+ 'Failure' # Negative fallback in case of error
247
+ end
248
+
249
+ def success_from(response)
250
+ return true if response['result'] == 'Success'
251
+
252
+ successful_results = %w(Authorised Received [payout-submit-received])
253
+ successful_responses = %w([capture-received] [cancel-received] [refund-received] [payout-confirm-received])
254
+ successful_results.include?(response['resultCode']) || successful_responses.include?(response['response'])
255
+ end
256
+
257
+ def build_url(action)
258
+ case action
259
+ when 'store'
260
+ "#{test? ? self.test_url : self.live_url}/Recurring/#{API_VERSION}/storeToken"
261
+ when 'finalize3ds'
262
+ "#{test? ? self.test_url : self.live_url}/Payment/#{API_VERSION}/authorise3d"
263
+ when 'storeDetailAndSubmitThirdParty', 'confirmThirdParty'
264
+ "#{test? ? self.test_url : self.live_url}/Payout/#{API_VERSION}/#{action}"
265
+ else
266
+ "#{test? ? self.test_url : self.live_url}/Payment/#{API_VERSION}/#{action}"
267
+ end
268
+ end
269
+
270
+ def billing_address_hash(options)
271
+ address = options[:address] || options[:billing_address] if options[:address] || options[:billing_address]
272
+ street = options[:street] || parse_street(address)
273
+ house = options[:house_number] || parse_house_number(address)
274
+
275
+ create_address_hash(address, house, street)
276
+ end
277
+
278
+ def shipping_address_hash(options)
279
+ address = options[:shipping_address]
280
+ street = options[:shipping_street] || parse_street(address)
281
+ house = options[:shipping_house_number] || parse_house_number(address)
282
+
283
+ create_address_hash(address, house, street)
284
+ end
285
+
286
+ def parse_street(address)
287
+ address_to_parse = "#{address[:address1]} #{address[:address2]}"
288
+ street = address[:street] || address_to_parse.split(/\s+/).keep_if { |x| x !~ /\d/ }.join(' ')
289
+ street.empty? ? 'Not Provided' : street
290
+ end
291
+
292
+ def parse_house_number(address)
293
+ address_to_parse = "#{address[:address1]} #{address[:address2]}"
294
+ house = address[:houseNumberOrName] || address_to_parse.split(/\s+/).keep_if { |x| x =~ /\d/ }.join(' ')
295
+ house.empty? ? 'Not Provided' : house
296
+ end
297
+
298
+ def create_address_hash(address, house, street)
299
+ hash = {}
300
+ hash[:houseNumberOrName] = house
301
+ hash[:street] = street
302
+ hash[:city] = address[:city]
303
+ hash[:stateOrProvince] = address[:state]
304
+ hash[:postalCode] = address[:zip]
305
+ hash[:country] = address[:country]
306
+ hash.keep_if { |_, v| v }
307
+ end
308
+
309
+ def amount_hash(money, currency)
310
+ currency = currency || currency(money)
311
+ hash = {}
312
+ hash[:currency] = currency
313
+ hash[:value] = localized_amount(money, currency) if money
314
+ hash
315
+ end
316
+
317
+ def credit_card_hash(creditcard)
318
+ hash = {}
319
+ hash[:cvc] = creditcard.verification_value if creditcard.verification_value
320
+ hash[:expiryMonth] = format(creditcard.month, :two_digits) if creditcard.month
321
+ hash[:expiryYear] = format(creditcard.year, :four_digits) if creditcard.year
322
+ hash[:holderName] = creditcard.name if creditcard.name
323
+ hash[:number] = creditcard.number if creditcard.number
324
+ hash
325
+ end
326
+
327
+ def modification_request(reference, options)
328
+ hash = {}
329
+ hash[:merchantAccount] = @options[:merchant]
330
+ hash[:originalReference] = psp_reference_from(reference)
331
+ hash.keep_if { |_, v| v }
332
+ end
333
+
334
+ def psp_reference_from(authorization)
335
+ authorization.nil? ? nil : authorization.split('#').first
336
+ end
337
+
338
+ def payment_request(money, options)
339
+ hash = {}
340
+ hash[:merchantAccount] = @options[:merchant]
341
+ hash[:reference] = options[:order_id]
342
+ hash[:shopperEmail] = options[:email]
343
+ hash[:shopperIP] = options[:ip]
344
+ hash[:shopperReference] = options[:customer]
345
+ hash[:shopperInteraction] = options[:shopper_interaction]
346
+ hash[:deviceFingerprint] = options[:device_fingerprint]
347
+ hash.keep_if { |_, v| v }
348
+ end
349
+
350
+ def store_request(options)
351
+ hash = {}
352
+ hash[:merchantAccount] = @options[:merchant]
353
+ hash[:shopperEmail] = options[:email]
354
+ hash[:shopperReference] = options[:customer] if options[:customer]
355
+ hash.keep_if { |_, v| v }
356
+ end
357
+
358
+ def add_3ds(post, options)
359
+ if three_ds_2_options = options[:three_ds_2]
360
+ device_channel = three_ds_2_options[:channel]
361
+ if device_channel == 'app'
362
+ post[:threeDS2RequestData] = { deviceChannel: device_channel }
363
+ else
364
+ add_browser_info(three_ds_2_options[:browser_info], post)
365
+ post[:threeDS2RequestData] = { deviceChannel: device_channel, notificationURL: three_ds_2_options[:notification_url] }
366
+ end
367
+
368
+ if options.has_key?(:execute_threed)
369
+ post[:additionalData] ||= {}
370
+ post[:additionalData][:executeThreeD] = options[:execute_threed]
371
+ post[:additionalData][:scaExemption] = options[:sca_exemption] if options[:sca_exemption]
372
+ end
373
+ else
374
+ return unless options[:execute_threed] || options[:threed_dynamic]
375
+
376
+ post[:browserInfo] = { userAgent: options[:user_agent], acceptHeader: options[:accept_header] }
377
+ post[:additionalData] = { executeThreeD: 'true' } if options[:execute_threed]
378
+ end
379
+ end
380
+
381
+ def add_browser_info(browser_info, post)
382
+ return unless browser_info
383
+
384
+ post[:browserInfo] = {
385
+ acceptHeader: browser_info[:accept_header],
386
+ colorDepth: browser_info[:depth],
387
+ javaEnabled: browser_info[:java],
388
+ language: browser_info[:language],
389
+ screenHeight: browser_info[:height],
390
+ screenWidth: browser_info[:width],
391
+ timeZoneOffset: browser_info[:timezone],
392
+ userAgent: browser_info[:user_agent]
393
+ }
394
+ end
395
+ end
396
+ end
397
+ end
@@ -0,0 +1,15 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ class BarclaysEpdqExtraPlusGateway < OgoneGateway
4
+ self.test_url = 'https://mdepayments.epdq.co.uk/ncol/test/'
5
+ self.live_url = 'https://payments.epdq.co.uk/ncol/prod/'
6
+
7
+ self.display_name = 'Barclays ePDQ Extra Plus'
8
+ self.homepage_url = 'http://www.barclaycard.co.uk/business/accepting-payments/epdq-ecomm/'
9
+
10
+ self.supported_countries = ['GB']
11
+ self.supported_cardtypes = %i[visa master american_express diners_club discover jcb maestro]
12
+ self.default_currency = 'GBP'
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,131 @@
1
+ require 'digest/sha2'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ class Be2billGateway < Gateway
6
+ self.test_url = 'https://secure-test.be2bill.com/front/service/rest/process.php'
7
+ self.live_url = 'https://secure-magenta1.be2bill.com/front/service/rest/process.php'
8
+
9
+ self.display_name = 'Be2Bill'
10
+ self.homepage_url = 'http://www.be2bill.com/'
11
+ self.supported_countries = ['FR']
12
+ self.supported_cardtypes = %i[visa master american_express]
13
+ self.default_currency = 'EUR'
14
+ self.money_format = :cents
15
+
16
+ # These options are mandatory on be2bill (cf. tests) :
17
+ #
18
+ # options = { :order_id => order.id,
19
+ # :customer_id => user.id,
20
+ # :description => "Some description",
21
+ # :referrer => request.env['HTTP_REFERER'],
22
+ # :user_agent => request.env['HTTP_USER_AGENT'],
23
+ # :ip => request.remote_ip,
24
+ # :email => user.email }
25
+
26
+ def initialize(options = {})
27
+ requires!(options, :login, :password)
28
+ super
29
+ end
30
+
31
+ def authorize(money, creditcard, options = {})
32
+ post = {}
33
+ add_invoice(post, options)
34
+ add_creditcard(post, creditcard)
35
+ add_customer_data(post, options)
36
+
37
+ commit('authorization', money, post)
38
+ end
39
+
40
+ def purchase(money, creditcard, options = {})
41
+ post = {}
42
+ add_invoice(post, options)
43
+ add_creditcard(post, creditcard)
44
+ add_customer_data(post, options)
45
+
46
+ commit('payment', money, post)
47
+ end
48
+
49
+ def capture(money, authorization, options = {})
50
+ post = {}
51
+ add_invoice(post, options)
52
+ post[:TRANSACTIONID] = authorization
53
+
54
+ commit('capture', money, post)
55
+ end
56
+
57
+ private
58
+
59
+ def add_customer_data(post, options)
60
+ post[:CLIENTREFERRER] = options[:referrer]
61
+ post[:CLIENTUSERAGENT] = options[:user_agent]
62
+ post[:CLIENTIP] = options[:ip]
63
+ post[:CLIENTEMAIL] = options[:email]
64
+ post[:CLIENTIDENT] = options[:customer_id]
65
+ end
66
+
67
+ def add_invoice(post, options)
68
+ post[:ORDERID] = options[:order_id]
69
+ post[:DESCRIPTION] = options[:description]
70
+ end
71
+
72
+ def add_creditcard(post, creditcard)
73
+ post[:CARDFULLNAME] = creditcard ? creditcard.name : ''
74
+ post[:CARDCODE] = creditcard ? creditcard.number : ''
75
+ post[:CARDVALIDITYDATE] = creditcard ? '%02d-%02s' % [creditcard.month, creditcard.year.to_s[-2..-1]] : ''
76
+ post[:CARDCVV] = creditcard ? creditcard.verification_value : ''
77
+ end
78
+
79
+ def parse(response)
80
+ ActiveSupport::JSON.decode(response)
81
+ end
82
+
83
+ def commit(action, money, parameters)
84
+ parameters[:IDENTIFIER] = @options[:login]
85
+ parameters[:AMOUNT] = amount(money)
86
+ parameters[:VERSION] = '2.0'
87
+
88
+ url = (test? ? self.test_url : self.live_url)
89
+ response = parse(ssl_post(url, post_data(action, parameters)))
90
+
91
+ Response.new(
92
+ successful?(response),
93
+ message_from(response),
94
+ response,
95
+ authorization: response['TRANSACTIONID'],
96
+ test: test?
97
+ )
98
+ end
99
+
100
+ def successful?(response)
101
+ %w(0000 0001).include?(response['EXECCODE'])
102
+ end
103
+
104
+ def message_from(response)
105
+ if successful?(response)
106
+ "Approved : #{response['MESSAGE']}"
107
+ else
108
+ "Declined (#{response['EXECCODE']} - #{response['MESSAGE']}"
109
+ end
110
+ end
111
+
112
+ def post_data(action, parameters = {})
113
+ {
114
+ method: action,
115
+ params: parameters.merge(HASH: signature(parameters, action))
116
+ }.to_query
117
+ end
118
+
119
+ def signature(parameters, action)
120
+ parameters[:OPERATIONTYPE] = action unless parameters[:OPERATIONTYPE]
121
+
122
+ signature = @options[:password]
123
+ parameters.sort.each do |key, value|
124
+ signature += ("#{key.upcase}=#{value}" + @options[:password])
125
+ end
126
+
127
+ Digest::SHA256.hexdigest(signature)
128
+ end
129
+ end
130
+ end
131
+ end