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,448 @@
1
+ require 'rexml/document'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ # Initialization Options
6
+ # :login Your store number
7
+ # :pem The text of your linkpoint PEM file. Note
8
+ # this is not the path to file, but its
9
+ # contents. If you are only using one PEM
10
+ # file on your site you can declare it
11
+ # globally and then you won't need to
12
+ # include this option
13
+ #
14
+ #
15
+ # A valid store number is required. Unfortunately, with LinkPoint
16
+ # YOU CAN'T JUST USE ANY OLD STORE NUMBER. Also, you can't just
17
+ # generate your own PEM file. You'll need to use a special PEM file
18
+ # provided by LinkPoint.
19
+ #
20
+ # Go to http://www.linkpoint.com/support/sup_teststore.asp to set up
21
+ # a test account and obtain your PEM file.
22
+ #
23
+ # Declaring PEM file Globally
24
+ # ActiveMerchant::Billing::LinkpointGateway.pem_file = File.read( File.dirname(__FILE__) + '/../mycert.pem' )
25
+ #
26
+ #
27
+ # Valid Order Options
28
+ # :result =>
29
+ # LIVE Production mode
30
+ # GOOD Approved response in test mode
31
+ # DECLINE Declined response in test mode
32
+ # DUPLICATE Duplicate response in test mode
33
+ #
34
+ # :ponumber Order number
35
+ #
36
+ # :transactionorigin => Source of the transaction
37
+ # ECI Email or Internet
38
+ # MAIL Mail order
39
+ # MOTO Mail order/Telephone
40
+ # TELEPHONE Telephone
41
+ # RETAIL Face-to-face
42
+ #
43
+ # :ordertype =>
44
+ # SALE Real live sale
45
+ # PREAUTH Authorize only
46
+ # POSTAUTH Forced Ticket or Ticket Only transaction
47
+ # VOID
48
+ # CREDIT
49
+ # CALCSHIPPING For shipping charges calculations
50
+ # CALCTAX For sales tax calculations
51
+ #
52
+ # Recurring Options
53
+ # :action =>
54
+ # SUBMIT
55
+ # MODIFY
56
+ # CANCEL
57
+ #
58
+ # :installments Identifies how many recurring payments to charge the customer
59
+ # :startdate Date to begin charging the recurring payments. Format: YYYYMMDD or "immediate"
60
+ # :periodicity =>
61
+ # MONTHLY
62
+ # BIMONTHLY
63
+ # WEEKLY
64
+ # BIWEEKLY
65
+ # YEARLY
66
+ # DAILY
67
+ # :threshold Tells how many times to retry the transaction (if it fails) before contacting the merchant.
68
+ # :comments Uh... comments
69
+ #
70
+ #
71
+ # For reference:
72
+ #
73
+ # https://www.linkpointcentral.com/lpc/docs/Help/APIHelp/lpintguide.htm
74
+ #
75
+ # Entities = {
76
+ # :payment => [:subtotal, :tax, :vattax, :shipping, :chargetotal],
77
+ # :billing => [:name, :address1, :address2, :city, :state, :zip, :country, :email, :phone, :fax, :addrnum],
78
+ # :shipping => [:name, :address1, :address2, :city, :state, :zip, :country, :weight, :items, :carrier, :total],
79
+ # :creditcard => [:cardnumber, :cardexpmonth, :cardexpyear, :cvmvalue, :track],
80
+ # :telecheck => [:routing, :account, :checknumber, :bankname, :bankstate, :dl, :dlstate, :void, :accounttype, :ssn],
81
+ # :transactiondetails => [:transactionorigin, :oid, :ponumber, :taxexempt, :terminaltype, :ip, :reference_number, :recurring, :tdate],
82
+ # :periodic => [:action, :installments, :threshold, :startdate, :periodicity, :comments],
83
+ # :notes => [:comments, :referred]
84
+ # :items => [:item => [:price, :quantity, :description, :id, :options => [:option => [:name, :value]]]]
85
+ # }
86
+ #
87
+ #
88
+ # LinkPoint's Items entity is an optional entity that can be attached to orders.
89
+ # It is entered as :line_items to be consistent with the CyberSource implementation
90
+ #
91
+ # The line_item hash goes in the options hash and should look like
92
+ #
93
+ # :line_items => [
94
+ # {
95
+ # :id => '123456',
96
+ # :description => 'Logo T-Shirt',
97
+ # :price => '12.00',
98
+ # :quantity => '1',
99
+ # :options => [
100
+ # {
101
+ # :name => 'Color',
102
+ # :value => 'Red'
103
+ # },
104
+ # {
105
+ # :name => 'Size',
106
+ # :value => 'XL'
107
+ # }
108
+ # ]
109
+ # },
110
+ # {
111
+ # :id => '111',
112
+ # :description => 'keychain',
113
+ # :price => '3.00',
114
+ # :quantity => '1'
115
+ # }
116
+ # ]
117
+ # This functionality is only supported by this particular gateway may
118
+ # be changed at any time
119
+ #
120
+ class LinkpointGateway < Gateway
121
+ # Your global PEM file. This will be assigned to you by linkpoint
122
+ #
123
+ # Example:
124
+ #
125
+ # ActiveMerchant::Billing::LinkpointGateway.pem_file = File.read( File.dirname(__FILE__) + '/../mycert.pem' )
126
+ #
127
+ cattr_accessor :pem_file
128
+
129
+ self.test_url = 'https://staging.linkpt.net:1129/'
130
+ self.live_url = 'https://secure.linkpt.net:1129/'
131
+
132
+ self.supported_countries = ['US']
133
+ self.supported_cardtypes = %i[visa master american_express discover jcb diners_club]
134
+ self.homepage_url = 'http://www.linkpoint.com/'
135
+ self.display_name = 'LinkPoint'
136
+
137
+ def initialize(options = {})
138
+ requires!(options, :login)
139
+
140
+ @options = {
141
+ result: 'LIVE',
142
+ pem: LinkpointGateway.pem_file
143
+ }.update(options)
144
+
145
+ raise ArgumentError, "You need to pass in your pem file using the :pem parameter or set it globally using ActiveMerchant::Billing::LinkpointGateway.pem_file = File.read( File.dirname(__FILE__) + '/../mycert.pem' ) or similar" if @options[:pem].blank?
146
+
147
+ @options[:pem].strip!
148
+ end
149
+
150
+ # Send a purchase request with periodic options
151
+ # Recurring Options
152
+ # :action =>
153
+ # SUBMIT
154
+ # MODIFY
155
+ # CANCEL
156
+ #
157
+ # :installments Identifies how many recurring payments to charge the customer
158
+ # :startdate Date to begin charging the recurring payments. Format: YYYYMMDD or "immediate"
159
+ # :periodicity =>
160
+ # :monthly
161
+ # :bimonthly
162
+ # :weekly
163
+ # :biweekly
164
+ # :yearly
165
+ # :daily
166
+ # :threshold Tells how many times to retry the transaction (if it fails) before contacting the merchant.
167
+ # :comments Uh... comments
168
+ #
169
+ def recurring(money, creditcard, options = {})
170
+ ActiveMerchant.deprecated RECURRING_DEPRECATION_MESSAGE
171
+
172
+ requires!(options, %i[periodicity bimonthly monthly biweekly weekly yearly daily], :installments, :order_id)
173
+
174
+ options.update(
175
+ ordertype: 'SALE',
176
+ action: options[:action] || 'SUBMIT',
177
+ installments: options[:installments] || 12,
178
+ startdate: options[:startdate] || 'immediate',
179
+ periodicity: options[:periodicity].to_s || 'monthly',
180
+ comments: options[:comments] || nil,
181
+ threshold: options[:threshold] || 3
182
+ )
183
+ commit(money, creditcard, options)
184
+ end
185
+
186
+ # Buy the thing
187
+ def purchase(money, creditcard, options = {})
188
+ requires!(options, :order_id)
189
+ options.update(
190
+ ordertype: 'SALE'
191
+ )
192
+ commit(money, creditcard, options)
193
+ end
194
+
195
+ #
196
+ # Authorize the transaction
197
+ #
198
+ # Reserves the funds on the customer's credit card, but does not charge the card.
199
+ #
200
+ def authorize(money, creditcard, options = {})
201
+ requires!(options, :order_id)
202
+ options.update(
203
+ ordertype: 'PREAUTH'
204
+ )
205
+ commit(money, creditcard, options)
206
+ end
207
+
208
+ #
209
+ # Post an authorization.
210
+ #
211
+ # Captures the funds from an authorized transaction.
212
+ # Order_id must be a valid order id from a prior authorized transaction.
213
+ #
214
+ def capture(money, authorization, options = {})
215
+ options.update(
216
+ order_id: authorization,
217
+ ordertype: 'POSTAUTH'
218
+ )
219
+ commit(money, nil, options)
220
+ end
221
+
222
+ # Void a previous transaction
223
+ def void(identification, options = {})
224
+ options.update(
225
+ order_id: identification,
226
+ ordertype: 'VOID'
227
+ )
228
+ commit(nil, nil, options)
229
+ end
230
+
231
+ #
232
+ # Refund an order
233
+ #
234
+ # identification must be a valid order id previously submitted by SALE
235
+ #
236
+ def refund(money, identification, options = {})
237
+ options.update(
238
+ ordertype: 'CREDIT',
239
+ order_id: identification
240
+ )
241
+ commit(money, nil, options)
242
+ end
243
+
244
+ def credit(money, identification, options = {})
245
+ ActiveMerchant.deprecated CREDIT_DEPRECATION_MESSAGE
246
+ refund(money, identification, options)
247
+ end
248
+
249
+ def supports_scrubbing
250
+ true
251
+ end
252
+
253
+ def scrub(transcript)
254
+ transcript.
255
+ gsub(%r((Authorization: Basic )\w+), '\1[FILTERED]').
256
+ gsub(%r((<cardnumber>)\d+(</cardnumber>))i, '\1[FILTERED]\2').
257
+ gsub(%r((<cvmvalue>)\d+(</cvmvalue>))i, '\1[FILTERED]\2')
258
+ end
259
+
260
+ private
261
+
262
+ # Commit the transaction by posting the XML file to the LinkPoint server
263
+ def commit(money, creditcard, options = {})
264
+ response = parse(ssl_post(test? ? self.test_url : self.live_url, post_data(money, creditcard, options)))
265
+
266
+ Response.new(successful?(response), response[:message], response,
267
+ test: test?,
268
+ authorization: response[:ordernum],
269
+ avs_result: { code: response[:avs].to_s[2, 1] },
270
+ cvv_result: response[:avs].to_s[3, 1])
271
+ end
272
+
273
+ def successful?(response)
274
+ response[:approved] == 'APPROVED'
275
+ end
276
+
277
+ # Build the XML file
278
+ def post_data(money, creditcard, options)
279
+ params = parameters(money, creditcard, options)
280
+
281
+ xml = REXML::Document.new
282
+ order = xml.add_element('order')
283
+
284
+ # Merchant Info
285
+ merchantinfo = order.add_element('merchantinfo')
286
+ merchantinfo.add_element('configfile').text = @options[:login]
287
+
288
+ # Loop over the params hash to construct the XML string
289
+ for key, value in params
290
+ elem = order.add_element(key.to_s)
291
+ if key == :items
292
+ build_items(elem, value)
293
+ else
294
+ for k, _ in params[key]
295
+ elem.add_element(k.to_s).text = params[key][k].to_s if params[key][k]
296
+ end
297
+ end
298
+ # Linkpoint doesn't understand empty elements:
299
+ order.delete(elem) if elem.size == 0
300
+ end
301
+ return xml.to_s
302
+ end
303
+
304
+ # adds LinkPoint's Items entity to the XML. Called from post_data
305
+ def build_items(element, items)
306
+ for item in items
307
+ item_element = element.add_element('item')
308
+ for key, value in item
309
+ if key == :options
310
+ options_element = item_element.add_element('options')
311
+ for option in value
312
+ opt_element = options_element.add_element('option')
313
+ opt_element.add_element('name').text = option[:name] unless option[:name].blank?
314
+ opt_element.add_element('value').text = option[:value] unless option[:value].blank?
315
+ end
316
+ else
317
+ item_element.add_element(key.to_s).text = item[key].to_s unless item[key].blank?
318
+ end
319
+ end
320
+ end
321
+ end
322
+
323
+ # Set up the parameters hash just once so we don't have to do it
324
+ # for every action.
325
+ def parameters(money, creditcard, options = {})
326
+ params = {
327
+ payment: {
328
+ subtotal: amount(options[:subtotal]),
329
+ tax: amount(options[:tax]),
330
+ vattax: amount(options[:vattax]),
331
+ shipping: amount(options[:shipping]),
332
+ chargetotal: amount(money)
333
+ },
334
+ transactiondetails: {
335
+ transactionorigin: options[:transactionorigin] || 'ECI',
336
+ oid: options[:order_id],
337
+ ponumber: options[:ponumber],
338
+ taxexempt: options[:taxexempt],
339
+ terminaltype: options[:terminaltype],
340
+ ip: options[:ip],
341
+ reference_number: options[:reference_number],
342
+ recurring: options[:recurring] || 'NO', # DO NOT USE if you are using the periodic billing option.
343
+ tdate: options[:tdate]
344
+ },
345
+ orderoptions: {
346
+ ordertype: options[:ordertype],
347
+ result: @options[:result]
348
+ },
349
+ periodic: {
350
+ action: options[:action],
351
+ installments: options[:installments],
352
+ threshold: options[:threshold],
353
+ startdate: options[:startdate],
354
+ periodicity: options[:periodicity],
355
+ comments: options[:comments]
356
+ },
357
+ telecheck: {
358
+ routing: options[:telecheck_routing],
359
+ account: options[:telecheck_account],
360
+ checknumber: options[:telecheck_checknumber],
361
+ bankname: options[:telecheck_bankname],
362
+ dl: options[:telecheck_dl],
363
+ dlstate: options[:telecheck_dlstate],
364
+ void: options[:telecheck_void],
365
+ accounttype: options[:telecheck_accounttype],
366
+ ssn: options[:telecheck_ssn]
367
+ }
368
+ }
369
+
370
+ if creditcard
371
+ params[:creditcard] = {
372
+ cardnumber: creditcard.number,
373
+ cardexpmonth: creditcard.month,
374
+ cardexpyear: format_creditcard_expiry_year(creditcard.year),
375
+ track: nil
376
+ }
377
+
378
+ if creditcard.verification_value?
379
+ params[:creditcard][:cvmvalue] = creditcard.verification_value
380
+ params[:creditcard][:cvmindicator] = 'provided'
381
+ else
382
+ params[:creditcard][:cvmindicator] = 'not_provided'
383
+ end
384
+ end
385
+
386
+ if billing_address = options[:billing_address] || options[:address]
387
+
388
+ params[:billing] = {}
389
+ params[:billing][:name] = billing_address[:name] || (creditcard ? creditcard.name : nil)
390
+ params[:billing][:address1] = billing_address[:address1] unless billing_address[:address1].blank?
391
+ params[:billing][:address2] = billing_address[:address2] unless billing_address[:address2].blank?
392
+ params[:billing][:city] = billing_address[:city] unless billing_address[:city].blank?
393
+ params[:billing][:state] = billing_address[:state] unless billing_address[:state].blank?
394
+ params[:billing][:zip] = billing_address[:zip] unless billing_address[:zip].blank?
395
+ params[:billing][:country] = billing_address[:country] unless billing_address[:country].blank?
396
+ params[:billing][:company] = billing_address[:company] unless billing_address[:company].blank?
397
+ params[:billing][:phone] = billing_address[:phone] unless billing_address[:phone].blank?
398
+ params[:billing][:email] = options[:email] unless options[:email].blank?
399
+ end
400
+
401
+ if shipping_address = options[:shipping_address]
402
+
403
+ params[:shipping] = {}
404
+ params[:shipping][:name] = shipping_address[:name] || (creditcard ? creditcard.name : nil)
405
+ params[:shipping][:address1] = shipping_address[:address1] unless shipping_address[:address1].blank?
406
+ params[:shipping][:address2] = shipping_address[:address2] unless shipping_address[:address2].blank?
407
+ params[:shipping][:city] = shipping_address[:city] unless shipping_address[:city].blank?
408
+ params[:shipping][:state] = shipping_address[:state] unless shipping_address[:state].blank?
409
+ params[:shipping][:zip] = shipping_address[:zip] unless shipping_address[:zip].blank?
410
+ params[:shipping][:country] = shipping_address[:country] unless shipping_address[:country].blank?
411
+ end
412
+
413
+ params[:items] = options[:line_items] if options[:line_items]
414
+
415
+ return params
416
+ end
417
+
418
+ def parse(xml)
419
+ # For reference, a typical response...
420
+ # <r_csp></r_csp>
421
+ # <r_time></r_time>
422
+ # <r_ref></r_ref>
423
+ # <r_error></r_error>
424
+ # <r_ordernum></r_ordernum>
425
+ # <r_message>This is a test transaction and will not show up in the Reports</r_message>
426
+ # <r_code></r_code>
427
+ # <r_tdate>Thu Feb 2 15:40:21 2006</r_tdate>
428
+ # <r_score></r_score>
429
+ # <r_authresponse></r_authresponse>
430
+ # <r_approved>APPROVED</r_approved>
431
+ # <r_avs></r_avs>
432
+
433
+ response = { message: 'Global Error Receipt', complete: false }
434
+
435
+ xml = REXML::Document.new("<response>#{xml}</response>")
436
+ xml.root&.elements&.each do |node|
437
+ response[node.name.downcase.sub(/^r_/, '').to_sym] = normalize(node.text)
438
+ end
439
+
440
+ response
441
+ end
442
+
443
+ def format_creditcard_expiry_year(year)
444
+ sprintf('%.4i', year)[-2..-1]
445
+ end
446
+ end
447
+ end
448
+ end