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,323 @@
1
+ require 'active_merchant/billing/rails'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ class OmiseGateway < Gateway
6
+ API_URL = 'https://api.omise.co/'
7
+ VAULT_URL = 'https://vault.omise.co/'
8
+
9
+ STANDARD_ERROR_CODE_MAPPING = {
10
+ 'invalid_security_code' => STANDARD_ERROR_CODE[:invalid_cvc],
11
+ 'failed_capture' => STANDARD_ERROR_CODE[:card_declined]
12
+ }
13
+
14
+ self.live_url = self.test_url = API_URL
15
+
16
+ # Currency supported by Omise
17
+ # * Thai Baht with Satang, 50000 (THB500.00)
18
+ # * Japanese Yen, 500 (JPY500)
19
+ self.default_currency = 'THB'
20
+ self.money_format = :cents
21
+
22
+ # Country supported by Omise
23
+ # * Thailand
24
+ self.supported_countries = %w(TH JP)
25
+
26
+ # Credit cards supported by Omise
27
+ # * VISA
28
+ # * MasterCard
29
+ # * JCB
30
+ self.supported_cardtypes = %i[visa master jcb]
31
+
32
+ # Omise main page
33
+ self.homepage_url = 'https://www.omise.co/'
34
+ self.display_name = 'Omise'
35
+
36
+ # Creates a new OmiseGateway.
37
+ #
38
+ # Omise requires public_key for token creation.
39
+ # And it requires secret_key for other transactions.
40
+ # These keys can be found in https://dashboard.omise.co/test/api-keys
41
+ #
42
+ # ==== Options
43
+ #
44
+ # * <tt>:public_key</tt> -- Omise's public key (REQUIRED).
45
+ # * <tt>:secret_key</tt> -- Omise's secret key (REQUIRED).
46
+ # * <tt>:api_version</tt> -- Omise's API Version (OPTIONAL), default version is '2014-07-27'
47
+ # See version at page https://dashboard.omise.co/api-version/edit
48
+
49
+ def initialize(options = {})
50
+ requires!(options, :public_key, :secret_key)
51
+ @public_key = options[:public_key]
52
+ @secret_key = options[:secret_key]
53
+ @api_version = options[:api_version]
54
+ super
55
+ end
56
+
57
+ # Perform a purchase (with auto capture)
58
+ #
59
+ # ==== Parameters
60
+ #
61
+ # * <tt>money</tt> -- The purchasing amount in Thai Baht Satang
62
+ # * <tt>payment_method</tt> -- The CreditCard object
63
+ # * <tt>options</tt> -- An optional parameters, such as token from Omise.js
64
+ #
65
+ # ==== Options
66
+ # * <tt>token_id</tt> -- token id, use Omise.js library to retrieve a token id
67
+ # if this is passed as an option, it will ignore tokenizing via Omisevaultgateway object
68
+ #
69
+ # === Example
70
+ # To create a charge on a card
71
+ #
72
+ # purchase(money, Creditcard_object)
73
+ #
74
+ # To create a charge on a token
75
+ #
76
+ # purchase(money, nil, { :token_id => token_id, ... })
77
+ #
78
+ # To create a charge on a customer
79
+ #
80
+ # purchase(money, nil, { :customer_id => customer_id })
81
+
82
+ def purchase(money, payment_method, options = {})
83
+ create_charge(money, payment_method, options)
84
+ end
85
+
86
+ # Authorize a charge.
87
+ #
88
+ # ==== Parameters
89
+ #
90
+ # * <tt>money</tt> -- The purchasing amount in Thai Baht Satang
91
+ # * <tt>payment_method</tt> -- The CreditCard object
92
+ # * <tt>options</tt> -- An optional parameters, such as token or capture
93
+
94
+ def authorize(money, payment_method, options = {})
95
+ options[:capture] = 'false'
96
+ create_charge(money, payment_method, options)
97
+ end
98
+
99
+ # Capture an authorized charge.
100
+ #
101
+ # ==== Parameters
102
+ #
103
+ # * <tt>money</tt> -- An amount in Thai Baht Satang
104
+ # * <tt>charge_id</tt> -- The CreditCard object
105
+ # * <tt>options</tt> -- An optional parameters, such as token or capture
106
+
107
+ def capture(money, charge_id, options = {})
108
+ post = {}
109
+ add_amount(post, money, options)
110
+ commit(:post, "charges/#{CGI.escape(charge_id)}/capture", post, options)
111
+ end
112
+
113
+ # Refund a charge.
114
+ #
115
+ # ==== Parameters
116
+ #
117
+ # * <tt>money</tt> -- An amount of money to charge in Satang.
118
+ # * <tt>charge_id</tt> -- The CreditCard object
119
+ # * <tt>options</tt> -- An optional parameters, such as token or capture
120
+
121
+ def refund(money, charge_id, options = {})
122
+ options[:amount] = money if money
123
+ commit(:post, "charges/#{CGI.escape(charge_id)}/refunds", options)
124
+ end
125
+
126
+ # Store a card details as customer
127
+ #
128
+ # ==== Parameters
129
+ #
130
+ # * <tt>payment_method</tt> -- The CreditCard.
131
+ # * <tt>options</tt> -- Optional Customer information:
132
+ # 'email' (A customer email)
133
+ # 'description' (A customer description)
134
+
135
+ def store(payment_method, options = {})
136
+ post, card_params = {}, {}
137
+ add_customer_data(post, options)
138
+ add_token(card_params, payment_method, options)
139
+ commit(:post, 'customers', post.merge(card_params), options)
140
+ end
141
+
142
+ # Delete a customer and all associated credit cards.
143
+ #
144
+ # ==== Parameters
145
+ #
146
+ # * <tt>customer_id</tt> -- The Customer identifier (REQUIRED).
147
+
148
+ def unstore(customer_id, options = {})
149
+ commit(:delete, "customers/#{CGI.escape(customer_id)}")
150
+ end
151
+
152
+ # Enable scrubbing sensitive information
153
+ def supports_scrubbing?
154
+ true
155
+ end
156
+
157
+ # Scrub sensitive information out of HTTP transcripts
158
+ #
159
+ # ==== Parameters
160
+ #
161
+ # * <tt>transcript</tt> -- The HTTP transcripts
162
+
163
+ def scrub(transcript)
164
+ transcript.
165
+ gsub(/(Authorization: Basic )\w+/i, '\1[FILTERED]').
166
+ gsub(/(\\"number\\":)\\"\d+\\"/, '\1[FILTERED]').
167
+ gsub(/(\\"security_code\\":)\\"\d+\\"/, '\1[FILTERED]')
168
+ end
169
+
170
+ private
171
+
172
+ def create_charge(money, payment_method, options)
173
+ post = {}
174
+ add_token(post, payment_method, options)
175
+ add_amount(post, money, options)
176
+ add_customer(post, options)
177
+ post[:capture] = options[:capture] if options[:capture]
178
+ commit(:post, 'charges', post, options)
179
+ end
180
+
181
+ def headers(options = {})
182
+ key = options[:key] || @secret_key
183
+ {
184
+ 'Content-Type' => 'application/json;utf-8',
185
+ 'Omise-Version' => @api_version || '2014-07-27',
186
+ 'User-Agent' => "ActiveMerchantBindings/#{ActiveMerchant::VERSION} Ruby/#{RUBY_VERSION}",
187
+ 'Authorization' => 'Basic ' + Base64.encode64(key.to_s + ':').strip,
188
+ 'Accept-Encoding' => 'utf-8'
189
+ }
190
+ end
191
+
192
+ def url_for(endpoint)
193
+ (endpoint == 'tokens' ? VAULT_URL : API_URL) + endpoint
194
+ end
195
+
196
+ def post_data(parameters)
197
+ parameters.present? ? parameters.to_json : nil
198
+ end
199
+
200
+ def https_request(method, endpoint, parameters = nil, options = {})
201
+ raw_response = response = nil
202
+ begin
203
+ raw_response = ssl_request(method, url_for(endpoint), post_data(parameters), headers(options))
204
+ response = parse(raw_response)
205
+ rescue ResponseError => e
206
+ raw_response = e.response.body
207
+ response = parse(raw_response)
208
+ rescue JSON::ParserError
209
+ response = json_error(raw_response)
210
+ end
211
+ response
212
+ end
213
+
214
+ def parse(body)
215
+ JSON.parse(body)
216
+ end
217
+
218
+ def json_error(raw_response)
219
+ msg = 'Invalid response received from Omise API. Please contact support@omise.co if you continue to receive this message.'
220
+ msg += "The raw response returned by the API was #{raw_response.inspect})"
221
+ { message: msg }
222
+ end
223
+
224
+ def commit(method, endpoint, params = nil, options = {})
225
+ response = https_request(method, endpoint, params, options)
226
+ Response.new(
227
+ successful?(response),
228
+ message_from(response),
229
+ response,
230
+ {
231
+ authorization: authorization_from(response),
232
+ test: test?,
233
+ error_code: successful?(response) ? nil : standard_error_code_mapping(response)
234
+ }
235
+ )
236
+ end
237
+
238
+ def standard_error_code_mapping(response)
239
+ STANDARD_ERROR_CODE_MAPPING[error_code_from(response)] || message_to_standard_error_code_from(response)
240
+ end
241
+
242
+ def error_code_from(response)
243
+ error?(response) ? response['code'] : response['failure_code']
244
+ end
245
+
246
+ def message_to_standard_error_code_from(response)
247
+ message = response['message'] if response['code'] == 'invalid_card'
248
+ case message
249
+ when /brand not supported/
250
+ STANDARD_ERROR_CODE[:invalid_number]
251
+ when /number is invalid/
252
+ STANDARD_ERROR_CODE[:incorrect_number]
253
+ when /expiration date cannot be in the past/
254
+ STANDARD_ERROR_CODE[:expired_card]
255
+ when /expiration \w+ is invalid/
256
+ STANDARD_ERROR_CODE[:invalid_expiry_date]
257
+ else
258
+ STANDARD_ERROR_CODE[:processing_error]
259
+ end
260
+ end
261
+
262
+ def message_from(response)
263
+ if successful?(response)
264
+ 'Success'
265
+ else
266
+ response['message'] || response['failure_message']
267
+ end
268
+ end
269
+
270
+ def authorization_from(response)
271
+ response['id'] if successful?(response)
272
+ end
273
+
274
+ def successful?(response)
275
+ !error?(response) && response['failure_code'].nil?
276
+ end
277
+
278
+ def error?(response)
279
+ response.key?('object') && (response['object'] == 'error')
280
+ end
281
+
282
+ def get_token(post, credit_card)
283
+ add_creditcard(post, credit_card) if credit_card
284
+ commit(:post, 'tokens', post, { key: @public_key })
285
+ end
286
+
287
+ def add_token(post, credit_card, options = {})
288
+ if options[:token_id].present?
289
+ post[:card] = options[:token_id]
290
+ else
291
+ response = get_token(post, credit_card)
292
+ response.authorization ? (post[:card] = response.authorization) : response
293
+ end
294
+ end
295
+
296
+ def add_creditcard(post, payment_method)
297
+ card = {
298
+ number: payment_method.number,
299
+ name: payment_method.name,
300
+ security_code: payment_method.verification_value,
301
+ expiration_month: payment_method.month,
302
+ expiration_year: payment_method.year
303
+ }
304
+ post[:card] = card
305
+ end
306
+
307
+ def add_customer(post, options = {})
308
+ post[:customer] = options[:customer_id] if options[:customer_id]
309
+ end
310
+
311
+ def add_customer_data(post, options = {})
312
+ post[:description] = options[:description] if options[:description]
313
+ post[:email] = options[:email] if options[:email]
314
+ end
315
+
316
+ def add_amount(post, money, options)
317
+ post[:amount] = amount(money)
318
+ post[:currency] = (options[:currency] || currency(money))
319
+ post[:description] = options[:description] if options.key?(:description)
320
+ end
321
+ end
322
+ end
323
+ end
@@ -0,0 +1,246 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ class OpenpayGateway < Gateway
4
+ class_attribute :mx_live_url, :mx_test_url
5
+ class_attribute :co_live_url, :co_test_url
6
+
7
+ self.co_live_url = 'https://api.openpay.co/v1/'
8
+ self.co_test_url = 'https://sandbox-api.openpay.co/v1/'
9
+ self.mx_live_url = 'https://api.openpay.mx/v1/'
10
+ self.mx_test_url = 'https://sandbox-api.openpay.mx/v1/'
11
+ self.live_url = self.co_live_url
12
+ self.test_url = self.co_test_url
13
+
14
+ self.supported_countries = %w(CO MX)
15
+ self.supported_cardtypes = %i[visa master american_express carnet]
16
+ self.homepage_url = 'http://www.openpay.mx/'
17
+ self.display_name = 'Openpay'
18
+ self.default_currency = 'MXN'
19
+
20
+ # Instantiate a instance of OpenpayGateway by passing through your
21
+ # merchant id and private api key.
22
+ #
23
+ # === To obtain your own credentials
24
+ # 1. Visit http://openpay.mx
25
+ # 2. Sign up
26
+ # 3. Activate your account clicking on the email confirmation
27
+ def initialize(options = {})
28
+ requires!(options, :key, :merchant_id)
29
+ @api_key = options[:key]
30
+ @merchant_id = options[:merchant_id]
31
+ super
32
+ end
33
+
34
+ def gateway_url(options = {})
35
+ country = options[:merchant_country] || @options[:merchant_country]
36
+
37
+ if country == 'MX'
38
+ test? ? mx_test_url : mx_live_url
39
+ else
40
+ test? ? co_test_url : co_live_url
41
+ end
42
+ end
43
+
44
+ def purchase(money, creditcard, options = {})
45
+ post = create_post_for_auth_or_purchase(money, creditcard, options)
46
+ commit(:post, 'charges', post, options)
47
+ end
48
+
49
+ def authorize(money, creditcard, options = {})
50
+ post = create_post_for_auth_or_purchase(money, creditcard, options)
51
+ post[:capture] = false
52
+ commit(:post, 'charges', post, options)
53
+ end
54
+
55
+ def capture(money, authorization, options = {})
56
+ post = {}
57
+ post[:amount] = amount(money) if money
58
+ post[:payments] = options[:payments] if options[:payments]
59
+ commit(:post, "charges/#{CGI.escape(authorization)}/capture", post, options)
60
+ end
61
+
62
+ def void(identification, options = {})
63
+ commit(:post, "charges/#{CGI.escape(identification)}/refund", nil, options)
64
+ end
65
+
66
+ def refund(money, identification, options = {})
67
+ post = {}
68
+ post[:description] = options[:description]
69
+ post[:amount] = amount(money)
70
+ commit(:post, "charges/#{CGI.escape(identification)}/refund", post, options)
71
+ end
72
+
73
+ def verify(credit_card, options = {})
74
+ MultiResponse.run(:use_first_response) do |r|
75
+ r.process { authorize(100, credit_card, options) }
76
+ r.process(:ignore_result) { void(r.authorization, options) }
77
+ end
78
+ end
79
+
80
+ def store(creditcard, options = {})
81
+ card_params = {}
82
+ add_creditcard(card_params, creditcard, options)
83
+ card = card_params[:card]
84
+
85
+ if options[:customer].present?
86
+ commit(:post, "customers/#{CGI.escape(options[:customer])}/cards", card, options)
87
+ else
88
+ requires!(options, :email, :name)
89
+ post = {}
90
+ post[:name] = options[:name]
91
+ post[:email] = options[:email]
92
+ MultiResponse.run(:first) do |r|
93
+ r.process { commit(:post, 'customers', post, options) }
94
+
95
+ if r.success? && !r.params['id'].blank?
96
+ customer_id = r.params['id']
97
+ r.process { commit(:post, "customers/#{customer_id}/cards", card, options) }
98
+ end
99
+ end
100
+ end
101
+ end
102
+
103
+ def unstore(customer_id, card_id = nil, options = {})
104
+ if card_id.nil?
105
+ commit(:delete, "customers/#{CGI.escape(customer_id)}", nil, options)
106
+ else
107
+ commit(:delete, "customers/#{CGI.escape(customer_id)}/cards/#{CGI.escape(card_id)}", nil, options)
108
+ end
109
+ end
110
+
111
+ def supports_scrubbing
112
+ true
113
+ end
114
+
115
+ def scrub(transcript)
116
+ transcript.
117
+ gsub(%r((Authorization: Basic )\w+), '\1[FILTERED]').
118
+ gsub(%r((card_number\\?":\\?")[^"\\]*)i, '\1[FILTERED]').
119
+ gsub(%r((cvv2\\?":\\?")\d+[^"\\]*)i, '\1[FILTERED]').
120
+ gsub(%r((cvv2\\?":)null), '\1[BLANK]').
121
+ gsub(%r((cvv2\\?":\\?")\\?"), '\1[BLANK]"').
122
+ gsub(%r((cvv2\\?":\\?")\s+), '\1[BLANK]')
123
+ end
124
+
125
+ private
126
+
127
+ def create_post_for_auth_or_purchase(money, creditcard, options)
128
+ post = {}
129
+ post[:amount] = amount(money)
130
+ post[:method] = 'card'
131
+ post[:description] = options[:description]
132
+ post[:order_id] = options[:order_id]
133
+ post[:device_session_id] = options[:device_session_id]
134
+ post[:currency] = (options[:currency] || currency(money)).upcase
135
+ post[:use_card_points] = options[:use_card_points] if options[:use_card_points]
136
+ post[:payment_plan] = { payments: options[:payments] } if options[:payments]
137
+ add_creditcard(post, creditcard, options)
138
+ post
139
+ end
140
+
141
+ def add_creditcard(post, creditcard, options)
142
+ if creditcard.kind_of?(String)
143
+ post[:source_id] = creditcard
144
+ elsif creditcard.respond_to?(:number)
145
+ card = {
146
+ card_number: creditcard.number,
147
+ expiration_month: sprintf('%02d', creditcard.month),
148
+ expiration_year: creditcard.year.to_s[-2, 2],
149
+ cvv2: creditcard.verification_value,
150
+ holder_name: creditcard.name
151
+ }
152
+ add_address(card, options)
153
+ add_customer_data(post, creditcard, options)
154
+ post[:card] = card
155
+ end
156
+ end
157
+
158
+ def add_customer_data(post, creditcard, options)
159
+ if options[:email]
160
+ customer = {
161
+ name: creditcard.name || options[:name],
162
+ email: options[:email]
163
+ }
164
+ post[:customer] = customer
165
+ end
166
+ post
167
+ end
168
+
169
+ def add_address(card, options)
170
+ return unless card.kind_of?(Hash)
171
+
172
+ if address = (options[:billing_address] || options[:address])
173
+ card[:address] = {
174
+ line1: address[:address1],
175
+ line2: address[:address2],
176
+ line3: address[:company],
177
+ city: address[:city],
178
+ postal_code: address[:zip],
179
+ state: address[:state],
180
+ country_code: address[:country]
181
+ }
182
+ end
183
+ end
184
+
185
+ def headers(options = {})
186
+ {
187
+ 'Content-Type' => 'application/json',
188
+ 'Authorization' => 'Basic ' + Base64.strict_encode64(@api_key.to_s + ':').strip,
189
+ 'User-Agent' => "Openpay/v1 ActiveMerchantBindings/#{ActiveMerchant::VERSION}",
190
+ 'X-Openpay-Client-User-Agent' => user_agent
191
+ }
192
+ end
193
+
194
+ def parse(body)
195
+ return {} unless body
196
+
197
+ JSON.parse(body)
198
+ end
199
+
200
+ def commit(method, resource, parameters, options = {})
201
+ response = http_request(method, resource, parameters, options)
202
+ success = !error?(response)
203
+
204
+ Response.new(success,
205
+ (success ? response['error_code'] : response['description']),
206
+ response,
207
+ test: test?,
208
+ authorization: response['id'])
209
+ end
210
+
211
+ def http_request(method, resource, parameters = {}, options = {})
212
+ url = gateway_url(options) + @merchant_id + '/' + resource
213
+ raw_response = nil
214
+ begin
215
+ raw_response = ssl_request(method, url, (parameters ? parameters.to_json : nil), headers(options))
216
+ parse(raw_response)
217
+ rescue ResponseError => e
218
+ raw_response = e.response.body
219
+ response_error(raw_response)
220
+ rescue JSON::ParserError
221
+ json_error(raw_response)
222
+ end
223
+ end
224
+
225
+ def error?(response)
226
+ response['error_code'] && !response['error_code'].blank?
227
+ end
228
+
229
+ def response_error(raw_response)
230
+ parse(raw_response)
231
+ rescue JSON::ParserError
232
+ json_error(raw_response)
233
+ end
234
+
235
+ def json_error(raw_response)
236
+ msg = 'Invalid response received from the Openpay API. Please contact soporte@openpay.mx if you continue to receive this message.'
237
+ msg += " (The raw response returned by the API was #{raw_response.inspect})"
238
+ {
239
+ 'category' => 'request',
240
+ 'error_code' => '9999',
241
+ 'description' => msg
242
+ }
243
+ end
244
+ end
245
+ end
246
+ end