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,331 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ class OptimalPaymentGateway < Gateway
4
+ self.test_url = 'https://webservices.test.optimalpayments.com/creditcardWS/CreditCardServlet/v1'
5
+ self.live_url = 'https://webservices.optimalpayments.com/creditcardWS/CreditCardServlet/v1'
6
+
7
+ # The countries the gateway supports merchants from as 2 digit ISO country codes
8
+ self.supported_countries = %w[CA US GB AU AT BE BG HR CY CZ DK
9
+ EE FI DE GR HU IE IT LV LT LU MT
10
+ NL NO PL PT RO SK SI ES SE CH]
11
+
12
+ # The card types supported by the payment gateway
13
+ self.supported_cardtypes = %i[visa master american_express discover diners_club]
14
+
15
+ # The homepage URL of the gateway
16
+ self.homepage_url = 'http://www.optimalpayments.com/'
17
+
18
+ # The name of the gateway
19
+ self.display_name = 'Optimal Payments'
20
+
21
+ def initialize(options = {})
22
+ if options[:login]
23
+ ActiveMerchant.deprecated("The 'login' option is deprecated in favor of 'store_id' and will be removed in a future version.")
24
+ options[:store_id] = options[:login]
25
+ end
26
+
27
+ if options[:account]
28
+ ActiveMerchant.deprecated("The 'account' option is deprecated in favor of 'account_number' and will be removed in a future version.")
29
+ options[:account_number] = options[:account]
30
+ end
31
+
32
+ requires!(options, :account_number, :store_id, :password)
33
+ super
34
+ end
35
+
36
+ def authorize(money, card_or_auth, options = {})
37
+ parse_card_or_auth(card_or_auth, options)
38
+ commit("cc#{@stored_data}Authorize", money, options)
39
+ end
40
+ alias stored_authorize authorize # back-compat
41
+
42
+ def purchase(money, card_or_auth, options = {})
43
+ parse_card_or_auth(card_or_auth, options)
44
+ commit("cc#{@stored_data}Purchase", money, options)
45
+ end
46
+ alias stored_purchase purchase # back-compat
47
+
48
+ def refund(money, authorization, options = {})
49
+ options[:confirmationNumber] = authorization
50
+ commit('ccCredit', money, options)
51
+ end
52
+
53
+ def void(authorization, options = {})
54
+ options[:confirmationNumber] = authorization
55
+ commit('ccAuthorizeReversal', nil, options)
56
+ end
57
+
58
+ def capture(money, authorization, options = {})
59
+ options[:confirmationNumber] = authorization
60
+ commit('ccSettlement', money, options)
61
+ end
62
+
63
+ def verify(credit_card, options = {})
64
+ parse_card_or_auth(credit_card, options)
65
+ commit('ccVerification', 0, options)
66
+ end
67
+
68
+ def store(credit_card, options = {})
69
+ verify(credit_card, options)
70
+ end
71
+
72
+ def supports_scrubbing?
73
+ true
74
+ end
75
+
76
+ def scrub(transcript)
77
+ transcript.
78
+ gsub(%r((%3CstorePwd%3E).*(%3C(%2F|/)storePwd%3E))i, '\1[FILTERED]\2').
79
+ gsub(%r((%3CcardNum%3E)\d*(%3C(%2F|/)cardNum%3E))i, '\1[FILTERED]\2').
80
+ gsub(%r((%3Ccvd%3E)\d*(%3C(%2F|/)cvd%3E))i, '\1[FILTERED]\2')
81
+ end
82
+
83
+ private
84
+
85
+ def parse_card_or_auth(card_or_auth, options)
86
+ if card_or_auth.respond_to?(:number)
87
+ @credit_card = card_or_auth
88
+ @stored_data = ''
89
+ else
90
+ options[:confirmationNumber] = card_or_auth
91
+ @stored_data = 'StoredData'
92
+ end
93
+ end
94
+
95
+ def parse(body)
96
+ REXML::Document.new(body || '')
97
+ end
98
+
99
+ def commit(action, money, post)
100
+ post[:order_id] ||= 'order_id'
101
+
102
+ xml =
103
+ case action
104
+ when 'ccAuthorize', 'ccPurchase', 'ccVerification'
105
+ cc_auth_request(money, post)
106
+ when 'ccCredit', 'ccSettlement'
107
+ cc_post_auth_request(money, post)
108
+ when 'ccStoredDataAuthorize', 'ccStoredDataPurchase'
109
+ cc_stored_data_request(money, post)
110
+ when 'ccAuthorizeReversal'
111
+ cc_auth_reversal_request(post)
112
+ # when 'ccCancelSettle', 'ccCancelCredit', 'ccCancelPayment'
113
+ # cc_cancel_request(money, post)
114
+ # when 'ccPayment'
115
+ # cc_payment_request(money, post)
116
+ # when 'ccAuthenticate'
117
+ # cc_authenticate_request(money, post)
118
+ else
119
+ raise 'Unknown Action'
120
+ end
121
+ txnRequest = escape_uri(xml)
122
+ response = parse(ssl_post(test? ? self.test_url : self.live_url, "txnMode=#{action}&txnRequest=#{txnRequest}"))
123
+
124
+ Response.new(successful?(response), message_from(response), hash_from_xml(response),
125
+ test: test?,
126
+ authorization: authorization_from(response),
127
+ avs_result: { code: avs_result_from(response) },
128
+ cvv_result: cvv_result_from(response))
129
+ end
130
+
131
+ # The upstream is picky and so we can't use CGI.escape like we want to
132
+ def escape_uri(uri)
133
+ URI::DEFAULT_PARSER.escape(uri)
134
+ end
135
+
136
+ def successful?(response)
137
+ REXML::XPath.first(response, '//decision').text == 'ACCEPTED' rescue false
138
+ end
139
+
140
+ def message_from(response)
141
+ REXML::XPath.each(response, '//detail') do |detail|
142
+ return detail.elements['value'].text if detail.is_a?(REXML::Element) && detail.elements['tag'].text == 'InternalResponseDescription'
143
+ end
144
+ nil
145
+ end
146
+
147
+ def authorization_from(response)
148
+ get_text_from_document(response, '//confirmationNumber')
149
+ end
150
+
151
+ def avs_result_from(response)
152
+ get_text_from_document(response, '//avsResponse')
153
+ end
154
+
155
+ def cvv_result_from(response)
156
+ get_text_from_document(response, '//cvdResponse')
157
+ end
158
+
159
+ def hash_from_xml(response)
160
+ hsh = {}
161
+ %w(confirmationNumber authCode
162
+ decision code description
163
+ actionCode avsResponse cvdResponse
164
+ txnTime duplicateFound).each do |tag|
165
+ node = REXML::XPath.first(response, "//#{tag}")
166
+ hsh[tag] = node.text if node
167
+ end
168
+ REXML::XPath.each(response, '//detail') do |detail|
169
+ next unless detail.is_a?(REXML::Element)
170
+
171
+ tag = detail.elements['tag'].text
172
+ value = detail.elements['value'].text
173
+ hsh[tag] = value
174
+ end
175
+ hsh
176
+ end
177
+
178
+ def xml_document(root_tag)
179
+ xml = Builder::XmlMarkup.new indent: 2
180
+ xml.tag!(root_tag, schema) do
181
+ yield xml
182
+ end
183
+ xml.target!
184
+ end
185
+
186
+ def get_text_from_document(document, node)
187
+ node = REXML::XPath.first(document, node)
188
+ node&.text
189
+ end
190
+
191
+ def cc_auth_request(money, opts)
192
+ xml_document('ccAuthRequestV1') do |xml|
193
+ build_merchant_account(xml)
194
+ xml.merchantRefNum opts[:order_id]
195
+ xml.amount(money / 100.0)
196
+ build_card(xml, opts)
197
+ build_billing_details(xml, opts)
198
+ build_shipping_details(xml, opts)
199
+ xml.customerIP opts[:ip] if opts[:ip]
200
+ end
201
+ end
202
+
203
+ def cc_auth_reversal_request(opts)
204
+ xml_document('ccAuthReversalRequestV1') do |xml|
205
+ build_merchant_account(xml)
206
+ xml.confirmationNumber opts[:confirmationNumber]
207
+ xml.merchantRefNum opts[:order_id]
208
+ end
209
+ end
210
+
211
+ def cc_post_auth_request(money, opts)
212
+ xml_document('ccPostAuthRequestV1') do |xml|
213
+ build_merchant_account(xml)
214
+ xml.confirmationNumber opts[:confirmationNumber]
215
+ xml.merchantRefNum opts[:order_id]
216
+ xml.amount(money / 100.0)
217
+ end
218
+ end
219
+
220
+ def cc_stored_data_request(money, opts)
221
+ xml_document('ccStoredDataRequestV1') do |xml|
222
+ build_merchant_account(xml)
223
+ xml.merchantRefNum opts[:order_id]
224
+ xml.confirmationNumber opts[:confirmationNumber]
225
+ xml.amount(money / 100.0)
226
+ end
227
+ end
228
+
229
+ # untested
230
+ #
231
+ # def cc_cancel_request(opts)
232
+ # xml_document('ccCancelRequestV1') do |xml|
233
+ # build_merchant_account(xml)
234
+ # xml.confirmationNumber opts[:confirmationNumber]
235
+ # end
236
+ # end
237
+ #
238
+ # def cc_payment_request(money, opts)
239
+ # xml_document('ccPaymentRequestV1') do |xml|
240
+ # build_merchant_account(xml)
241
+ # xml.merchantRefNum opts[:order_id]
242
+ # xml.amount(money/100.0)
243
+ # build_card(xml, opts)
244
+ # build_billing_details(xml, opts)
245
+ # end
246
+ # end
247
+ #
248
+ # def cc_authenticate_request(opts)
249
+ # xml_document('ccAuthenticateRequestV1') do |xml|
250
+ # build_merchant_account(xml)
251
+ # xml.confirmationNumber opts[:confirmationNumber]
252
+ # xml.paymentResponse 'myPaymentResponse'
253
+ # end
254
+ # end
255
+
256
+ def schema
257
+ { 'xmlns' => 'http://www.optimalpayments.com/creditcard/xmlschema/v1',
258
+ 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
259
+ 'xsi:schemaLocation' => 'http://www.optimalpayments.com/creditcard/xmlschema/v1' }
260
+ end
261
+
262
+ def build_merchant_account(xml)
263
+ xml.tag! 'merchantAccount' do
264
+ xml.tag! 'accountNum', @options[:account_number]
265
+ xml.tag! 'storeID', @options[:store_id]
266
+ xml.tag! 'storePwd', @options[:password]
267
+ end
268
+ end
269
+
270
+ def build_card(xml, opts)
271
+ xml.tag! 'card' do
272
+ xml.tag! 'cardNum', @credit_card.number
273
+ xml.tag! 'cardExpiry' do
274
+ xml.tag! 'month', @credit_card.month
275
+ xml.tag! 'year', @credit_card.year
276
+ end
277
+ if brand = card_type(@credit_card.brand)
278
+ xml.tag! 'cardType', brand
279
+ end
280
+ if @credit_card.verification_value?
281
+ xml.tag! 'cvdIndicator', '1' # Value Provided
282
+ xml.tag! 'cvd', @credit_card.verification_value
283
+ else
284
+ xml.tag! 'cvdIndicator', '0'
285
+ end
286
+ end
287
+ end
288
+
289
+ def build_billing_details(xml, opts)
290
+ xml.tag! 'billingDetails' do
291
+ xml.tag! 'cardPayMethod', 'WEB'
292
+ build_address(xml, opts[:billing_address]) if opts[:billing_address]
293
+ xml.tag! 'email', opts[:email] if opts[:email]
294
+ end
295
+ end
296
+
297
+ def build_shipping_details(xml, opts)
298
+ xml.tag! 'shippingDetails' do
299
+ build_address(xml, opts[:shipping_address])
300
+ xml.tag! 'email', opts[:email] if opts[:email]
301
+ end if opts[:shipping_address].present?
302
+ end
303
+
304
+ def build_address(xml, addr)
305
+ if addr[:name]
306
+ first_name, last_name = split_names(addr[:name])
307
+ xml.tag! 'firstName', first_name
308
+ xml.tag! 'lastName', last_name
309
+ end
310
+ xml.tag! 'street', addr[:address1] if addr[:address1].present?
311
+ xml.tag! 'street2', addr[:address2] if addr[:address2].present?
312
+ xml.tag! 'city', addr[:city] if addr[:city].present?
313
+ if addr[:state].present?
314
+ state_tag = %w(US CA).include?(addr[:country]) ? 'state' : 'region'
315
+ xml.tag! state_tag, addr[:state]
316
+ end
317
+ xml.tag! 'country', addr[:country] if addr[:country].present?
318
+ xml.tag! 'zip', addr[:zip] if addr[:zip].present?
319
+ xml.tag! 'phone', addr[:phone] if addr[:phone].present?
320
+ end
321
+
322
+ def card_type(key)
323
+ { 'visa' => 'VI',
324
+ 'master' => 'MC',
325
+ 'american_express' => 'AM',
326
+ 'discover' => 'DI',
327
+ 'diners_club' => 'DC' }[key]
328
+ end
329
+ end
330
+ end
331
+ end
@@ -0,0 +1,45 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ class OrbitalSoftDescriptors < Model
4
+ PHONE_FORMAT_1 = /\A\d{3}-\d{3}-\d{4}\z/
5
+ PHONE_FORMAT_2 = /\A\d{3}-\w{7}\z/
6
+
7
+ # ==== Tampa PNS Soft Descriptors
8
+ # The support for Soft Descriptors via the PNS Host is only for customers processing through Chase
9
+ # Paymentech Canada.
10
+
11
+ # Unlike Salem, the only value that gets passed on the cardholder statement is the Merchant Name field.
12
+ # And for these customers, it is a maximum of 25 bytes of data.
13
+ #
14
+ # All other Soft Descriptor fields can optionally be sent, but will not be submitted to the settlement host
15
+ # and will not display on the cardholder statement.
16
+
17
+ attr_accessor :merchant_name, :product_description, :merchant_city, :merchant_phone, :merchant_url, :merchant_email
18
+
19
+ def initialize(options = {})
20
+ self.merchant_name = options[:merchant_name]
21
+ self.merchant_city = options[:merchant_city]
22
+ self.merchant_phone = options[:merchant_phone]
23
+ self.merchant_url = options[:merchant_url]
24
+ self.merchant_email = options[:merchant_email]
25
+ end
26
+
27
+ def validate
28
+ errors = []
29
+
30
+ errors << [:merchant_name, 'is required'] if self.merchant_name.blank?
31
+ errors << [:merchant_name, 'is required to be 25 bytes or less'] if self.merchant_name.bytesize > 25
32
+
33
+ errors << [:merchant_phone, 'is required to follow "NNN-NNN-NNNN" or "NNN-AAAAAAA" format'] if !empty?(self.merchant_phone) && !self.merchant_phone.match(PHONE_FORMAT_1) && !self.merchant_phone.match(PHONE_FORMAT_2)
34
+
35
+ %i[merchant_email merchant_url].each do |attr|
36
+ unless self.send(attr).blank?
37
+ errors << [attr, 'is required to be 13 bytes or less'] if self.send(attr).bytesize > 13
38
+ end
39
+ end
40
+
41
+ errors_hash(errors)
42
+ end
43
+ end
44
+ end
45
+ end