swiss-crm-activemerchant 1.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG +4033 -0
  3. data/CONTRIBUTORS +568 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.md +252 -0
  6. data/lib/active_merchant/billing/apple_pay_payment_token.rb +22 -0
  7. data/lib/active_merchant/billing/avs_result.rb +95 -0
  8. data/lib/active_merchant/billing/base.rb +48 -0
  9. data/lib/active_merchant/billing/check.rb +112 -0
  10. data/lib/active_merchant/billing/compatibility.rb +118 -0
  11. data/lib/active_merchant/billing/credit_card.rb +451 -0
  12. data/lib/active_merchant/billing/credit_card_formatting.rb +24 -0
  13. data/lib/active_merchant/billing/credit_card_methods.rb +512 -0
  14. data/lib/active_merchant/billing/cvv_result.rb +37 -0
  15. data/lib/active_merchant/billing/gateway.rb +332 -0
  16. data/lib/active_merchant/billing/gateways/adyen.rb +774 -0
  17. data/lib/active_merchant/billing/gateways/airwallex.rb +370 -0
  18. data/lib/active_merchant/billing/gateways/alelo.rb +256 -0
  19. data/lib/active_merchant/billing/gateways/allied_wallet.rb +205 -0
  20. data/lib/active_merchant/billing/gateways/authorize_net.rb +1125 -0
  21. data/lib/active_merchant/billing/gateways/authorize_net_arb.rb +424 -0
  22. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +977 -0
  23. data/lib/active_merchant/billing/gateways/axcessms.rb +242 -0
  24. data/lib/active_merchant/billing/gateways/balanced.rb +263 -0
  25. data/lib/active_merchant/billing/gateways/bambora_apac.rb +222 -0
  26. data/lib/active_merchant/billing/gateways/bank_frick.rb +225 -0
  27. data/lib/active_merchant/billing/gateways/banwire.rb +116 -0
  28. data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +397 -0
  29. data/lib/active_merchant/billing/gateways/barclays_epdq_extra_plus.rb +15 -0
  30. data/lib/active_merchant/billing/gateways/be2bill.rb +131 -0
  31. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +474 -0
  32. data/lib/active_merchant/billing/gateways/beanstream.rb +238 -0
  33. data/lib/active_merchant/billing/gateways/beanstream_interac.rb +57 -0
  34. data/lib/active_merchant/billing/gateways/blue_pay.rb +549 -0
  35. data/lib/active_merchant/billing/gateways/blue_snap.rb +644 -0
  36. data/lib/active_merchant/billing/gateways/bogus.rb +190 -0
  37. data/lib/active_merchant/billing/gateways/borgun.rb +272 -0
  38. data/lib/active_merchant/billing/gateways/bpoint.rb +277 -0
  39. data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +28 -0
  40. data/lib/active_merchant/billing/gateways/braintree/token_nonce.rb +113 -0
  41. data/lib/active_merchant/billing/gateways/braintree.rb +19 -0
  42. data/lib/active_merchant/billing/gateways/braintree_blue.rb +952 -0
  43. data/lib/active_merchant/billing/gateways/braintree_orange.rb +19 -0
  44. data/lib/active_merchant/billing/gateways/bridge_pay.rb +244 -0
  45. data/lib/active_merchant/billing/gateways/cams.rb +230 -0
  46. data/lib/active_merchant/billing/gateways/card_connect.rb +338 -0
  47. data/lib/active_merchant/billing/gateways/card_save.rb +21 -0
  48. data/lib/active_merchant/billing/gateways/card_stream.rb +394 -0
  49. data/lib/active_merchant/billing/gateways/cardknox.rb +327 -0
  50. data/lib/active_merchant/billing/gateways/cardprocess.rb +256 -0
  51. data/lib/active_merchant/billing/gateways/cashnet.rb +235 -0
  52. data/lib/active_merchant/billing/gateways/cc5.rb +198 -0
  53. data/lib/active_merchant/billing/gateways/cecabank.rb +249 -0
  54. data/lib/active_merchant/billing/gateways/cenpos.rb +328 -0
  55. data/lib/active_merchant/billing/gateways/checkout.rb +212 -0
  56. data/lib/active_merchant/billing/gateways/checkout_v2.rb +587 -0
  57. data/lib/active_merchant/billing/gateways/citrus_pay.rb +21 -0
  58. data/lib/active_merchant/billing/gateways/clearhaus.rb +219 -0
  59. data/lib/active_merchant/billing/gateways/commerce_hub.rb +366 -0
  60. data/lib/active_merchant/billing/gateways/commercegate.rb +142 -0
  61. data/lib/active_merchant/billing/gateways/conekta.rb +230 -0
  62. data/lib/active_merchant/billing/gateways/creditcall.rb +272 -0
  63. data/lib/active_merchant/billing/gateways/credorax.rb +526 -0
  64. data/lib/active_merchant/billing/gateways/ct_payment.rb +269 -0
  65. data/lib/active_merchant/billing/gateways/culqi.rb +279 -0
  66. data/lib/active_merchant/billing/gateways/cyber_source/cyber_source_common.rb +36 -0
  67. data/lib/active_merchant/billing/gateways/cyber_source.rb +1148 -0
  68. data/lib/active_merchant/billing/gateways/cyber_source_rest.rb +454 -0
  69. data/lib/active_merchant/billing/gateways/d_local.rb +343 -0
  70. data/lib/active_merchant/billing/gateways/data_cash.rb +302 -0
  71. data/lib/active_merchant/billing/gateways/decidir.rb +358 -0
  72. data/lib/active_merchant/billing/gateways/decidir_plus.rb +344 -0
  73. data/lib/active_merchant/billing/gateways/dibs.rb +199 -0
  74. data/lib/active_merchant/billing/gateways/digitzs.rb +295 -0
  75. data/lib/active_merchant/billing/gateways/ebanx.rb +346 -0
  76. data/lib/active_merchant/billing/gateways/efsnet.rb +215 -0
  77. data/lib/active_merchant/billing/gateways/elavon.rb +475 -0
  78. data/lib/active_merchant/billing/gateways/element.rb +406 -0
  79. data/lib/active_merchant/billing/gateways/epay.rb +296 -0
  80. data/lib/active_merchant/billing/gateways/evo_ca.rb +307 -0
  81. data/lib/active_merchant/billing/gateways/eway.rb +226 -0
  82. data/lib/active_merchant/billing/gateways/eway_managed.rb +289 -0
  83. data/lib/active_merchant/billing/gateways/eway_rapid.rb +578 -0
  84. data/lib/active_merchant/billing/gateways/exact.rb +219 -0
  85. data/lib/active_merchant/billing/gateways/ezic.rb +195 -0
  86. data/lib/active_merchant/billing/gateways/fat_zebra.rb +223 -0
  87. data/lib/active_merchant/billing/gateways/federated_canada.rb +158 -0
  88. data/lib/active_merchant/billing/gateways/finansbank.rb +22 -0
  89. data/lib/active_merchant/billing/gateways/first_giving.rb +143 -0
  90. data/lib/active_merchant/billing/gateways/first_pay.rb +182 -0
  91. data/lib/active_merchant/billing/gateways/firstdata_e4.rb +452 -0
  92. data/lib/active_merchant/billing/gateways/firstdata_e4_v27.rb +505 -0
  93. data/lib/active_merchant/billing/gateways/flo2cash.rb +215 -0
  94. data/lib/active_merchant/billing/gateways/flo2cash_simple.rb +20 -0
  95. data/lib/active_merchant/billing/gateways/fluidpay.rb +275 -0
  96. data/lib/active_merchant/billing/gateways/forte.rb +286 -0
  97. data/lib/active_merchant/billing/gateways/garanti.rb +256 -0
  98. data/lib/active_merchant/billing/gateways/global_collect.rb +580 -0
  99. data/lib/active_merchant/billing/gateways/global_transport.rb +193 -0
  100. data/lib/active_merchant/billing/gateways/hdfc.rb +205 -0
  101. data/lib/active_merchant/billing/gateways/hps.rb +472 -0
  102. data/lib/active_merchant/billing/gateways/iats_payments.rb +312 -0
  103. data/lib/active_merchant/billing/gateways/in_context_paypal_express.rb +15 -0
  104. data/lib/active_merchant/billing/gateways/inspire.rb +213 -0
  105. data/lib/active_merchant/billing/gateways/instapay.rb +159 -0
  106. data/lib/active_merchant/billing/gateways/ipg.rb +420 -0
  107. data/lib/active_merchant/billing/gateways/ipp.rb +176 -0
  108. data/lib/active_merchant/billing/gateways/iridium.rb +467 -0
  109. data/lib/active_merchant/billing/gateways/itransact.rb +448 -0
  110. data/lib/active_merchant/billing/gateways/iveri.rb +290 -0
  111. data/lib/active_merchant/billing/gateways/ixopay.rb +320 -0
  112. data/lib/active_merchant/billing/gateways/jetpay.rb +395 -0
  113. data/lib/active_merchant/billing/gateways/jetpay_v2.rb +432 -0
  114. data/lib/active_merchant/billing/gateways/klarna.rb +317 -0
  115. data/lib/active_merchant/billing/gateways/komoju.rb +115 -0
  116. data/lib/active_merchant/billing/gateways/kushki.rb +297 -0
  117. data/lib/active_merchant/billing/gateways/latitude19.rb +412 -0
  118. data/lib/active_merchant/billing/gateways/linkpoint.rb +448 -0
  119. data/lib/active_merchant/billing/gateways/litle.rb +643 -0
  120. data/lib/active_merchant/billing/gateways/mastercard.rb +286 -0
  121. data/lib/active_merchant/billing/gateways/maxipago.rb +220 -0
  122. data/lib/active_merchant/billing/gateways/mercado_pago.rb +348 -0
  123. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +228 -0
  124. data/lib/active_merchant/billing/gateways/merchant_one.rb +110 -0
  125. data/lib/active_merchant/billing/gateways/merchant_partners.rb +245 -0
  126. data/lib/active_merchant/billing/gateways/merchant_ware.rb +313 -0
  127. data/lib/active_merchant/billing/gateways/merchant_ware_version_four.rb +284 -0
  128. data/lib/active_merchant/billing/gateways/merchant_warrior.rb +248 -0
  129. data/lib/active_merchant/billing/gateways/mercury.rb +352 -0
  130. data/lib/active_merchant/billing/gateways/metrics_global.rb +293 -0
  131. data/lib/active_merchant/billing/gateways/micropayment.rb +182 -0
  132. data/lib/active_merchant/billing/gateways/migs/migs_codes.rb +100 -0
  133. data/lib/active_merchant/billing/gateways/migs.rb +329 -0
  134. data/lib/active_merchant/billing/gateways/mit.rb +260 -0
  135. data/lib/active_merchant/billing/gateways/modern_payments.rb +37 -0
  136. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +215 -0
  137. data/lib/active_merchant/billing/gateways/moka.rb +290 -0
  138. data/lib/active_merchant/billing/gateways/monei.rb +424 -0
  139. data/lib/active_merchant/billing/gateways/moneris.rb +488 -0
  140. data/lib/active_merchant/billing/gateways/money_movers.rb +150 -0
  141. data/lib/active_merchant/billing/gateways/mundipagg.rb +366 -0
  142. data/lib/active_merchant/billing/gateways/nab_transact.rb +299 -0
  143. data/lib/active_merchant/billing/gateways/ncr_secure_pay.rb +163 -0
  144. data/lib/active_merchant/billing/gateways/net_registry.rb +198 -0
  145. data/lib/active_merchant/billing/gateways/netaxept.rb +180 -0
  146. data/lib/active_merchant/billing/gateways/netbanx.rb +376 -0
  147. data/lib/active_merchant/billing/gateways/netbilling.rb +229 -0
  148. data/lib/active_merchant/billing/gateways/netpay.rb +223 -0
  149. data/lib/active_merchant/billing/gateways/network_merchants.rb +238 -0
  150. data/lib/active_merchant/billing/gateways/nmi.rb +396 -0
  151. data/lib/active_merchant/billing/gateways/ogone.rb +509 -0
  152. data/lib/active_merchant/billing/gateways/omise.rb +323 -0
  153. data/lib/active_merchant/billing/gateways/openpay.rb +246 -0
  154. data/lib/active_merchant/billing/gateways/opp.rb +394 -0
  155. data/lib/active_merchant/billing/gateways/optimal_payment.rb +331 -0
  156. data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +45 -0
  157. data/lib/active_merchant/billing/gateways/orbital.rb +1267 -0
  158. data/lib/active_merchant/billing/gateways/pac_net_raven.rb +206 -0
  159. data/lib/active_merchant/billing/gateways/pagarme.rb +239 -0
  160. data/lib/active_merchant/billing/gateways/pago_facil.rb +120 -0
  161. data/lib/active_merchant/billing/gateways/pay_arc.rb +392 -0
  162. data/lib/active_merchant/billing/gateways/pay_conex.rb +245 -0
  163. data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +277 -0
  164. data/lib/active_merchant/billing/gateways/pay_hub.rb +213 -0
  165. data/lib/active_merchant/billing/gateways/pay_junction.rb +390 -0
  166. data/lib/active_merchant/billing/gateways/pay_junction_v2.rb +206 -0
  167. data/lib/active_merchant/billing/gateways/pay_secure.rb +110 -0
  168. data/lib/active_merchant/billing/gateways/pay_trace.rb +450 -0
  169. data/lib/active_merchant/billing/gateways/paybox_direct.rb +224 -0
  170. data/lib/active_merchant/billing/gateways/payeezy.rb +513 -0
  171. data/lib/active_merchant/billing/gateways/payex.rb +409 -0
  172. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +235 -0
  173. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +42 -0
  174. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +13 -0
  175. data/lib/active_merchant/billing/gateways/payflow.rb +473 -0
  176. data/lib/active_merchant/billing/gateways/payflow_express.rb +220 -0
  177. data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +14 -0
  178. data/lib/active_merchant/billing/gateways/payflow_uk.rb +20 -0
  179. data/lib/active_merchant/billing/gateways/payment_express.rb +373 -0
  180. data/lib/active_merchant/billing/gateways/paymentez.rb +365 -0
  181. data/lib/active_merchant/billing/gateways/paymill.rb +369 -0
  182. data/lib/active_merchant/billing/gateways/paynetworx.rb +228 -0
  183. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +718 -0
  184. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +69 -0
  185. data/lib/active_merchant/billing/gateways/paypal/paypal_recurring_api.rb +262 -0
  186. data/lib/active_merchant/billing/gateways/paypal.rb +136 -0
  187. data/lib/active_merchant/billing/gateways/paypal_ca.rb +13 -0
  188. data/lib/active_merchant/billing/gateways/paypal_digital_goods.rb +44 -0
  189. data/lib/active_merchant/billing/gateways/paypal_express.rb +272 -0
  190. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +30 -0
  191. data/lib/active_merchant/billing/gateways/paypal_standard.rb +281 -0
  192. data/lib/active_merchant/billing/gateways/paysafe.rb +420 -0
  193. data/lib/active_merchant/billing/gateways/payscout.rb +159 -0
  194. data/lib/active_merchant/billing/gateways/paystation.rb +204 -0
  195. data/lib/active_merchant/billing/gateways/payu_in.rb +249 -0
  196. data/lib/active_merchant/billing/gateways/payu_latam.rb +482 -0
  197. data/lib/active_merchant/billing/gateways/payway.rb +207 -0
  198. data/lib/active_merchant/billing/gateways/payway_dot_com.rb +253 -0
  199. data/lib/active_merchant/billing/gateways/pin.rb +273 -0
  200. data/lib/active_merchant/billing/gateways/pixxels.rb +263 -0
  201. data/lib/active_merchant/billing/gateways/plexo.rb +308 -0
  202. data/lib/active_merchant/billing/gateways/plugnpay.rb +283 -0
  203. data/lib/active_merchant/billing/gateways/priority.rb +392 -0
  204. data/lib/active_merchant/billing/gateways/pro_pay.rb +325 -0
  205. data/lib/active_merchant/billing/gateways/psigate.rb +227 -0
  206. data/lib/active_merchant/billing/gateways/psl_card.rb +295 -0
  207. data/lib/active_merchant/billing/gateways/qbms.rb +302 -0
  208. data/lib/active_merchant/billing/gateways/quantum.rb +274 -0
  209. data/lib/active_merchant/billing/gateways/quickbooks.rb +377 -0
  210. data/lib/active_merchant/billing/gateways/quickpay/quickpay_common.rb +184 -0
  211. data/lib/active_merchant/billing/gateways/quickpay/quickpay_v10.rb +297 -0
  212. data/lib/active_merchant/billing/gateways/quickpay/quickpay_v4to7.rb +226 -0
  213. data/lib/active_merchant/billing/gateways/quickpay.rb +24 -0
  214. data/lib/active_merchant/billing/gateways/qvalent.rb +305 -0
  215. data/lib/active_merchant/billing/gateways/rapyd.rb +319 -0
  216. data/lib/active_merchant/billing/gateways/reach.rb +277 -0
  217. data/lib/active_merchant/billing/gateways/realex.rb +400 -0
  218. data/lib/active_merchant/billing/gateways/redsys.rb +723 -0
  219. data/lib/active_merchant/billing/gateways/s5.rb +247 -0
  220. data/lib/active_merchant/billing/gateways/safe_charge.rb +298 -0
  221. data/lib/active_merchant/billing/gateways/sage.rb +446 -0
  222. data/lib/active_merchant/billing/gateways/sage_pay.rb +434 -0
  223. data/lib/active_merchant/billing/gateways/sallie_mae.rb +141 -0
  224. data/lib/active_merchant/billing/gateways/secure_net.rb +260 -0
  225. data/lib/active_merchant/billing/gateways/secure_pay.rb +191 -0
  226. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +290 -0
  227. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +103 -0
  228. data/lib/active_merchant/billing/gateways/securion_pay.rb +305 -0
  229. data/lib/active_merchant/billing/gateways/shift4.rb +345 -0
  230. data/lib/active_merchant/billing/gateways/simetrik.rb +368 -0
  231. data/lib/active_merchant/billing/gateways/skip_jack.rb +450 -0
  232. data/lib/active_merchant/billing/gateways/smart_ps.rb +274 -0
  233. data/lib/active_merchant/billing/gateways/so_easy_pay.rb +194 -0
  234. data/lib/active_merchant/billing/gateways/spreedly_core.rb +354 -0
  235. data/lib/active_merchant/billing/gateways/stripe.rb +866 -0
  236. data/lib/active_merchant/billing/gateways/stripe_payment_intents.rb +602 -0
  237. data/lib/active_merchant/billing/gateways/swipe_checkout.rb +151 -0
  238. data/lib/active_merchant/billing/gateways/telr.rb +273 -0
  239. data/lib/active_merchant/billing/gateways/tns.rb +23 -0
  240. data/lib/active_merchant/billing/gateways/trans_first.rb +240 -0
  241. data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +612 -0
  242. data/lib/active_merchant/billing/gateways/transact_pro.rb +222 -0
  243. data/lib/active_merchant/billing/gateways/transax.rb +21 -0
  244. data/lib/active_merchant/billing/gateways/transnational.rb +9 -0
  245. data/lib/active_merchant/billing/gateways/trexle.rb +221 -0
  246. data/lib/active_merchant/billing/gateways/trust_commerce.rb +500 -0
  247. data/lib/active_merchant/billing/gateways/usa_epay.rb +24 -0
  248. data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +1612 -0
  249. data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +367 -0
  250. data/lib/active_merchant/billing/gateways/vanco.rb +303 -0
  251. data/lib/active_merchant/billing/gateways/verifi.rb +224 -0
  252. data/lib/active_merchant/billing/gateways/viaklix.rb +171 -0
  253. data/lib/active_merchant/billing/gateways/visanet_peru.rb +250 -0
  254. data/lib/active_merchant/billing/gateways/vpos.rb +223 -0
  255. data/lib/active_merchant/billing/gateways/webpay.rb +97 -0
  256. data/lib/active_merchant/billing/gateways/wepay.rb +235 -0
  257. data/lib/active_merchant/billing/gateways/wirecard.rb +430 -0
  258. data/lib/active_merchant/billing/gateways/wompi.rb +197 -0
  259. data/lib/active_merchant/billing/gateways/world_net.rb +345 -0
  260. data/lib/active_merchant/billing/gateways/worldpay.rb +1050 -0
  261. data/lib/active_merchant/billing/gateways/worldpay_online_payments.rb +208 -0
  262. data/lib/active_merchant/billing/gateways/worldpay_us.rb +221 -0
  263. data/lib/active_merchant/billing/gateways.rb +14 -0
  264. data/lib/active_merchant/billing/model.rb +30 -0
  265. data/lib/active_merchant/billing/network_tokenization_credit_card.rb +39 -0
  266. data/lib/active_merchant/billing/payment_token.rb +21 -0
  267. data/lib/active_merchant/billing/rails.rb +3 -0
  268. data/lib/active_merchant/billing/response.rb +121 -0
  269. data/lib/active_merchant/billing/three_d_secure_eci_mapper.rb +27 -0
  270. data/lib/active_merchant/billing.rb +16 -0
  271. data/lib/active_merchant/connection.rb +194 -0
  272. data/lib/active_merchant/country.rb +338 -0
  273. data/lib/active_merchant/empty.rb +20 -0
  274. data/lib/active_merchant/errors.rb +38 -0
  275. data/lib/active_merchant/net_http_ssl_connection.rb +11 -0
  276. data/lib/active_merchant/network_connection_retries.rb +78 -0
  277. data/lib/active_merchant/post_data.rb +26 -0
  278. data/lib/active_merchant/posts_data.rb +92 -0
  279. data/lib/active_merchant/version.rb +3 -0
  280. data/lib/active_merchant.rb +63 -0
  281. data/lib/activemerchant.rb +1 -0
  282. data/lib/certs/cacert.pem +3214 -0
  283. data/lib/support/gateway_support.rb +69 -0
  284. data/lib/support/outbound_hosts.rb +28 -0
  285. data/lib/support/ssl_verify.rb +88 -0
  286. data/lib/support/ssl_version.rb +86 -0
  287. metadata +506 -0
