tomriley-active_merchant 1.4.2.3

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 (278) hide show
  1. data/CHANGELOG +442 -0
  2. data/CONTRIBUTERS +102 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README +134 -0
  5. data/Rakefile +153 -0
  6. data/active_merchant.gemspec +15 -0
  7. data/gem-public_cert.pem +20 -0
  8. data/init.rb +4 -0
  9. data/lib/active_merchant/billing/avs_result.rb +98 -0
  10. data/lib/active_merchant/billing/base.rb +57 -0
  11. data/lib/active_merchant/billing/check.rb +68 -0
  12. data/lib/active_merchant/billing/credit_card.rb +159 -0
  13. data/lib/active_merchant/billing/credit_card_formatting.rb +21 -0
  14. data/lib/active_merchant/billing/credit_card_methods.rb +125 -0
  15. data/lib/active_merchant/billing/cvv_result.rb +38 -0
  16. data/lib/active_merchant/billing/expiry_date.rb +28 -0
  17. data/lib/active_merchant/billing/gateway.rb +158 -0
  18. data/lib/active_merchant/billing/gateways/authorize_net.rb +646 -0
  19. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +702 -0
  20. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +233 -0
  21. data/lib/active_merchant/billing/gateways/beanstream.rb +102 -0
  22. data/lib/active_merchant/billing/gateways/beanstream_interac.rb +54 -0
  23. data/lib/active_merchant/billing/gateways/bogus.rb +98 -0
  24. data/lib/active_merchant/billing/gateways/braintree.rb +17 -0
  25. data/lib/active_merchant/billing/gateways/card_stream.rb +230 -0
  26. data/lib/active_merchant/billing/gateways/cyber_source.rb +406 -0
  27. data/lib/active_merchant/billing/gateways/data_cash.rb +595 -0
  28. data/lib/active_merchant/billing/gateways/efsnet.rb +229 -0
  29. data/lib/active_merchant/billing/gateways/eway.rb +272 -0
  30. data/lib/active_merchant/billing/gateways/exact.rb +222 -0
  31. data/lib/active_merchant/billing/gateways/instapay.rb +164 -0
  32. data/lib/active_merchant/billing/gateways/linkpoint.rb +396 -0
  33. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +154 -0
  34. data/lib/active_merchant/billing/gateways/modern_payments.rb +36 -0
  35. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +214 -0
  36. data/lib/active_merchant/billing/gateways/moneris.rb +205 -0
  37. data/lib/active_merchant/billing/gateways/net_registry.rb +189 -0
  38. data/lib/active_merchant/billing/gateways/netbilling.rb +168 -0
  39. data/lib/active_merchant/billing/gateways/pay_junction.rb +392 -0
  40. data/lib/active_merchant/billing/gateways/pay_secure.rb +120 -0
  41. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +207 -0
  42. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +39 -0
  43. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +13 -0
  44. data/lib/active_merchant/billing/gateways/payflow.rb +236 -0
  45. data/lib/active_merchant/billing/gateways/payflow_express.rb +138 -0
  46. data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +15 -0
  47. data/lib/active_merchant/billing/gateways/payflow_uk.rb +21 -0
  48. data/lib/active_merchant/billing/gateways/payment_express.rb +230 -0
  49. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +325 -0
  50. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +38 -0
  51. data/lib/active_merchant/billing/gateways/paypal.rb +108 -0
  52. data/lib/active_merchant/billing/gateways/paypal_ca.rb +13 -0
  53. data/lib/active_merchant/billing/gateways/paypal_express.rb +130 -0
  54. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +20 -0
  55. data/lib/active_merchant/billing/gateways/plugnpay.rb +292 -0
  56. data/lib/active_merchant/billing/gateways/protx.rb +349 -0
  57. data/lib/active_merchant/billing/gateways/psigate.rb +214 -0
  58. data/lib/active_merchant/billing/gateways/psl_card.rb +306 -0
  59. data/lib/active_merchant/billing/gateways/quickpay.rb +213 -0
  60. data/lib/active_merchant/billing/gateways/realex.rb +200 -0
  61. data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +88 -0
  62. data/lib/active_merchant/billing/gateways/sage/sage_core.rb +110 -0
  63. data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +97 -0
  64. data/lib/active_merchant/billing/gateways/sage.rb +146 -0
  65. data/lib/active_merchant/billing/gateways/secure_pay.rb +31 -0
  66. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +157 -0
  67. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +113 -0
  68. data/lib/active_merchant/billing/gateways/skip_jack.rb +442 -0
  69. data/lib/active_merchant/billing/gateways/smart_ps.rb +254 -0
  70. data/lib/active_merchant/billing/gateways/trans_first.rb +127 -0
  71. data/lib/active_merchant/billing/gateways/transax.rb +26 -0
  72. data/lib/active_merchant/billing/gateways/trust_commerce.rb +418 -0
  73. data/lib/active_merchant/billing/gateways/usa_epay.rb +194 -0
  74. data/lib/active_merchant/billing/gateways/verifi.rb +228 -0
  75. data/lib/active_merchant/billing/gateways/viaklix.rb +165 -0
  76. data/lib/active_merchant/billing/gateways/wirecard.rb +318 -0
  77. data/lib/active_merchant/billing/gateways.rb +3 -0
  78. data/lib/active_merchant/billing/integrations/action_view_helper.rb +79 -0
  79. data/lib/active_merchant/billing/integrations/bogus/helper.rb +17 -0
  80. data/lib/active_merchant/billing/integrations/bogus/notification.rb +11 -0
  81. data/lib/active_merchant/billing/integrations/bogus/return.rb +10 -0
  82. data/lib/active_merchant/billing/integrations/bogus.rb +22 -0
  83. data/lib/active_merchant/billing/integrations/chronopay/helper.rb +81 -0
  84. data/lib/active_merchant/billing/integrations/chronopay/notification.rb +156 -0
  85. data/lib/active_merchant/billing/integrations/chronopay/return.rb +10 -0
  86. data/lib/active_merchant/billing/integrations/chronopay.rb +22 -0
  87. data/lib/active_merchant/billing/integrations/gestpay/common.rb +42 -0
  88. data/lib/active_merchant/billing/integrations/gestpay/helper.rb +70 -0
  89. data/lib/active_merchant/billing/integrations/gestpay/notification.rb +83 -0
  90. data/lib/active_merchant/billing/integrations/gestpay/return.rb +10 -0
  91. data/lib/active_merchant/billing/integrations/gestpay.rb +26 -0
  92. data/lib/active_merchant/billing/integrations/helper.rb +93 -0
  93. data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +58 -0
  94. data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +59 -0
  95. data/lib/active_merchant/billing/integrations/hi_trust/return.rb +67 -0
  96. data/lib/active_merchant/billing/integrations/hi_trust.rb +26 -0
  97. data/lib/active_merchant/billing/integrations/nochex/helper.rb +68 -0
  98. data/lib/active_merchant/billing/integrations/nochex/notification.rb +94 -0
  99. data/lib/active_merchant/billing/integrations/nochex/return.rb +10 -0
  100. data/lib/active_merchant/billing/integrations/nochex.rb +87 -0
  101. data/lib/active_merchant/billing/integrations/notification.rb +62 -0
  102. data/lib/active_merchant/billing/integrations/paypal/helper.rb +118 -0
  103. data/lib/active_merchant/billing/integrations/paypal/notification.rb +154 -0
  104. data/lib/active_merchant/billing/integrations/paypal/return.rb +10 -0
  105. data/lib/active_merchant/billing/integrations/paypal.rb +40 -0
  106. data/lib/active_merchant/billing/integrations/quickpay/helper.rb +72 -0
  107. data/lib/active_merchant/billing/integrations/quickpay/notification.rb +74 -0
  108. data/lib/active_merchant/billing/integrations/quickpay.rb +18 -0
  109. data/lib/active_merchant/billing/integrations/return.rb +35 -0
  110. data/lib/active_merchant/billing/integrations/two_checkout/helper.rb +59 -0
  111. data/lib/active_merchant/billing/integrations/two_checkout/notification.rb +114 -0
  112. data/lib/active_merchant/billing/integrations/two_checkout/return.rb +17 -0
  113. data/lib/active_merchant/billing/integrations/two_checkout.rb +23 -0
  114. data/lib/active_merchant/billing/integrations.rb +22 -0
  115. data/lib/active_merchant/billing/response.rb +32 -0
  116. data/lib/active_merchant/lib/connection.rb +170 -0
  117. data/lib/active_merchant/lib/country.rb +319 -0
  118. data/lib/active_merchant/lib/error.rb +4 -0
  119. data/lib/active_merchant/lib/post_data.rb +22 -0
  120. data/lib/active_merchant/lib/posts_data.rb +47 -0
  121. data/lib/active_merchant/lib/requires_parameters.rb +16 -0
  122. data/lib/active_merchant/lib/utils.rb +18 -0
  123. data/lib/active_merchant/lib/validateable.rb +76 -0
  124. data/lib/active_merchant.rb +60 -0
  125. data/lib/certs/cacert.pem +7815 -0
  126. data/lib/support/gateway_support.rb +58 -0
  127. data/script/destroy +14 -0
  128. data/script/generate +14 -0
  129. data/test/fixtures.yml +330 -0
  130. data/test/remote/gateways/remote_authorize_net_cim_test.rb +459 -0
  131. data/test/remote/gateways/remote_authorize_net_test.rb +145 -0
  132. data/test/remote/gateways/remote_beanstream_interac_test.rb +53 -0
  133. data/test/remote/gateways/remote_beanstream_test.rb +150 -0
  134. data/test/remote/gateways/remote_braintree_test.rb +154 -0
  135. data/test/remote/gateways/remote_card_stream_test.rb +148 -0
  136. data/test/remote/gateways/remote_cyber_source_test.rb +144 -0
  137. data/test/remote/gateways/remote_data_cash_test.rb +357 -0
  138. data/test/remote/gateways/remote_efsnet_test.rb +81 -0
  139. data/test/remote/gateways/remote_eway_test.rb +74 -0
  140. data/test/remote/gateways/remote_exact_test.rb +60 -0
  141. data/test/remote/gateways/remote_instapay_test.rb +61 -0
  142. data/test/remote/gateways/remote_linkpoint_test.rb +112 -0
  143. data/test/remote/gateways/remote_merchant_e_solutions_test.rb +173 -0
  144. data/test/remote/gateways/remote_modern_payments_cim_test.rb +58 -0
  145. data/test/remote/gateways/remote_modern_payments_test.rb +43 -0
  146. data/test/remote/gateways/remote_moneris_test.rb +82 -0
  147. data/test/remote/gateways/remote_net_registry_test.rb +85 -0
  148. data/test/remote/gateways/remote_netbilling_test.rb +70 -0
  149. data/test/remote/gateways/remote_pay_junction_test.rb +143 -0
  150. data/test/remote/gateways/remote_pay_secure_test.rb +39 -0
  151. data/test/remote/gateways/remote_payflow_express_test.rb +50 -0
  152. data/test/remote/gateways/remote_payflow_test.rb +237 -0
  153. data/test/remote/gateways/remote_payflow_uk_test.rb +173 -0
  154. data/test/remote/gateways/remote_payment_express_test.rb +136 -0
  155. data/test/remote/gateways/remote_paypal_express_test.rb +49 -0
  156. data/test/remote/gateways/remote_paypal_test.rb +167 -0
  157. data/test/remote/gateways/remote_plugnpay_test.rb +72 -0
  158. data/test/remote/gateways/remote_protx_test.rb +219 -0
  159. data/test/remote/gateways/remote_psigate_test.rb +50 -0
  160. data/test/remote/gateways/remote_psl_card_test.rb +125 -0
  161. data/test/remote/gateways/remote_quickpay_test.rb +190 -0
  162. data/test/remote/gateways/remote_realex_test.rb +224 -0
  163. data/test/remote/gateways/remote_sage_bankcard_test.rb +109 -0
  164. data/test/remote/gateways/remote_sage_test.rb +87 -0
  165. data/test/remote/gateways/remote_sage_virtual_check_test.rb +62 -0
  166. data/test/remote/gateways/remote_secure_pay_au_test.rb +40 -0
  167. data/test/remote/gateways/remote_secure_pay_tech_test.rb +37 -0
  168. data/test/remote/gateways/remote_secure_pay_test.rb +28 -0
  169. data/test/remote/gateways/remote_skipjack_test.rb +105 -0
  170. data/test/remote/gateways/remote_trans_first_test.rb +34 -0
  171. data/test/remote/gateways/remote_transax_test.rb +112 -0
  172. data/test/remote/gateways/remote_trust_commerce_test.rb +152 -0
  173. data/test/remote/gateways/remote_usa_epay_test.rb +46 -0
  174. data/test/remote/gateways/remote_verifi_test.rb +107 -0
  175. data/test/remote/gateways/remote_viaklix_test.rb +43 -0
  176. data/test/remote/gateways/remote_wirecard_test.rb +111 -0
  177. data/test/remote/integrations/remote_gestpay_integration_test.rb +37 -0
  178. data/test/remote/integrations/remote_paypal_integration_test.rb +26 -0
  179. data/test/test_helper.rb +182 -0
  180. data/test/unit/avs_result_test.rb +59 -0
  181. data/test/unit/base_test.rb +55 -0
  182. data/test/unit/check_test.rb +88 -0
  183. data/test/unit/connection_test.rb +129 -0
  184. data/test/unit/country_code_test.rb +33 -0
  185. data/test/unit/country_test.rb +64 -0
  186. data/test/unit/credit_card_formatting_test.rb +19 -0
  187. data/test/unit/credit_card_methods_test.rb +170 -0
  188. data/test/unit/credit_card_test.rb +318 -0
  189. data/test/unit/cvv_result_test.rb +33 -0
  190. data/test/unit/expiry_date_test.rb +21 -0
  191. data/test/unit/gateways/authorize_net_cim_test.rb +638 -0
  192. data/test/unit/gateways/authorize_net_test.rb +290 -0
  193. data/test/unit/gateways/beanstream_interac_test.rb +51 -0
  194. data/test/unit/gateways/beanstream_test.rb +108 -0
  195. data/test/unit/gateways/bogus_test.rb +46 -0
  196. data/test/unit/gateways/braintree_test.rb +126 -0
  197. data/test/unit/gateways/card_stream_test.rb +90 -0
  198. data/test/unit/gateways/cyber_source_test.rb +188 -0
  199. data/test/unit/gateways/data_cash_test.rb +133 -0
  200. data/test/unit/gateways/efsnet_test.rb +123 -0
  201. data/test/unit/gateways/eway_test.rb +118 -0
  202. data/test/unit/gateways/exact_test.rb +156 -0
  203. data/test/unit/gateways/gateway_test.rb +48 -0
  204. data/test/unit/gateways/instapay_test.rb +102 -0
  205. data/test/unit/gateways/linkpoint_test.rb +167 -0
  206. data/test/unit/gateways/merchant_e_solutions_test.rb +169 -0
  207. data/test/unit/gateways/modern_payments_cim_test.rb +171 -0
  208. data/test/unit/gateways/moneris_test.rb +158 -0
  209. data/test/unit/gateways/net_registry_test.rb +416 -0
  210. data/test/unit/gateways/netbilling_test.rb +54 -0
  211. data/test/unit/gateways/pay_junction_test.rb +123 -0
  212. data/test/unit/gateways/pay_secure_test.rb +71 -0
  213. data/test/unit/gateways/payflow_express_test.rb +173 -0
  214. data/test/unit/gateways/payflow_express_uk_test.rb +86 -0
  215. data/test/unit/gateways/payflow_test.rb +305 -0
  216. data/test/unit/gateways/payflow_uk_test.rb +30 -0
  217. data/test/unit/gateways/payment_express_test.rb +195 -0
  218. data/test/unit/gateways/paypal_express_test.rb +382 -0
  219. data/test/unit/gateways/paypal_test.rb +520 -0
  220. data/test/unit/gateways/plugnpay_test.rb +86 -0
  221. data/test/unit/gateways/protx_test.rb +139 -0
  222. data/test/unit/gateways/psigate_test.rb +169 -0
  223. data/test/unit/gateways/psl_card_test.rb +64 -0
  224. data/test/unit/gateways/quickpay_test.rb +112 -0
  225. data/test/unit/gateways/realex_test.rb +151 -0
  226. data/test/unit/gateways/sage_bankcard_test.rb +162 -0
  227. data/test/unit/gateways/sage_virtual_check_test.rb +71 -0
  228. data/test/unit/gateways/secure_pay_au_test.rb +207 -0
  229. data/test/unit/gateways/secure_pay_tech_test.rb +44 -0
  230. data/test/unit/gateways/secure_pay_test.rb +87 -0
  231. data/test/unit/gateways/skip_jack_test.rb +133 -0
  232. data/test/unit/gateways/trans_first_test.rb +112 -0
  233. data/test/unit/gateways/trust_commerce_test.rb +90 -0
  234. data/test/unit/gateways/usa_epay_test.rb +128 -0
  235. data/test/unit/gateways/verifi_test.rb +96 -0
  236. data/test/unit/gateways/viaklix_test.rb +78 -0
  237. data/test/unit/gateways/wirecard_test.rb +250 -0
  238. data/test/unit/generators/test_gateway_generator.rb +46 -0
  239. data/test/unit/generators/test_generator_helper.rb +20 -0
  240. data/test/unit/generators/test_integration_generator.rb +53 -0
  241. data/test/unit/integrations/action_view_helper_test.rb +50 -0
  242. data/test/unit/integrations/bogus_module_test.rb +20 -0
  243. data/test/unit/integrations/chronopay_module_test.rb +13 -0
  244. data/test/unit/integrations/gestpay_module_test.rb +14 -0
  245. data/test/unit/integrations/helpers/bogus_helper_test.rb +28 -0
  246. data/test/unit/integrations/helpers/chronopay_helper_test.rb +67 -0
  247. data/test/unit/integrations/helpers/gestpay_helper_test.rb +100 -0
  248. data/test/unit/integrations/helpers/hi_trust_helper_test.rb +16 -0
  249. data/test/unit/integrations/helpers/nochex_helper_test.rb +53 -0
  250. data/test/unit/integrations/helpers/paypal_helper_test.rb +162 -0
  251. data/test/unit/integrations/helpers/quickpay_helper_test.rb +40 -0
  252. data/test/unit/integrations/helpers/two_checkout_helper_test.rb +92 -0
  253. data/test/unit/integrations/hi_trust_module_test.rb +13 -0
  254. data/test/unit/integrations/nochex_module_test.rb +13 -0
  255. data/test/unit/integrations/notifications/chronopay_notification_test.rb +66 -0
  256. data/test/unit/integrations/notifications/gestpay_notification_test.rb +60 -0
  257. data/test/unit/integrations/notifications/hi_trust_notification_test.rb +59 -0
  258. data/test/unit/integrations/notifications/nochex_notification_test.rb +51 -0
  259. data/test/unit/integrations/notifications/notification_test.rb +54 -0
  260. data/test/unit/integrations/notifications/paypal_notification_test.rb +85 -0
  261. data/test/unit/integrations/notifications/quickpay_notification_test.rb +69 -0
  262. data/test/unit/integrations/notifications/two_checkout_notification_test.rb +55 -0
  263. data/test/unit/integrations/paypal_module_test.rb +28 -0
  264. data/test/unit/integrations/quickpay_module_test.rb +9 -0
  265. data/test/unit/integrations/returns/chronopay_return_test.rb +11 -0
  266. data/test/unit/integrations/returns/gestpay_return_test.rb +10 -0
  267. data/test/unit/integrations/returns/hi_trust_return_test.rb +24 -0
  268. data/test/unit/integrations/returns/nochex_return_test.rb +10 -0
  269. data/test/unit/integrations/returns/paypal_return_test.rb +10 -0
  270. data/test/unit/integrations/returns/return_test.rb +11 -0
  271. data/test/unit/integrations/returns/two_checkout_return_test.rb +24 -0
  272. data/test/unit/integrations/two_checkout_module_test.rb +13 -0
  273. data/test/unit/post_data_test.rb +55 -0
  274. data/test/unit/posts_data_test.rb +48 -0
  275. data/test/unit/response_test.rb +28 -0
  276. data/test/unit/utils_test.rb +7 -0
  277. data/test/unit/validateable_test.rb +60 -0
  278. metadata +364 -0
