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,394 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ class OppGateway < Gateway
4
+ # = Open Payment Platform
5
+ #
6
+ # The Open Payment Platform includes a powerful omni-channel transaction processing API,
7
+ # enabling you to quickly and flexibly build new applications and services on the platform.
8
+ #
9
+ # This plugin enables connectivity to the Open Payment Platform for activemerchant.
10
+ #
11
+ # For any questions or comments please contact support@payon.com
12
+ #
13
+ # == Usage
14
+ #
15
+ # gateway = ActiveMerchant::Billing::OppGateway.new(
16
+ # access_token: 'access_token',
17
+ # entity_id: 'entity id',
18
+ # )
19
+ #
20
+ # # set up credit card object as in main ActiveMerchant example
21
+ # creditcard = ActiveMerchant::Billing::CreditCard.new(
22
+ # :type => 'visa',
23
+ # :number => '4242424242424242',
24
+ # :month => 8,
25
+ # :year => 2009,
26
+ # :first_name => 'Bob',
27
+ # :last_name => 'Bobsen'
28
+ # :verification_value: '123')
29
+ #
30
+ # # Request: complete example, including address, billing address, shipping address
31
+ # complete_request_options = {
32
+ # order_id: "your merchant/shop order id", # alternative is to set merchantInvoiceId
33
+ # merchant_transaction_id: "your merchant/shop transaction id",
34
+ # address: address,
35
+ # description: 'Store Purchase - Books',
36
+ # risk_workflow: false,
37
+ # test_mode: 'EXTERNAL' # or 'INTERNAL', valid only for test system
38
+ # create_registration: false, # payment details will be stored on the server an latter can be referenced
39
+ #
40
+ # billing_address: {
41
+ # address1: '123 Test Street',
42
+ # city: 'Test',
43
+ # state: 'TE',
44
+ # zip: 'AB12CD',
45
+ # country: 'GB',
46
+ # },
47
+ # shipping_address: {
48
+ # name: 'Muton DeMicelis',
49
+ # address1: 'My Street On Upiter, Apt 3.14/2.78',
50
+ # city: 'Munich',
51
+ # state: 'Bov',
52
+ # zip: '81675',
53
+ # country: 'DE',
54
+ # },
55
+ # customer: {
56
+ # merchant_customer_id: "your merchant/customer id",
57
+ # givenname: 'Jane',
58
+ # surname: 'Jones',
59
+ # birth_date: '1965-05-01',
60
+ # phone: '(?!?)555-5555',
61
+ # mobile: '(?!?)234-23423',
62
+ # email: 'jane@jones.com',
63
+ # company_name: 'JJ Ltd.',
64
+ # identification_doctype: 'PASSPORT',
65
+ # identification_docid: 'FakeID2342431234123',
66
+ # ip: 101.102.103.104,
67
+ # },
68
+ # }
69
+ #
70
+ # # Request: minimal example
71
+ # minimal_request_options = {
72
+ # order_id: "your merchant/shop order id", # alternative is to set merchantInvoiceId
73
+ # description: 'Store Purchase - Books',
74
+ # }
75
+ #
76
+ # options =
77
+ # # run request
78
+ # response = gateway.purchase(754, creditcard, options) # charge 7,54 EUR
79
+ #
80
+ # response.success? # Check whether the transaction was successful
81
+ # response.error_code # Retrieve the error message - it's mapped to Gateway::STANDARD_ERROR_CODE
82
+ # response.message # Retrieve the message returned by opp
83
+ # response.authorization # Retrieve the unique transaction ID returned by opp
84
+ # response.params['result']['code'] # Retrieve original return code returned by opp server
85
+ #
86
+ # == Errors
87
+ # If transaction is not successful, response.error_code contains mapped to Gateway::STANDARD_ERROR_CODE error message.
88
+ # Complete list of opp error codes can be viewed on https://docs.oppwa.com/
89
+ # Because this list is much bigger than Gateway::STANDARD_ERROR_CODE, only fraction is mapped to Gateway::STANDARD_ERROR_CODE.
90
+ # All other codes are mapped as Gateway::STANDARD_ERROR_CODE[:processing_error], so if this is the case,
91
+ # you may check the original result code from OPP that can be found in response.params['result']['code']
92
+ #
93
+ # == Special features
94
+ # For purchase method risk check can be forced when options[:risk_workflow] = true
95
+ # This will split (on OPP server side) the transaction into two separate transactions: authorize and capture,
96
+ # but capture will be executed only if risk checks are successful.
97
+ #
98
+ # For testing you may use the test account details listed fixtures.yml under opp. It is important to note that there are two test modes available:
99
+ # options[:test_mode]='EXTERNAL' causes test transactions to be forwarded to the processor's test system for 'end-to-end' testing
100
+ # options[:test_mode]='INTERNAL' causes transactions to be sent to opp simulators, which is useful when switching to the live endpoint for connectivity testing.
101
+ # If no test_mode parameter is sent, test_mode=INTERNAL is the default behaviour.
102
+ #
103
+ # Billing Address, Shipping Address, Custom Parameters are supported as described under https://docs.oppwa.com/parameters
104
+ # See complete example above for details.
105
+ #
106
+ # == Tokenization
107
+ # When create_registration is set to true, the payment details will be stored and a token will be returned in registrationId response field,
108
+ # which can subsequently be used to reference the stored payment.
109
+
110
+ self.test_url = 'https://test.oppwa.com/v1/payments'
111
+ self.live_url = 'https://oppwa.com/v1/payments'
112
+
113
+ self.supported_countries = %w(AD AI AG AR AU AT BS BB BE BZ BM BR BN BG CA HR CY CZ DK DM EE FI FR DE GR GD GY HK HU IS IN IL IT JP LV LI LT LU MY MT MX MC MS NL PA PL PT KN LC MF VC SM SG SK SI ZA ES SR SE CH TR GB US UY)
114
+ self.default_currency = 'EUR'
115
+ self.supported_cardtypes = %i[visa master american_express diners_club discover jcb maestro dankort]
116
+
117
+ self.homepage_url = 'https://docs.oppwa.com'
118
+ self.display_name = 'Open Payment Platform'
119
+
120
+ def initialize(options = {})
121
+ requires!(options, :access_token, :entity_id)
122
+ super
123
+ end
124
+
125
+ def purchase(money, payment, options = {})
126
+ # debit
127
+ options[:registrationId] = payment if payment.is_a?(String)
128
+ execute_dbpa(options[:risk_workflow] ? 'PA.CP' : 'DB',
129
+ money, payment, options)
130
+ end
131
+
132
+ def authorize(money, payment, options = {})
133
+ # preauthorization PA
134
+ execute_dbpa('PA', money, payment, options)
135
+ end
136
+
137
+ def capture(money, authorization, options = {})
138
+ # capture CP
139
+ execute_referencing('CP', money, authorization, options)
140
+ end
141
+
142
+ def refund(money, authorization, options = {})
143
+ # refund RF
144
+ execute_referencing('RF', money, authorization, options)
145
+ end
146
+
147
+ def void(authorization, options = {})
148
+ # reversal RV
149
+ execute_referencing('RV', nil, authorization, options)
150
+ end
151
+
152
+ def verify(credit_card, options = {})
153
+ MultiResponse.run(:use_first_response) do |r|
154
+ r.process { authorize(100, credit_card, options) }
155
+ r.process(:ignore_result) { void(r.authorization, options) }
156
+ end
157
+ end
158
+
159
+ def store(credit_card, options = {})
160
+ execute_store(credit_card, options.merge(store: true))
161
+ end
162
+
163
+ def supports_scrubbing?
164
+ true
165
+ end
166
+
167
+ def scrub(transcript)
168
+ transcript.
169
+ gsub(%r((Authorization: Bearer )\w+)i, '\1[FILTERED]').
170
+ gsub(%r((card\.number=)\d+), '\1[FILTERED]').
171
+ gsub(%r((card\.cvv=)\d+), '\1[FILTERED]')
172
+ end
173
+
174
+ private
175
+
176
+ def execute_store(payment, options)
177
+ post = {}
178
+ add_payment_method(post, payment, options)
179
+ add_address(post, options)
180
+ add_options(post, options)
181
+ add_3d_secure(post, options)
182
+ commit(post, nil, options)
183
+ end
184
+
185
+ def execute_dbpa(txtype, money, payment, options)
186
+ post = {}
187
+ post[:paymentType] = txtype
188
+ add_invoice(post, money, options)
189
+ add_payment_method(post, payment, options)
190
+ add_address(post, options)
191
+ add_customer_data(post, payment, options)
192
+ add_options(post, options)
193
+ add_3d_secure(post, options)
194
+ commit(post, nil, options)
195
+ end
196
+
197
+ def execute_referencing(txtype, money, authorization, options)
198
+ post = {}
199
+ post[:paymentType] = txtype
200
+ add_invoice(post, money, options)
201
+ commit(post, authorization, options)
202
+ end
203
+
204
+ def add_authentication(post)
205
+ post[:authentication] = { entityId: @options[:entity_id] }
206
+ end
207
+
208
+ def add_customer_data(post, payment, options)
209
+ if options[:customer]
210
+ post[:customer] = {
211
+ merchantCustomerId: options[:customer][:merchant_customer_id],
212
+ givenName: options[:customer][:givenname] || payment.first_name,
213
+ surname: options[:customer][:surname] || payment.last_name,
214
+ birthDate: options[:customer][:birth_date],
215
+ phone: options[:customer][:phone],
216
+ mobile: options[:customer][:mobile],
217
+ email: options[:customer][:email] || options[:email],
218
+ companyName: options[:customer][:company_name],
219
+ identificationDocType: options[:customer][:identification_doctype],
220
+ identificationDocId: options[:customer][:identification_docid],
221
+ ip: options[:customer][:ip] || options[:ip]
222
+ }
223
+ end
224
+ end
225
+
226
+ def add_address(post, options)
227
+ if billing_address = options[:billing_address] || options[:address]
228
+ address(post, billing_address, 'billing')
229
+ end
230
+ if shipping_address = options[:shipping_address]
231
+ address(post, shipping_address, 'shipping')
232
+ if shipping_address[:name]
233
+ firstname, lastname = shipping_address[:name].split(' ')
234
+ post[:shipping] = { givenName: firstname, surname: lastname }
235
+ end
236
+ end
237
+ end
238
+
239
+ def address(post, address, prefix)
240
+ post[prefix] = {
241
+ street1: address[:address1],
242
+ street2: address[:address2],
243
+ city: address[:city],
244
+ state: address[:state],
245
+ postcode: address[:zip],
246
+ country: address[:country]
247
+ }
248
+ end
249
+
250
+ def add_invoice(post, money, options)
251
+ post[:amount] = amount(money)
252
+ post[:currency] = options[:currency] || currency(money) unless post[:paymentType] == 'RV'
253
+ post[:descriptor] = options[:description] || options[:descriptor]
254
+ post[:merchantInvoiceId] = options[:merchantInvoiceId] || options[:order_id]
255
+ post[:merchantTransactionId] = options[:merchant_transaction_id] || generate_unique_id
256
+ end
257
+
258
+ def add_payment_method(post, payment, options)
259
+ return if payment.is_a?(String)
260
+
261
+ if options[:registrationId]
262
+ post[:card] = {
263
+ cvv: payment.verification_value
264
+ }
265
+ else
266
+ post[:paymentBrand] = payment.brand.upcase
267
+ post[:card] = {
268
+ holder: payment.name,
269
+ number: payment.number,
270
+ expiryMonth: '%02d' % payment.month,
271
+ expiryYear: payment.year,
272
+ cvv: payment.verification_value
273
+ }
274
+ end
275
+ end
276
+
277
+ def add_3d_secure(post, options)
278
+ return unless options[:eci] && options[:cavv] && options[:xid]
279
+
280
+ post[:threeDSecure] = {
281
+ eci: options[:eci],
282
+ verificationId: options[:cavv],
283
+ xid: options[:xid]
284
+ }
285
+ end
286
+
287
+ def add_options(post, options)
288
+ post[:createRegistration] = options[:create_registration] if options[:create_registration] && !options[:registrationId]
289
+ post[:testMode] = options[:test_mode] if test? && options[:test_mode]
290
+ options.each { |key, value| post[key] = value if key.to_s =~ /'customParameters\[[a-zA-Z0-9\._]{3,64}\]'/ }
291
+ post['customParameters[SHOPPER_pluginId]'] = 'activemerchant'
292
+ post['customParameters[custom_disable3DSecure]'] = options[:disable_3d_secure] if options[:disable_3d_secure]
293
+ end
294
+
295
+ def build_url(url, authorization, options)
296
+ if options[:store]
297
+ url.gsub(/payments/, 'registrations')
298
+ elsif options[:registrationId]
299
+ "#{url.gsub(/payments/, 'registrations')}/#{options[:registrationId]}/payments"
300
+ elsif authorization
301
+ "#{url}/#{authorization}"
302
+ else
303
+ url
304
+ end
305
+ end
306
+
307
+ def commit(post, authorization, options)
308
+ url = build_url(test? ? test_url : live_url, authorization, options)
309
+ add_authentication(post)
310
+ post = flatten_hash(post)
311
+
312
+ response =
313
+ begin
314
+ parse(
315
+ ssl_post(
316
+ url,
317
+ post.collect { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join('&'),
318
+ headers
319
+ )
320
+ )
321
+ rescue ResponseError => e
322
+ parse(e.response.body)
323
+ end
324
+
325
+ success = success_from(response)
326
+
327
+ Response.new(
328
+ success,
329
+ message_from(response),
330
+ response,
331
+ authorization: authorization_from(response),
332
+ test: test?,
333
+ error_code: success ? nil : error_code_from(response)
334
+ )
335
+ end
336
+
337
+ def headers
338
+ {
339
+ 'Content-Type' => 'application/x-www-form-urlencoded;charset=UTF-8',
340
+ 'Authorization' => "Bearer #{@options[:access_token]}"
341
+ }
342
+ end
343
+
344
+ def parse(body)
345
+ JSON.parse(body)
346
+ rescue JSON::ParserError
347
+ json_error(body)
348
+ end
349
+
350
+ def json_error(body)
351
+ message = "Invalid response received #{body.inspect}"
352
+ { 'result' => { 'description' => message, 'code' => 'unknown' } }
353
+ end
354
+
355
+ def success_from(response)
356
+ return false unless response['result']
357
+
358
+ success_regex = /^(000\.000\.|000\.100\.1|000\.[36])/
359
+
360
+ if success_regex.match?(response['result']['code'])
361
+ true
362
+ else
363
+ false
364
+ end
365
+ end
366
+
367
+ def message_from(response)
368
+ return 'Failed' unless response['result']
369
+
370
+ response['result']['description']
371
+ end
372
+
373
+ def authorization_from(response)
374
+ response['id']
375
+ end
376
+
377
+ def error_code_from(response)
378
+ response['result']['code']
379
+ end
380
+
381
+ def flatten_hash(hash)
382
+ hash.each_with_object({}) do |(k, v), h|
383
+ if v.is_a? Hash
384
+ flatten_hash(v).map do |h_k, h_v|
385
+ h["#{k}.#{h_k}".to_sym] = h_v
386
+ end
387
+ else
388
+ h[k] = v
389
+ end
390
+ end
391
+ end
392
+ end
393
+ end
394
+ end