@@ -0,0 +1,424 @@
1
+ require 'nokogiri'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ #
6
+ # == Monei gateway
7
+ # This class implements Monei gateway for Active Merchant. For more information about Monei
8
+ # gateway please go to http://www.monei.com
9
+ #
10
+ # === Setup
11
+ # In order to set-up the gateway you need only one paramater: the api_key
12
+ # Request that data to Monei.
13
+ class MoneiGateway < Gateway
14
+ self.live_url = self.test_url = 'https://api.monei.com/v1/payments'
15
+
16
+ self.supported_countries = %w[AD AT BE BG CA CH CY CZ DE DK EE ES FI FO FR GB GI GR HU IE IL IS IT LI LT LU LV MT NL NO PL PT RO SE SI SK TR US VA]
17
+ self.default_currency = 'EUR'
18
+ self.money_format = :cents
19
+ self.supported_cardtypes = %i[visa master maestro jcb american_express]
20
+
21
+ self.homepage_url = 'https://monei.com/'
22
+ self.display_name = 'MONEI'
23
+
24
+ # Constructor
25
+ #
26
+ # options - Hash containing the gateway credentials, ALL MANDATORY
27
+ # :api_key Account's API KEY
28
+ #
29
+ def initialize(options = {})
30
+ requires!(options, :api_key)
31
+ super
32
+ end
33
+
34
+ # Public: Performs purchase operation
35
+ #
36
+ # money - Amount of purchase
37
+ # payment_method - Credit card
38
+ # options - Hash containing purchase options
39
+ # :order_id Merchant created id for the purchase
40
+ # :billing_address Hash with billing address information
41
+ # :description Merchant created purchase description (optional)
42
+ # :currency Sale currency to override money object or default (optional)
43
+ #
44
+ # Returns Active Merchant response object
45
+ def purchase(money, payment_method, options = {})
46
+ execute_new_order(:purchase, money, payment_method, options)
47
+ end
48
+
49
+ # Public: Performs authorization operation
50
+ #
51
+ # money - Amount to authorize
52
+ # payment_method - Credit card
53
+ # options - Hash containing authorization options
54
+ # :order_id Merchant created id for the authorization
55
+ # :billing_address Hash with billing address information
56
+ # :description Merchant created authorization description (optional)
57
+ # :currency Sale currency to override money object or default (optional)
58
+ #
59
+ # Returns Active Merchant response object
60
+ def authorize(money, payment_method, options = {})
61
+ execute_new_order(:authorize, money, payment_method, options)
62
+ end
63
+
64
+ # Public: Performs capture operation on previous authorization
65
+ #
66
+ # money - Amount to capture
67
+ # authorization - Reference to previous authorization, obtained from response object returned by authorize
68
+ # options - Hash containing capture options
69
+ # :order_id Merchant created id for the authorization (optional)
70
+ # :description Merchant created authorization description (optional)
71
+ # :currency Sale currency to override money object or default (optional)
72
+ #
73
+ # Note: you should pass either order_id or description
74
+ #
75
+ # Returns Active Merchant response object
76
+ def capture(money, authorization, options = {})
77
+ execute_dependant(:capture, money, authorization, options)
78
+ end
79
+
80
+ # Public: Refunds from previous purchase
81
+ #
82
+ # money - Amount to refund
83
+ # authorization - Reference to previous purchase, obtained from response object returned by purchase
84
+ # options - Hash containing refund options
85
+ # :order_id Merchant created id for the authorization (optional)
86
+ # :description Merchant created authorization description (optional)
87
+ # :currency Sale currency to override money object or default (optional)
88
+ #
89
+ # Note: you should pass either order_id or description
90
+ #
91
+ # Returns Active Merchant response object
92
+ def refund(money, authorization, options = {})
93
+ execute_dependant(:refund, money, authorization, options)
94
+ end
95
+
96
+ # Public: Voids previous authorization
97
+ #
98
+ # authorization - Reference to previous authorization, obtained from response object returned by authorize
99
+ # options - Hash containing capture options
100
+ # :order_id Merchant created id for the authorization (optional)
101
+ #
102
+ # Returns Active Merchant response object
103
+ def void(authorization, options = {})
104
+ execute_dependant(:void, nil, authorization, options)
105
+ end
106
+
107
+ # Public: Verifies credit card. Does this by doing a authorization of 1.00 Euro and then voiding it.
108
+ #
109
+ # payment_method - Credit card
110
+ # options - Hash containing authorization options
111
+ # :order_id Merchant created id for the authorization
112
+ # :billing_address Hash with billing address information
113
+ # :description Merchant created authorization description (optional)
114
+ # :currency Sale currency to override money object or default (optional)
115
+ #
116
+ # Returns Active Merchant response object of Authorization operation
117
+ def verify(payment_method, options = {})
118
+ MultiResponse.run(:use_first_response) do |r|
119
+ r.process { authorize(100, payment_method, options) }
120
+ r.process(:ignore_result) { void(r.authorization, options) }
121
+ end
122
+ end
123
+
124
+ def store(payment_method, options = {})
125
+ execute_new_order(:store, 0, payment_method, options)
126
+ end
127
+
128
+ def supports_scrubbing?
129
+ true
130
+ end
131
+
132
+ def scrub(transcript)
133
+ transcript.
134
+ gsub(%r((Authorization: )\w+), '\1[FILTERED]').
135
+ gsub(%r(("number\\?":\\?")[^"]*)i, '\1[FILTERED]').
136
+ gsub(%r(("cvc\\?":\\?")[^"]*)i, '\1[FILTERED]').
137
+ gsub(%r(("cavv\\?":\\?")[^"]*)i, '\1[FILTERED]')
138
+ end
139
+
140
+ private
141
+
142
+ # Private: Execute purchase or authorize operation
143
+ def execute_new_order(action, money, payment_method, options)
144
+ request = build_request
145
+ add_identification_new_order(request, options)
146
+ add_transaction(request, action, money, options)
147
+ add_payment(request, payment_method)
148
+ add_customer(request, payment_method, options)
149
+ add_3ds_authenticated_data(request, options)
150
+ add_browser_info(request, options)
151
+ commit(request, action, options)
152
+ end
153
+
154
+ # Private: Execute operation that depends on authorization code from previous purchase or authorize operation
155
+ def execute_dependant(action, money, authorization, options)
156
+ request = build_request
157
+
158
+ add_identification_authorization(request, authorization, options)
159
+ add_transaction(request, action, money, options)
160
+
161
+ commit(request, action, options)
162
+ end
163
+
164
+ # Private: Build request object
165
+ def build_request
166
+ request = {}
167
+ request[:livemode] = test? ? 'false' : 'true'
168
+ request
169
+ end
170
+
171
+ # Private: Add identification part to request for new orders
172
+ def add_identification_new_order(request, options)
173
+ requires!(options, :order_id)
174
+ request[:orderId] = options[:order_id]
175
+ end
176
+
177
+ # Private: Add identification part to request for orders that depend on authorization from previous operation
178
+ def add_identification_authorization(request, authorization, options)
179
+ options[:paymentId] = authorization
180
+ request[:orderId] = options[:order_id] if options[:order_id]
181
+ end
182
+
183
+ # Private: Add payment part to request
184
+ def add_transaction(request, action, money, options)
185
+ request[:transactionType] = translate_payment_code(action)
186
+ request[:description] = options[:description] || options[:order_id]
187
+ unless money.nil?
188
+ request[:amount] = amount(money).to_i
189
+ request[:currency] = options[:currency] || currency(money)
190
+ end
191
+ end
192
+
193
+ # Private: Add payment method to request
194
+ def add_payment(request, payment_method)
195
+ if payment_method.is_a? String
196
+ request[:paymentToken] = payment_method
197
+ else
198
+ request[:paymentMethod] = {}
199
+ request[:paymentMethod][:card] = {}
200
+ request[:paymentMethod][:card][:number] = payment_method.number
201
+ request[:paymentMethod][:card][:expMonth] = format(payment_method.month, :two_digits)
202
+ request[:paymentMethod][:card][:expYear] = format(payment_method.year, :two_digits)
203
+ request[:paymentMethod][:card][:cvc] = payment_method.verification_value.to_s
204
+ request[:paymentMethod][:card][:cardholderName] = payment_method.name
205
+ end
206
+ end
207
+
208
+ # Private: Add customer part to request
209
+ def add_customer(request, payment_method, options)
210
+ address = options[:billing_address] || options[:address]
211
+
212
+ request[:customer] = {}
213
+ request[:customer][:email] = options[:email] || 'support@monei.net'
214
+
215
+ if address
216
+ request[:customer][:name] = address[:name].to_s if address[:name]
217
+
218
+ request[:billingDetails] = {}
219
+ request[:billingDetails][:email] = options[:email] if options[:email]
220
+ request[:billingDetails][:name] = address[:name] if address[:name]
221
+ request[:billingDetails][:company] = address[:company] if address[:company]
222
+ request[:billingDetails][:phone] = address[:phone] if address[:phone]
223
+ request[:billingDetails][:address] = {}
224
+ request[:billingDetails][:address][:line1] = address[:address1] if address[:address1]
225
+ request[:billingDetails][:address][:line2] = address[:address2] if address[:address2]
226
+ request[:billingDetails][:address][:city] = address[:city] if address[:city]
227
+ request[:billingDetails][:address][:state] = address[:state] if address[:state].present?
228
+ request[:billingDetails][:address][:zip] = address[:zip].to_s if address[:zip]
229
+ request[:billingDetails][:address][:country] = address[:country] if address[:country]
230
+ end
231
+
232
+ request[:sessionDetails] = {}
233
+ request[:sessionDetails][:ip] = options[:ip] if options[:ip]
234
+ end
235
+
236
+ # Private : Convert ECI to ResultIndicator
237
+ # Possible ECI values:
238
+ # 02 or 05 - Fully Authenticated Transaction
239
+ # 00 or 07 - Non 3D Secure Transaction
240
+ # Possible ResultIndicator values:
241
+ # 01 = MASTER_3D_ATTEMPT
242
+ # 02 = MASTER_3D_SUCCESS
243
+ # 05 = VISA_3D_SUCCESS
244
+ # 06 = VISA_3D_ATTEMPT
245
+ # 07 = DEFAULT_E_COMMERCE
246
+ def eci_to_result_indicator(eci)
247
+ case eci
248
+ when '02', '05'
249
+ return eci
250
+ else
251
+ return '07'
252
+ end
253
+ end
254
+
255
+ # Private: add the already validated 3DSecure info to request
256
+ def add_3ds_authenticated_data(request, options)
257
+ if options[:three_d_secure] && options[:three_d_secure][:eci] && options[:three_d_secure][:xid]
258
+ add_3ds1_authenticated_data(request, options)
259
+ elsif options[:three_d_secure]
260
+ add_3ds2_authenticated_data(request, options)
261
+ end
262
+ end
263
+
264
+ def add_3ds1_authenticated_data(request, options)
265
+ three_d_secure_options = options[:three_d_secure]
266
+ request[:paymentMethod][:card][:auth] = {
267
+ cavv: three_d_secure_options[:cavv],
268
+ cavvAlgorithm: three_d_secure_options[:cavv_algorithm],
269
+ eci: three_d_secure_options[:eci],
270
+ xid: three_d_secure_options[:xid],
271
+ directoryResponse: three_d_secure_options[:enrolled],
272
+ authenticationResponse: three_d_secure_options[:authentication_response_status]
273
+ }
274
+ end
275
+
276
+ def add_3ds2_authenticated_data(request, options)
277
+ three_d_secure_options = options[:three_d_secure]
278
+ # If the transaction was authenticated in a frictionless flow, send the transStatus from the ARes.
279
+ if three_d_secure_options[:authentication_response_status].nil?
280
+ authentication_response = three_d_secure_options[:directory_response_status]
281
+ else
282
+ authentication_response = three_d_secure_options[:authentication_response_status]
283
+ end
284
+ request[:paymentMethod][:card][:auth] = {
285
+ threeDSVersion: three_d_secure_options[:version],
286
+ eci: three_d_secure_options[:eci],
287
+ cavv: three_d_secure_options[:cavv],
288
+ dsTransID: three_d_secure_options[:ds_transaction_id],
289
+ directoryResponse: three_d_secure_options[:directory_response_status],
290
+ authenticationResponse: authentication_response
291
+ }
292
+ end
293
+
294
+ def add_browser_info(request, options)
295
+ request[:sessionDetails][:ip] = options[:ip] if options[:ip]
296
+ request[:sessionDetails][:userAgent] = options[:user_agent] if options[:user_agent]
297
+ request[:sessionDetails][:lang] = options[:lang] if options[:lang]
298
+ end
299
+
300
+ # Private: Parse JSON response from Monei servers
301
+ def parse(body)
302
+ JSON.parse(body)
303
+ end
304
+
305
+ def json_error(raw_response)
306
+ msg = 'Invalid response received from the MONEI API. Please contact support@monei.net if you continue to receive this message.'
307
+ msg += " (The raw response returned by the API was #{raw_response.inspect})"
308
+ {
309
+ 'status' => 'error',
310
+ 'message' => msg
311
+ }
312
+ end
313
+
314
+ def response_error(raw_response)
315
+ parse(raw_response)
316
+ rescue JSON::ParserError
317
+ json_error(raw_response)
318
+ end
319
+
320
+ def api_request(url, parameters, options = {})
321
+ raw_response = response = nil
322
+ begin
323
+ raw_response = ssl_post(url, post_data(parameters), options)
324
+ response = parse(raw_response)
325
+ rescue ResponseError => e
326
+ raw_response = e.response.body
327
+ response = response_error(raw_response)
328
+ rescue JSON::ParserError
329
+ response = json_error(raw_response)
330
+ end
331
+ response
332
+ end
333
+
334
+ # Private: Send transaction to Monei servers and create AM response
335
+ def commit(request, action, options)
336
+ url = (test? ? test_url : live_url)
337
+ endpoint = translate_action_endpoint(action, options)
338
+ headers = {
339
+ 'Content-Type': 'application/json;charset=UTF-8',
340
+ 'Authorization': @options[:api_key],
341
+ 'User-Agent': 'MONEI/Shopify/0.1.0'
342
+ }
343
+
344
+ response = api_request(url + endpoint, params(request, action), headers)
345
+ success = success_from(response)
346
+
347
+ Response.new(
348
+ success,
349
+ message_from(response, success),
350
+ response,
351
+ authorization: authorization_from(response, action),
352
+ test: test?,
353
+ error_code: error_code_from(response, success)
354
+ )
355
+ end
356
+
357
+ # Private: Decide success from servers response
358
+ def success_from(response)
359
+ %w[
360
+ SUCCEEDED
361
+ AUTHORIZED
362
+ REFUNDED
363
+ PARTIALLY_REFUNDED
364
+ CANCELED
365
+ ].include? response['status']
366
+ end
367
+
368
+ # Private: Get message from servers response
369
+ def message_from(response, success)
370
+ success ? 'Transaction approved' : response.fetch('statusMessage', response.fetch('message', 'No error details'))
371
+ end
372
+
373
+ # Private: Get error code from servers response
374
+ def error_code_from(response, success)
375
+ success ? nil : STANDARD_ERROR_CODE[:card_declined]
376
+ end
377
+
378
+ # Private: Get authorization code from servers response
379
+ def authorization_from(response, action)
380
+ case action
381
+ when :store
382
+ return response['paymentToken']
383
+ else
384
+ return response['id']
385
+ end
386
+ end
387
+
388
+ # Private: Encode POST parameters
389
+ def post_data(params)
390
+ params.clone.to_json
391
+ end
392
+
393
+ # Private: generate request params depending on action
394
+ def params(request, action)
395
+ request[:generatePaymentToken] = true if action == :store
396
+ request
397
+ end
398
+
399
+ # Private: Translate AM operations to Monei operations codes
400
+ def translate_payment_code(action)
401
+ {
402
+ purchase: 'SALE',
403
+ store: 'SALE',
404
+ authorize: 'AUTH',
405
+ capture: 'CAPTURE',
406
+ refund: 'REFUND',
407
+ void: 'CANCEL'
408
+ }[action]
409
+ end
410
+
411
+ # Private: Translate AM operations to Monei endpoints
412
+ def translate_action_endpoint(action, options)
413
+ {
414
+ purchase: '',
415
+ store: '',
416
+ authorize: '',
417
+ capture: "/#{options[:paymentId]}/capture",
418
+ refund: "/#{options[:paymentId]}/refund",
419
+ void: "/#{options[:paymentId]}/cancel"
420
+ }[action]
421
+ end
422
+ end
423
+ end
424
+ end