@@ -0,0 +1,254 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'check.rb')
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ class SmartPs < Gateway #:nodoc:
6
+
7
+ ##
8
+ # This is the base gateway for processors who use the smartPS processing system
9
+
10
+ def initialize(options = {})
11
+ requires!(options, :login, :password)
12
+ @options = options
13
+ super
14
+ end
15
+
16
+ # Pass :store => true in the options to store the
17
+ # payment info at the gateway and get a generated
18
+ # customer_vault_id in the response.
19
+ # Pass :store => some_number_or_string to specify the
20
+ # customer_vault_id the gateway should use (make sure it's
21
+ # unique).
22
+ def authorize(money, creditcard, options = {})
23
+ post = {}
24
+ add_invoice(post, options)
25
+ add_payment_source(post, creditcard,options)
26
+ add_address(post, options[:billing_address]||options[:address])
27
+ add_address(post, options[:shipping_address],"shipping")
28
+ add_customer_data(post, options)
29
+
30
+ commit('auth', money, post)
31
+ end
32
+
33
+ def purchase(money, payment_source, options = {})
34
+ post = {}
35
+ add_invoice(post, options)
36
+ add_payment_source(post, payment_source, options)
37
+ add_address(post, options)
38
+ add_address(post, options[:shipping_address],"shipping")
39
+ add_customer_data(post, options)
40
+
41
+ commit('sale', money, post)
42
+ end
43
+
44
+ def capture(money, authorization, options = {})
45
+ post ={}
46
+ post[:transactionid] = authorization
47
+ commit('capture', money, post)
48
+ end
49
+
50
+ def void(authorization, options = {})
51
+ post ={}
52
+ post[:transactionid] = authorization
53
+ commit('void', nil, post)
54
+ end
55
+
56
+ def credit(money, payment_source, options = {})
57
+ post = {}
58
+ add_invoice(post, options)
59
+ add_payment_source(post, payment_source, options)
60
+ add_address(post, options)
61
+ add_customer_data(post, options)
62
+ add_sku(post,options)
63
+
64
+ commit('credit', money, post)
65
+ end
66
+
67
+ def refund(auth, options = {})
68
+ post = {}
69
+ add_transaction(post, auth)
70
+ commit('refund', options.delete(:amount), post)
71
+ end
72
+
73
+
74
+ # Update the values (such as CC expiration) stored at
75
+ # the gateway. The CC number must be supplied in the
76
+ # CreditCard object.
77
+ def update(vault_id, creditcard, options = {})
78
+ post = {}
79
+ post[:customer_vault] = "update_customer"
80
+ add_customer_vault_id(post, vault_id)
81
+ add_creditcard(post, creditcard, options)
82
+ add_address(post, options)
83
+ add_customer_data(post, options)
84
+
85
+ commit(nil, nil, post)
86
+ end
87
+
88
+ # Amend an existing transaction
89
+ def amend(auth, options = {})
90
+ post = {}
91
+ add_invoice(post, options)
92
+ add_transaction(post, auth)
93
+ commit('update', nil, post)
94
+ end
95
+
96
+
97
+ def delete(vault_id)
98
+ post = {}
99
+ post[:customer_vault] = "delete_customer"
100
+ add_customer_vault_id(post, vault_id)
101
+ commit(nil, nil, post)
102
+ end
103
+
104
+ # To match the other stored-value gateways, like TrustCommerce,
105
+ # store and unstore need to be defined
106
+ def store(payment_source, options = {})
107
+ post = {}
108
+ billing_id = options.delete(:billing_id).to_s || true
109
+ add_payment_source(post, payment_source, :store => billing_id)
110
+ add_address(post, options[:billing_address] || options[:address])
111
+ add_customer_data(post, options)
112
+ commit(nil, nil, post)
113
+ end
114
+
115
+ alias_method :unstore, :delete
116
+
117
+ private
118
+ def add_customer_data(post, options)
119
+ if options.has_key? :email
120
+ post[:email] = options[:email]
121
+ end
122
+
123
+ if options.has_key? :ip
124
+ post[:ipaddress] = options[:ip]
125
+ end
126
+ end
127
+
128
+ def add_address(post, address,prefix="")
129
+ prefix +="_" unless prefix.blank?
130
+ unless address.blank? or address.values.blank?
131
+ post[prefix+"address1"] = address[:address1].to_s
132
+ post[prefix+"address2"] = address[:address2].to_s unless address[:address2].blank?
133
+ post[prefix+"company"] = address[:company].to_s
134
+ post[prefix+"phone"] = address[:phone].to_s
135
+ post[prefix+"zip"] = address[:zip].to_s
136
+ post[prefix+"city"] = address[:city].to_s
137
+ post[prefix+"country"] = address[:country].to_s
138
+ post[prefix+"state"] = address[:state].blank? ? 'n/a' : address[:state]
139
+ end
140
+ end
141
+
142
+ def add_invoice(post, options)
143
+ post[:orderid] = options[:order_id].to_s.gsub(/[^\w.]/, '')
144
+ end
145
+
146
+ def add_payment_source(params, source, options={})
147
+ case determine_funding_source(source)
148
+ when :vault then add_customer_vault_id(params, source)
149
+ when :credit_card then add_creditcard(params, source, options)
150
+ when :check then add_check(params, source, options)
151
+ end
152
+ end
153
+
154
+ def add_customer_vault_id(params, vault_id)
155
+ params[:customer_vault_id] = vault_id
156
+ end
157
+
158
+ def add_creditcard(post, creditcard, options)
159
+ if options[:store]
160
+ post[:customer_vault] = "add_customer"
161
+ post[:customer_vault_id] = options[:store] unless options[:store] == true
162
+ end
163
+ post[:ccnumber] = creditcard.number
164
+ post[:cvv] = creditcard.verification_value if creditcard.verification_value?
165
+ post[:ccexp] = expdate(creditcard)
166
+ post[:firstname] = creditcard.first_name
167
+ post[:lastname] = creditcard.last_name
168
+ end
169
+
170
+ def add_check(post, check, options)
171
+ if options[:store]
172
+ post[:customer_vault] = "add_customer"
173
+ post[:customer_vault_id] = options[:store] unless options[:store] == true
174
+ end
175
+
176
+ post[:payment] = 'check' # Set transaction to ACH
177
+ post[:checkname] = check.name # The name on the customer's Checking Account
178
+ post[:checkaba] = check.routing_number # The customer's bank routing number
179
+ post[:checkaccount] = check.account_number # The customer's account number
180
+ post[:account_holder_type] = check.account_holder_type # The customer's type of ACH account
181
+ post[:account_type] = check.account_type # The customer's type of ACH account
182
+ end
183
+
184
+ def add_sku(post,options)
185
+ post["product_sku_#"] = options[:sku] || options["product_sku_#"]
186
+ end
187
+
188
+ def add_transaction(post, auth)
189
+ post[:transactionid] = auth
190
+ end
191
+
192
+ def parse(body)
193
+ results = {}
194
+ body.split(/&/).each do |pair|
195
+ key,val = pair.split(/=/)
196
+ results[key] = val
197
+ end
198
+
199
+ results
200
+ end
201
+
202
+ def commit(action, money, parameters)
203
+ parameters[:amount] = amount(money) if money
204
+ response = parse( ssl_post(api_url, post_data(action,parameters)) )
205
+ Response.new(response["response"] == "1", message_from(response), response,
206
+ :authorization => response["transactionid"],
207
+ :test => test?,
208
+ :cvv_result => response["cvvresponse"],
209
+ :avs_result => { :code => response["avsresponse"] }
210
+ )
211
+
212
+ end
213
+
214
+ def expdate(creditcard)
215
+ year = sprintf("%.04i", creditcard.year.to_i)
216
+ month = sprintf("%.02i", creditcard.month.to_i)
217
+
218
+ "#{month}#{year[-2..-1]}"
219
+ end
220
+
221
+
222
+ def message_from(response)
223
+ case response["responsetext"]
224
+ when "SUCCESS", "Approved", nil # This is dubious, but responses from UPDATE are nil.
225
+ "This transaction has been approved"
226
+ when "DECLINE"
227
+ "This transaction has been declined"
228
+ else
229
+ response["responsetext"]
230
+ end
231
+ end
232
+
233
+ def post_data(action, parameters = {})
234
+ post = {}
235
+ post[:username] = @options[:login]
236
+ post[:password] = @options[:password]
237
+ post[:type] = action if action
238
+
239
+ request = post.merge(parameters).map {|key,value| "#{key}=#{CGI.escape(value.to_s)}"}.join("&")
240
+ request
241
+ end
242
+
243
+ def determine_funding_source(source)
244
+ case
245
+ when source.is_a?(String) then :vault
246
+ when CreditCard.card_companies.keys.include?(card_brand(source)) then :credit_card
247
+ when card_brand(source) == 'check' then :check
248
+ else raise ArgumentError, "Unsupported funding source provided"
249
+ end
250
+ end
251
+ end
252
+ end
253
+ end
254
+
@@ -0,0 +1,127 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ class TransFirstGateway < Gateway
4
+ URL = 'https://webservices.primerchants.com/creditcard.asmx/CCSale'
5
+
6
+ self.supported_countries = ['US']
7
+ self.supported_cardtypes = [:visa, :master, :american_express, :discover]
8
+ self.homepage_url = 'http://www.transfirst.com/'
9
+ self.display_name = 'TransFirst'
10
+
11
+ UNUSED_FIELDS = %w(ECIValue UserId CAVVData TrackData POSInd EComInd MerchZIP MerchCustPNum MCC InstallmentNum InstallmentOf POSEntryMode POSConditionCode AuthCharInd CardCertData)
12
+
13
+ DECLINED = 'The transaction was declined'
14
+
15
+ def initialize(options = {})
16
+ requires!(options, :login, :password)
17
+ @options = options
18
+ super
19
+ end
20
+
21
+ def purchase(money, credit_card, options = {})
22
+ post = {}
23
+
24
+ add_amount(post, money)
25
+ add_invoice(post, options)
26
+ add_credit_card(post, credit_card)
27
+ add_address(post, options)
28
+
29
+ commit(post)
30
+ end
31
+
32
+ private
33
+ def add_amount(post, money)
34
+ add_pair(post, :Amount, amount(money), :required => true)
35
+ end
36
+
37
+ def add_address(post, options)
38
+ address = options[:billing_address] || options[:address]
39
+
40
+ if address
41
+ add_pair(post, :Address, address[:address1])
42
+ add_pair(post, :ZipCode, address[:zip])
43
+ end
44
+ end
45
+
46
+ def add_invoice(post, options)
47
+ add_pair(post, :RefID, options[:order_id], :required => true)
48
+ add_pair(post, :PONumber, options[:invoice], :required => true)
49
+ add_pair(post, :SaleTaxAmount, amount(options[:tax] || 0))
50
+ add_pair(post, :PaymentDesc, options[:description], :required => true)
51
+ add_pair(post, :TaxIndicator, 0)
52
+ end
53
+
54
+ def add_credit_card(post, credit_card)
55
+ add_pair(post, :CardHolderName, credit_card.name, :required => true)
56
+ add_pair(post, :CardNumber, credit_card.number, :required => true)
57
+
58
+ add_pair(post, :Expiration, expdate(credit_card), :required => true)
59
+ add_pair(post, :CVV2, credit_card.verification_value)
60
+ end
61
+
62
+ def add_unused_fields(post)
63
+ UNUSED_FIELDS.each do |f|
64
+ post[f] = ""
65
+ end
66
+ end
67
+
68
+ def expdate(credit_card)
69
+ year = format(credit_card.year, :two_digits)
70
+ month = format(credit_card.month, :two_digits)
71
+
72
+ "#{month}#{year}"
73
+ end
74
+
75
+ def parse(data)
76
+ response = {}
77
+
78
+ xml = REXML::Document.new(data)
79
+ root = REXML::XPath.first(xml, "//CCSaleDebitResponse")
80
+
81
+ if root.nil?
82
+ response[:message] = data.to_s.strip
83
+ else
84
+ root.elements.to_a.each do |node|
85
+ response[node.name.underscore.to_sym] = node.text
86
+ end
87
+ end
88
+
89
+ response
90
+ end
91
+
92
+ def commit(params)
93
+ response = parse( ssl_post(URL, post_data(params)) )
94
+
95
+ Response.new(response[:status] == "Authorized", message_from(response), response,
96
+ :test => test?,
97
+ :authorization => response[:trans_id],
98
+ :avs_result => { :code => response[:avs_code] },
99
+ :cvv_result => response[:cvv2_code]
100
+ )
101
+ end
102
+
103
+ def message_from(response)
104
+ case response[:message]
105
+ when 'Call Voice Center'
106
+ DECLINED
107
+ else
108
+ response[:message]
109
+ end
110
+ end
111
+
112
+ def post_data(params = {})
113
+ add_unused_fields(params)
114
+ params[:MerchantID] = @options[:login]
115
+ params[:RegKey] = @options[:password]
116
+
117
+ request = params.collect { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join("&")
118
+ request
119
+ end
120
+
121
+ def add_pair(post, key, value, options = {})
122
+ post[key] = value if !value.blank? || options[:required]
123
+ end
124
+ end
125
+ end
126
+ end
127
+
@@ -0,0 +1,26 @@
1
+ require File.join(File.dirname(__FILE__),'smart_ps.rb')
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ class TransaxGateway < SmartPs
6
+ def api_url
7
+ 'https://secure.nelixtransax.net/api/transact.php'
8
+ end
9
+
10
+ # The countries the gateway supports merchants from as 2 digit ISO country codes
11
+ self.supported_countries = ['US']
12
+
13
+ # The card types supported by the payment gateway
14
+ self.supported_cardtypes = [:visa, :master, :american_express, :discover]
15
+
16
+ # The homepage URL of the gateway
17
+ self.homepage_url = 'https://www.nelixtransax.com/'
18
+
19
+ # The name of the gateway
20
+ self.display_name = 'NELiX TransaX'
21
+
22
+ end
23
+ TransaXGateway = TransaxGateway
24
+ end
25
+ end
26
+