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,163 @@
1
+ require 'nokogiri'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ class NcrSecurePayGateway < Gateway
6
+ self.test_url = 'https://testbox.monetra.com:8665/'
7
+ self.live_url = 'https://portal.ncrsecurepay.com:8444/'
8
+
9
+ self.supported_countries = ['US']
10
+ self.default_currency = 'USD'
11
+ self.supported_cardtypes = %i[visa master american_express discover]
12
+
13
+ self.homepage_url = 'http://www.ncrretailonline.com'
14
+ self.display_name = 'NCR Secure Pay'
15
+
16
+ def initialize(options = {})
17
+ requires!(options, :username, :password)
18
+ super
19
+ end
20
+
21
+ def purchase(money, payment, options = {})
22
+ post = {}
23
+ add_invoice(post, money, options)
24
+ add_payment(post, payment)
25
+ add_address(post, payment, options)
26
+
27
+ commit('sale', post)
28
+ end
29
+
30
+ def authorize(money, payment, options = {})
31
+ post = {}
32
+ add_invoice(post, money, options)
33
+ add_payment(post, payment)
34
+ add_address(post, payment, options)
35
+
36
+ commit('preauth', post)
37
+ end
38
+
39
+ def capture(money, authorization, options = {})
40
+ post = {}
41
+ add_reference(post, authorization)
42
+ add_invoice(post, money, options)
43
+
44
+ commit('preauthcomplete', post)
45
+ end
46
+
47
+ def refund(money, authorization, options = {})
48
+ post = {}
49
+ add_reference(post, authorization)
50
+ add_invoice(post, money, options)
51
+
52
+ commit('credit', post)
53
+ end
54
+
55
+ def void(authorization, options = {})
56
+ post = {}
57
+ add_reference(post, authorization)
58
+ commit('void', post)
59
+ end
60
+
61
+ def verify(credit_card, options = {})
62
+ MultiResponse.run(:use_first_response) do |r|
63
+ r.process { authorize(100, credit_card, options) }
64
+ r.process(:ignore_result) { void(r.authorization, options) }
65
+ end
66
+ end
67
+
68
+ def supports_scrubbing?
69
+ true
70
+ end
71
+
72
+ def scrub(transcript)
73
+ transcript.gsub(%r((<password>)[^<]*(</password>))i, '\1[FILTERED]\2').
74
+ gsub(%r((<account>)[^<]*(</account>))i, '\1[FILTERED]\2').
75
+ gsub(%r((<cv>)[^<]*(</cv>))i, '\1[FILTERED]\2')
76
+ end
77
+
78
+ private
79
+
80
+ def add_reference(post, reference)
81
+ post[:ttid] = reference
82
+ end
83
+
84
+ def add_address(post, payment, options)
85
+ address = options[:billing_address] || options[:address]
86
+ post[:zip] = address[:zip]
87
+ post[:street] = address[:address1]
88
+ end
89
+
90
+ def add_invoice(post, money, options)
91
+ post[:amount] = amount(money)
92
+ post[:currency] = (options[:currency] || currency(money))
93
+ post[:descmerch] = options[:merchant] if options[:merchant]
94
+ post[:ordernum] = options[:order_id] if options[:order_id]
95
+ post[:comments] = options[:description] if options[:description]
96
+ end
97
+
98
+ def add_payment(post, payment)
99
+ post[:cardholdername] = payment.name
100
+ post[:account] = payment.number
101
+ post[:cv] = payment.verification_value
102
+ post[:expdate] = expdate(payment)
103
+ end
104
+
105
+ def parse(body)
106
+ doc = Nokogiri::XML(body)
107
+ doc.remove_namespaces!
108
+ response = doc.xpath('/MonetraResp/Resp')[0]
109
+ resp_params = {}
110
+
111
+ response.elements.each do |node|
112
+ resp_params[node.name.downcase.to_sym] = node.text
113
+ end
114
+ resp_params
115
+ end
116
+
117
+ def commit(action, parameters)
118
+ url = (test? ? test_url : live_url)
119
+ response = parse(ssl_post(url, request_body(action, parameters)))
120
+
121
+ Response.new(
122
+ success_from(response),
123
+ message_from(response),
124
+ response,
125
+ authorization: authorization_from(response),
126
+ test: test?,
127
+ error_code: error_code_from(response)
128
+ )
129
+ end
130
+
131
+ def success_from(response)
132
+ response[:code] == 'AUTH'
133
+ end
134
+
135
+ def message_from(response)
136
+ response[:verbiage]
137
+ end
138
+
139
+ def authorization_from(response)
140
+ response[:ttid]
141
+ end
142
+
143
+ def request_body(action, parameters = {})
144
+ Nokogiri::XML::Builder.new(encoding: 'utf-8') do |xml|
145
+ xml.MonetraTrans do
146
+ xml.Trans(identifier: parameters.delete(:identifier) || '1') do
147
+ xml.username(options[:username])
148
+ xml.password(options[:password])
149
+ xml.action(action)
150
+ parameters.each do |name, value|
151
+ xml.send(name, value)
152
+ end
153
+ end
154
+ end
155
+ end.to_xml
156
+ end
157
+
158
+ def error_code_from(response)
159
+ response[:msoft_code] || response[:phard_code] unless success_from(response)
160
+ end
161
+ end
162
+ end
163
+ end
@@ -0,0 +1,198 @@
1
+ module ActiveMerchant
2
+ module Billing
3
+ # Gateway for netregistry.com.au.
4
+ #
5
+ # Note that NetRegistry itself uses gateway service providers. At the
6
+ # time of this writing, there are at least two (Quest and Ingenico).
7
+ # This module has only been tested with Quest.
8
+ #
9
+ # Also note that NetRegistry does not offer a test mode, nor does it
10
+ # have support for the authorize/capture/void functionality by default
11
+ # (you may arrange for this as described in "Programming for
12
+ # NetRegistry's E-commerce Gateway." [http://rubyurl.com/hNG]), and no
13
+ # #void functionality is documented. As a result, the #authorize and
14
+ # #capture have not yet been tested through a live gateway, and #void
15
+ # will raise an error.
16
+ #
17
+ # If you have this functionality enabled, please consider contributing
18
+ # to ActiveMerchant by writing tests/code for these methods, and
19
+ # submitting a patch.
20
+ #
21
+ # In addition to the standard ActiveMerchant functionality, the
22
+ # response will contain a 'receipt' parameter
23
+ # (response.params['receipt']) if a receipt was issued by the gateway.
24
+ class NetRegistryGateway < Gateway
25
+ self.live_url = self.test_url = 'https://paygate.ssllock.net/external2.pl'
26
+
27
+ FILTERED_PARAMS = %w[card_no card_expiry receipt_array]
28
+
29
+ self.supported_countries = ['AU']
30
+
31
+ # Note that support for Diners, Amex, and JCB require extra
32
+ # steps in setting up your account, as detailed in
33
+ # "Programming for NetRegistry's E-commerce Gateway."
34
+ # [http://rubyurl.com/hNG]
35
+ self.supported_cardtypes = %i[visa master diners_club american_express jcb]
36
+ self.display_name = 'NetRegistry'
37
+ self.homepage_url = 'http://www.netregistry.com.au'
38
+
39
+ TRANSACTIONS = {
40
+ authorization: 'preauth',
41
+ purchase: 'purchase',
42
+ capture: 'completion',
43
+ status: 'status',
44
+ refund: 'refund'
45
+ }
46
+
47
+ # Create a new NetRegistry gateway.
48
+ #
49
+ # Options :login and :password must be given.
50
+ def initialize(options = {})
51
+ requires!(options, :login, :password)
52
+ super
53
+ end
54
+
55
+ # Note that #authorize and #capture only work if your account
56
+ # vendor is St George, and if your account has been setup as
57
+ # described in "Programming for NetRegistry's E-commerce
58
+ # Gateway." [http://rubyurl.com/hNG]
59
+ def authorize(money, credit_card, options = {})
60
+ params = {
61
+ 'AMOUNT' => amount(money),
62
+ 'CCNUM' => credit_card.number,
63
+ 'CCEXP' => expiry(credit_card)
64
+ }
65
+ add_request_details(params, options)
66
+ commit(:authorization, params)
67
+ end
68
+
69
+ # Note that #authorize and #capture only work if your account
70
+ # vendor is St George, and if your account has been setup as
71
+ # described in "Programming for NetRegistry's E-commerce
72
+ # Gateway." [http://rubyurl.com/hNG]
73
+ def capture(money, authorization, options = {})
74
+ requires!(options, :credit_card)
75
+ credit_card = options[:credit_card]
76
+
77
+ params = {
78
+ 'PREAUTHNUM' => authorization,
79
+ 'AMOUNT' => amount(money),
80
+ 'CCNUM' => credit_card.number,
81
+ 'CCEXP' => expiry(credit_card)
82
+ }
83
+ add_request_details(params, options)
84
+ commit(:capture, params)
85
+ end
86
+
87
+ def purchase(money, credit_card, options = {})
88
+ params = {
89
+ 'AMOUNT' => amount(money),
90
+ 'CCNUM' => credit_card.number,
91
+ 'CCEXP' => expiry(credit_card)
92
+ }
93
+ add_request_details(params, options)
94
+ commit(:purchase, params)
95
+ end
96
+
97
+ def refund(money, identification, options = {})
98
+ params = {
99
+ 'AMOUNT' => amount(money),
100
+ 'TXNREF' => identification
101
+ }
102
+ add_request_details(params, options)
103
+ commit(:refund, params)
104
+ end
105
+
106
+ def credit(money, identification, options = {})
107
+ ActiveMerchant.deprecated CREDIT_DEPRECATION_MESSAGE
108
+ refund(money, identification, options)
109
+ end
110
+
111
+ # Specific to NetRegistry.
112
+ #
113
+ # Run a 'status' command. This lets you view the status of a
114
+ # completed transaction.
115
+ #
116
+ def status(identification)
117
+ params = {
118
+ 'TXNREF' => identification
119
+ }
120
+
121
+ commit(:status, params)
122
+ end
123
+
124
+ private
125
+
126
+ def add_request_details(params, options)
127
+ params['COMMENT'] = options[:description] unless options[:description].blank?
128
+ end
129
+
130
+ # Return the expiry for the given creditcard in the required
131
+ # format for a command.
132
+ def expiry(credit_card)
133
+ month = format(credit_card.month, :two_digits)
134
+ year = format(credit_card.year, :two_digits)
135
+ "#{month}/#{year}"
136
+ end
137
+
138
+ # Post the a request with the given parameters and return the
139
+ # response object.
140
+ #
141
+ # Login and password are added automatically, and the comment is
142
+ # omitted if nil.
143
+ def commit(action, params)
144
+ # get gateway response
145
+ response = parse(ssl_post(self.live_url, post_data(action, params)))
146
+
147
+ Response.new(response['status'] == 'approved', message_from(response), response,
148
+ authorization: authorization_from(response, action))
149
+ end
150
+
151
+ def post_data(action, params)
152
+ params['COMMAND'] = TRANSACTIONS[action]
153
+ params['LOGIN'] = "#{@options[:login]}/#{@options[:password]}"
154
+ escape_uri(params.map { |k, v| "#{k}=#{v}" }.join('&'))
155
+ end
156
+
157
+ # The upstream is picky and so we can't use CGI.escape like we want to
158
+ def escape_uri(uri)
159
+ URI::DEFAULT_PARSER.escape(uri)
160
+ end
161
+
162
+ def parse(response)
163
+ params = {}
164
+
165
+ lines = response.split("\n")
166
+
167
+ # Just incase there is no real response returned
168
+ params['status'] = lines[0]
169
+ params['response_text'] = lines[1]
170
+
171
+ started = false
172
+ lines.each do |line|
173
+ if started
174
+ key, val = line.chomp.split(/=/, 2)
175
+ params[key] = val unless FILTERED_PARAMS.include?(key)
176
+ end
177
+
178
+ started = line.chomp =~ /^\.$/ unless started
179
+ end
180
+
181
+ params
182
+ end
183
+
184
+ def message_from(response)
185
+ response['response_text']
186
+ end
187
+
188
+ def authorization_from(response, command)
189
+ case command
190
+ when :purchase
191
+ response['txn_ref']
192
+ when :authorization
193
+ response['transaction_no']
194
+ end
195
+ end
196
+ end
197
+ end
198
+ end
@@ -0,0 +1,180 @@
1
+ require 'digest/md5'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ class NetaxeptGateway < Gateway
6
+ self.test_url = 'https://epayment-test.bbs.no/'
7
+ self.live_url = 'https://epayment.bbs.no/'
8
+
9
+ # The countries the gateway supports merchants from as 2 digit ISO country codes
10
+ self.supported_countries = %w[NO DK SE FI]
11
+
12
+ # The card types supported by the payment gateway
13
+ self.supported_cardtypes = %i[visa master american_express]
14
+
15
+ # The homepage URL of the gateway
16
+ self.homepage_url = 'http://www.betalingsterminal.no/Netthandel-forside/'
17
+
18
+ # The name of the gateway
19
+ self.display_name = 'BBS Netaxept'
20
+
21
+ self.money_format = :cents
22
+
23
+ self.default_currency = 'NOK'
24
+
25
+ def initialize(options = {})
26
+ requires!(options, :login, :password)
27
+ super
28
+ end
29
+
30
+ def purchase(money, creditcard, options = {})
31
+ requires!(options, :order_id)
32
+
33
+ MultiResponse.run do |r|
34
+ r.process { authorize(money, creditcard, options) }
35
+ r.process { capture(money, r.authorization, options) }
36
+ end
37
+ end
38
+
39
+ def authorize(money, creditcard, options = {})
40
+ requires!(options, :order_id)
41
+
42
+ MultiResponse.run do |r|
43
+ r.process { setup_transaction(money, options) }
44
+ r.process { add_and_auth_credit_card(r.authorization, creditcard, options) }
45
+ r.process { query_transaction(r.authorization, options) }
46
+ end
47
+ end
48
+
49
+ def capture(money, authorization, options = {})
50
+ post = {}
51
+ add_credentials(post, options)
52
+ add_authorization(post, authorization, money)
53
+ post[:operation] = 'Capture'
54
+ commit('Netaxept/process.aspx', post)
55
+ end
56
+
57
+ def refund(money, authorization, options = {})
58
+ post = {}
59
+ add_credentials(post, options)
60
+ add_authorization(post, authorization, money)
61
+ post[:operation] = 'Credit'
62
+ commit('Netaxept/process.aspx', post)
63
+ end
64
+
65
+ def void(authorization, options = {})
66
+ post = {}
67
+ add_credentials(post, options)
68
+ add_authorization(post, authorization)
69
+ post[:operation] = 'Annul'
70
+ commit('Netaxept/process.aspx', post)
71
+ end
72
+
73
+ private
74
+
75
+ def setup_transaction(money, options)
76
+ post = {}
77
+ add_credentials(post, options)
78
+ add_order(post, money, options)
79
+ commit('Netaxept/Register.aspx', post)
80
+ end
81
+
82
+ def add_and_auth_credit_card(authorization, creditcard, options)
83
+ post = {}
84
+ add_credentials(post, options, false)
85
+ add_authorization(post, authorization)
86
+ add_creditcard(post, creditcard)
87
+ commit('terminal/default.aspx', post, false)
88
+ end
89
+
90
+ def query_transaction(authorization, options)
91
+ post = {}
92
+ add_credentials(post, options)
93
+ add_authorization(post, authorization)
94
+ commit('Netaxept/query.aspx', post)
95
+ end
96
+
97
+ def add_credentials(post, options, secure = true)
98
+ post[:merchantId] = @options[:login]
99
+ post[:token] = @options[:password] if secure
100
+ end
101
+
102
+ def add_authorization(post, authorization, money = nil)
103
+ post[:transactionId] = authorization
104
+ post[:transactionAmount] = amount(money) if money
105
+ end
106
+
107
+ def add_order(post, money, options)
108
+ post[:serviceType] = 'M'
109
+ post[:orderNumber] = options[:order_id]
110
+ post[:amount] = amount(money)
111
+ post[:currencyCode] = (options[:currency] || currency(money))
112
+ post[:autoAuth] = 'true'
113
+ end
114
+
115
+ def add_creditcard(post, options)
116
+ post[:pan] = options.number
117
+ post[:expiryDate] = format(options.month, :two_digits) + format(options.year, :two_digits)
118
+ post[:securityCode] = options.verification_value
119
+ end
120
+
121
+ def commit(path, parameters, xml = true)
122
+ raw = parse(ssl_get(build_url(path, parameters)), xml)
123
+
124
+ success = false
125
+ authorization = (raw['TransactionId'] || parameters[:transactionId])
126
+ if /Exception|Error/.match?(raw[:container])
127
+ message = (raw['Message'] || raw['Error']['Message'])
128
+ elsif raw['Error'] && !raw['Error'].empty?
129
+ message = (raw['Error']['ResponseText'] || raw['Error']['ResponseCode'])
130
+ else
131
+ message = (raw['ResponseText'] || raw['ResponseCode'] || 'OK')
132
+ success = true
133
+ end
134
+
135
+ Response.new(
136
+ success,
137
+ message,
138
+ raw,
139
+ test: test?,
140
+ authorization: authorization
141
+ )
142
+ end
143
+
144
+ def parse(result, expects_xml = true)
145
+ if expects_xml
146
+ doc = REXML::Document.new(result)
147
+ extract_xml(doc.root).merge(container: doc.root.name)
148
+ else
149
+ { result: result }
150
+ end
151
+ end
152
+
153
+ def extract_xml(element)
154
+ if element.has_elements?
155
+ hash = {}
156
+ element.elements.each do |e|
157
+ hash[e.name] = extract_xml(e)
158
+ end
159
+ hash
160
+ else
161
+ element.text
162
+ end
163
+ end
164
+
165
+ def build_url(base, parameters = nil)
166
+ url = (test? ? self.test_url : self.live_url).dup
167
+ url << base
168
+ if parameters
169
+ url << '?'
170
+ url << encode(parameters)
171
+ end
172
+ url
173
+ end
174
+
175
+ def encode(hash)
176
+ hash.collect { |(k, v)| "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}" }.join('&')
177
+ end
178
+ end
179
+ end
180
+ end