johnideal-activemerchant 1.4.4

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 (300) hide show
  1. data/.gitignore +2 -0
  2. data/CHANGELOG +448 -0
  3. data/CONTRIBUTERS +106 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README +134 -0
  6. data/Rakefile +167 -0
  7. data/VERSION +1 -0
  8. data/activemerchant.gemspec +484 -0
  9. data/gem-public_cert.pem +20 -0
  10. data/generators/gateway/USAGE +5 -0
  11. data/generators/gateway/gateway_generator.rb +61 -0
  12. data/generators/gateway/templates/gateway.rb +77 -0
  13. data/generators/gateway/templates/gateway_test.rb +49 -0
  14. data/generators/gateway/templates/remote_gateway_test.rb +57 -0
  15. data/generators/integration/USAGE +5 -0
  16. data/generators/integration/integration_generator.rb +68 -0
  17. data/generators/integration/templates/helper.rb +34 -0
  18. data/generators/integration/templates/helper_test.rb +54 -0
  19. data/generators/integration/templates/integration.rb +18 -0
  20. data/generators/integration/templates/module_test.rb +9 -0
  21. data/generators/integration/templates/notification.rb +100 -0
  22. data/generators/integration/templates/notification_test.rb +41 -0
  23. data/init.rb +3 -0
  24. data/lib/active_merchant/billing/avs_result.rb +98 -0
  25. data/lib/active_merchant/billing/base.rb +57 -0
  26. data/lib/active_merchant/billing/check.rb +68 -0
  27. data/lib/active_merchant/billing/credit_card.rb +159 -0
  28. data/lib/active_merchant/billing/credit_card_formatting.rb +21 -0
  29. data/lib/active_merchant/billing/credit_card_methods.rb +125 -0
  30. data/lib/active_merchant/billing/cvv_result.rb +38 -0
  31. data/lib/active_merchant/billing/expiry_date.rb +34 -0
  32. data/lib/active_merchant/billing/gateway.rb +158 -0
  33. data/lib/active_merchant/billing/gateways/authorize_net.rb +657 -0
  34. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +703 -0
  35. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +233 -0
  36. data/lib/active_merchant/billing/gateways/beanstream.rb +102 -0
  37. data/lib/active_merchant/billing/gateways/beanstream_interac.rb +54 -0
  38. data/lib/active_merchant/billing/gateways/bogus.rb +98 -0
  39. data/lib/active_merchant/billing/gateways/braintree.rb +17 -0
  40. data/lib/active_merchant/billing/gateways/card_stream.rb +230 -0
  41. data/lib/active_merchant/billing/gateways/cyber_source.rb +406 -0
  42. data/lib/active_merchant/billing/gateways/data_cash.rb +595 -0
  43. data/lib/active_merchant/billing/gateways/efsnet.rb +229 -0
  44. data/lib/active_merchant/billing/gateways/eway.rb +277 -0
  45. data/lib/active_merchant/billing/gateways/exact.rb +222 -0
  46. data/lib/active_merchant/billing/gateways/instapay.rb +164 -0
  47. data/lib/active_merchant/billing/gateways/linkpoint.rb +396 -0
  48. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +154 -0
  49. data/lib/active_merchant/billing/gateways/merchant_ware.rb +283 -0
  50. data/lib/active_merchant/billing/gateways/modern_payments.rb +36 -0
  51. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +214 -0
  52. data/lib/active_merchant/billing/gateways/moneris.rb +205 -0
  53. data/lib/active_merchant/billing/gateways/net_registry.rb +189 -0
  54. data/lib/active_merchant/billing/gateways/netbilling.rb +168 -0
  55. data/lib/active_merchant/billing/gateways/pay_junction.rb +392 -0
  56. data/lib/active_merchant/billing/gateways/pay_secure.rb +120 -0
  57. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +207 -0
  58. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +39 -0
  59. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +13 -0
  60. data/lib/active_merchant/billing/gateways/payflow.rb +236 -0
  61. data/lib/active_merchant/billing/gateways/payflow_express.rb +138 -0
  62. data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +15 -0
  63. data/lib/active_merchant/billing/gateways/payflow_uk.rb +21 -0
  64. data/lib/active_merchant/billing/gateways/payment_express.rb +230 -0
  65. data/lib/active_merchant/billing/gateways/paymentech_orbital/paymentech_orbital_response.rb +72 -0
  66. data/lib/active_merchant/billing/gateways/paymentech_orbital.rb +170 -0
  67. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +325 -0
  68. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +38 -0
  69. data/lib/active_merchant/billing/gateways/paypal.rb +108 -0
  70. data/lib/active_merchant/billing/gateways/paypal_ca.rb +13 -0
  71. data/lib/active_merchant/billing/gateways/paypal_express.rb +130 -0
  72. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +20 -0
  73. data/lib/active_merchant/billing/gateways/plugnpay.rb +292 -0
  74. data/lib/active_merchant/billing/gateways/protx.rb +307 -0
  75. data/lib/active_merchant/billing/gateways/psigate.rb +214 -0
  76. data/lib/active_merchant/billing/gateways/psl_card.rb +306 -0
  77. data/lib/active_merchant/billing/gateways/quickpay.rb +213 -0
  78. data/lib/active_merchant/billing/gateways/realex.rb +200 -0
  79. data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +88 -0
  80. data/lib/active_merchant/billing/gateways/sage/sage_core.rb +110 -0
  81. data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +97 -0
  82. data/lib/active_merchant/billing/gateways/sage.rb +146 -0
  83. data/lib/active_merchant/billing/gateways/secure_pay.rb +31 -0
  84. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +157 -0
  85. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +113 -0
  86. data/lib/active_merchant/billing/gateways/skip_jack.rb +442 -0
  87. data/lib/active_merchant/billing/gateways/smart_ps.rb +254 -0
  88. data/lib/active_merchant/billing/gateways/trans_first.rb +127 -0
  89. data/lib/active_merchant/billing/gateways/transax.rb +26 -0
  90. data/lib/active_merchant/billing/gateways/trust_commerce.rb +418 -0
  91. data/lib/active_merchant/billing/gateways/usa_epay.rb +194 -0
  92. data/lib/active_merchant/billing/gateways/verifi.rb +228 -0
  93. data/lib/active_merchant/billing/gateways/viaklix.rb +165 -0
  94. data/lib/active_merchant/billing/gateways/wirecard.rb +318 -0
  95. data/lib/active_merchant/billing/gateways.rb +3 -0
  96. data/lib/active_merchant/billing/integrations/action_view_helper.rb +79 -0
  97. data/lib/active_merchant/billing/integrations/bogus/helper.rb +17 -0
  98. data/lib/active_merchant/billing/integrations/bogus/notification.rb +11 -0
  99. data/lib/active_merchant/billing/integrations/bogus/return.rb +10 -0
  100. data/lib/active_merchant/billing/integrations/bogus.rb +22 -0
  101. data/lib/active_merchant/billing/integrations/chronopay/helper.rb +81 -0
  102. data/lib/active_merchant/billing/integrations/chronopay/notification.rb +156 -0
  103. data/lib/active_merchant/billing/integrations/chronopay/return.rb +10 -0
  104. data/lib/active_merchant/billing/integrations/chronopay.rb +22 -0
  105. data/lib/active_merchant/billing/integrations/gestpay/common.rb +42 -0
  106. data/lib/active_merchant/billing/integrations/gestpay/helper.rb +70 -0
  107. data/lib/active_merchant/billing/integrations/gestpay/notification.rb +83 -0
  108. data/lib/active_merchant/billing/integrations/gestpay/return.rb +10 -0
  109. data/lib/active_merchant/billing/integrations/gestpay.rb +26 -0
  110. data/lib/active_merchant/billing/integrations/helper.rb +93 -0
  111. data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +58 -0
  112. data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +59 -0
  113. data/lib/active_merchant/billing/integrations/hi_trust/return.rb +67 -0
  114. data/lib/active_merchant/billing/integrations/hi_trust.rb +26 -0
  115. data/lib/active_merchant/billing/integrations/nochex/helper.rb +68 -0
  116. data/lib/active_merchant/billing/integrations/nochex/notification.rb +94 -0
  117. data/lib/active_merchant/billing/integrations/nochex/return.rb +10 -0
  118. data/lib/active_merchant/billing/integrations/nochex.rb +87 -0
  119. data/lib/active_merchant/billing/integrations/notification.rb +62 -0
  120. data/lib/active_merchant/billing/integrations/paypal/helper.rb +118 -0
  121. data/lib/active_merchant/billing/integrations/paypal/notification.rb +154 -0
  122. data/lib/active_merchant/billing/integrations/paypal/return.rb +10 -0
  123. data/lib/active_merchant/billing/integrations/paypal.rb +40 -0
  124. data/lib/active_merchant/billing/integrations/quickpay/helper.rb +72 -0
  125. data/lib/active_merchant/billing/integrations/quickpay/notification.rb +74 -0
  126. data/lib/active_merchant/billing/integrations/quickpay.rb +18 -0
  127. data/lib/active_merchant/billing/integrations/return.rb +35 -0
  128. data/lib/active_merchant/billing/integrations/two_checkout/helper.rb +59 -0
  129. data/lib/active_merchant/billing/integrations/two_checkout/notification.rb +114 -0
  130. data/lib/active_merchant/billing/integrations/two_checkout/return.rb +17 -0
  131. data/lib/active_merchant/billing/integrations/two_checkout.rb +23 -0
  132. data/lib/active_merchant/billing/integrations.rb +22 -0
  133. data/lib/active_merchant/billing/response.rb +32 -0
  134. data/lib/active_merchant/lib/connection.rb +171 -0
  135. data/lib/active_merchant/lib/country.rb +319 -0
  136. data/lib/active_merchant/lib/error.rb +4 -0
  137. data/lib/active_merchant/lib/post_data.rb +22 -0
  138. data/lib/active_merchant/lib/posts_data.rb +47 -0
  139. data/lib/active_merchant/lib/requires_parameters.rb +16 -0
  140. data/lib/active_merchant/lib/utils.rb +18 -0
  141. data/lib/active_merchant/lib/validateable.rb +76 -0
  142. data/lib/active_merchant.rb +60 -0
  143. data/lib/certs/cacert.pem +7815 -0
  144. data/lib/support/gateway_support.rb +58 -0
  145. data/script/destroy +14 -0
  146. data/script/generate +14 -0
  147. data/test/fixtures.yml +335 -0
  148. data/test/remote/gateways/remote_authorize_net_cim_test.rb +459 -0
  149. data/test/remote/gateways/remote_authorize_net_test.rb +145 -0
  150. data/test/remote/gateways/remote_beanstream_interac_test.rb +53 -0
  151. data/test/remote/gateways/remote_beanstream_test.rb +150 -0
  152. data/test/remote/gateways/remote_braintree_test.rb +154 -0
  153. data/test/remote/gateways/remote_card_stream_test.rb +148 -0
  154. data/test/remote/gateways/remote_cyber_source_test.rb +144 -0
  155. data/test/remote/gateways/remote_data_cash_test.rb +357 -0
  156. data/test/remote/gateways/remote_efsnet_test.rb +81 -0
  157. data/test/remote/gateways/remote_eway_test.rb +74 -0
  158. data/test/remote/gateways/remote_exact_test.rb +60 -0
  159. data/test/remote/gateways/remote_instapay_test.rb +61 -0
  160. data/test/remote/gateways/remote_linkpoint_test.rb +112 -0
  161. data/test/remote/gateways/remote_merchant_e_solutions_test.rb +173 -0
  162. data/test/remote/gateways/remote_merchant_ware_test.rb +113 -0
  163. data/test/remote/gateways/remote_modern_payments_cim_test.rb +58 -0
  164. data/test/remote/gateways/remote_modern_payments_test.rb +43 -0
  165. data/test/remote/gateways/remote_moneris_test.rb +82 -0
  166. data/test/remote/gateways/remote_net_registry_test.rb +85 -0
  167. data/test/remote/gateways/remote_netbilling_test.rb +70 -0
  168. data/test/remote/gateways/remote_pay_junction_test.rb +143 -0
  169. data/test/remote/gateways/remote_pay_secure_test.rb +39 -0
  170. data/test/remote/gateways/remote_payflow_express_test.rb +50 -0
  171. data/test/remote/gateways/remote_payflow_test.rb +237 -0
  172. data/test/remote/gateways/remote_payflow_uk_test.rb +173 -0
  173. data/test/remote/gateways/remote_payment_express_test.rb +136 -0
  174. data/test/remote/gateways/remote_paymentech_orbital_test.rb +57 -0
  175. data/test/remote/gateways/remote_paypal_express_test.rb +49 -0
  176. data/test/remote/gateways/remote_paypal_test.rb +167 -0
  177. data/test/remote/gateways/remote_plugnpay_test.rb +72 -0
  178. data/test/remote/gateways/remote_protx_test.rb +219 -0
  179. data/test/remote/gateways/remote_psigate_test.rb +50 -0
  180. data/test/remote/gateways/remote_psl_card_test.rb +125 -0
  181. data/test/remote/gateways/remote_quickpay_test.rb +190 -0
  182. data/test/remote/gateways/remote_realex_test.rb +224 -0
  183. data/test/remote/gateways/remote_sage_bankcard_test.rb +109 -0
  184. data/test/remote/gateways/remote_sage_test.rb +87 -0
  185. data/test/remote/gateways/remote_sage_virtual_check_test.rb +62 -0
  186. data/test/remote/gateways/remote_secure_pay_au_test.rb +40 -0
  187. data/test/remote/gateways/remote_secure_pay_tech_test.rb +37 -0
  188. data/test/remote/gateways/remote_secure_pay_test.rb +28 -0
  189. data/test/remote/gateways/remote_skipjack_test.rb +105 -0
  190. data/test/remote/gateways/remote_trans_first_test.rb +34 -0
  191. data/test/remote/gateways/remote_transax_test.rb +112 -0
  192. data/test/remote/gateways/remote_trust_commerce_test.rb +152 -0
  193. data/test/remote/gateways/remote_usa_epay_test.rb +46 -0
  194. data/test/remote/gateways/remote_verifi_test.rb +107 -0
  195. data/test/remote/gateways/remote_viaklix_test.rb +43 -0
  196. data/test/remote/gateways/remote_wirecard_test.rb +111 -0
  197. data/test/remote/integrations/remote_gestpay_integration_test.rb +37 -0
  198. data/test/remote/integrations/remote_paypal_integration_test.rb +26 -0
  199. data/test/test_helper.rb +182 -0
  200. data/test/unit/avs_result_test.rb +59 -0
  201. data/test/unit/base_test.rb +55 -0
  202. data/test/unit/check_test.rb +88 -0
  203. data/test/unit/connection_test.rb +129 -0
  204. data/test/unit/country_code_test.rb +33 -0
  205. data/test/unit/country_test.rb +64 -0
  206. data/test/unit/credit_card_formatting_test.rb +19 -0
  207. data/test/unit/credit_card_methods_test.rb +170 -0
  208. data/test/unit/credit_card_test.rb +318 -0
  209. data/test/unit/cvv_result_test.rb +33 -0
  210. data/test/unit/expiry_date_test.rb +32 -0
  211. data/test/unit/gateways/authorize_net_cim_test.rb +638 -0
  212. data/test/unit/gateways/authorize_net_test.rb +290 -0
  213. data/test/unit/gateways/beanstream_interac_test.rb +51 -0
  214. data/test/unit/gateways/beanstream_test.rb +108 -0
  215. data/test/unit/gateways/bogus_test.rb +46 -0
  216. data/test/unit/gateways/braintree_test.rb +126 -0
  217. data/test/unit/gateways/card_stream_test.rb +90 -0
  218. data/test/unit/gateways/cyber_source_test.rb +188 -0
  219. data/test/unit/gateways/data_cash_test.rb +133 -0
  220. data/test/unit/gateways/efsnet_test.rb +123 -0
  221. data/test/unit/gateways/eway_test.rb +118 -0
  222. data/test/unit/gateways/exact_test.rb +156 -0
  223. data/test/unit/gateways/gateway_test.rb +48 -0
  224. data/test/unit/gateways/instapay_test.rb +102 -0
  225. data/test/unit/gateways/linkpoint_test.rb +167 -0
  226. data/test/unit/gateways/merchant_e_solutions_test.rb +169 -0
  227. data/test/unit/gateways/merchant_ware_test.rb +188 -0
  228. data/test/unit/gateways/modern_payments_cim_test.rb +171 -0
  229. data/test/unit/gateways/moneris_test.rb +158 -0
  230. data/test/unit/gateways/net_registry_test.rb +416 -0
  231. data/test/unit/gateways/netbilling_test.rb +54 -0
  232. data/test/unit/gateways/pay_junction_test.rb +123 -0
  233. data/test/unit/gateways/pay_secure_test.rb +71 -0
  234. data/test/unit/gateways/payflow_express_test.rb +173 -0
  235. data/test/unit/gateways/payflow_express_uk_test.rb +86 -0
  236. data/test/unit/gateways/payflow_test.rb +305 -0
  237. data/test/unit/gateways/payflow_uk_test.rb +30 -0
  238. data/test/unit/gateways/payment_express_test.rb +195 -0
  239. data/test/unit/gateways/paymentech_orbital_test.rb +117 -0
  240. data/test/unit/gateways/paypal_express_test.rb +382 -0
  241. data/test/unit/gateways/paypal_test.rb +520 -0
  242. data/test/unit/gateways/plugnpay_test.rb +86 -0
  243. data/test/unit/gateways/protx_test.rb +139 -0
  244. data/test/unit/gateways/psigate_test.rb +169 -0
  245. data/test/unit/gateways/psl_card_test.rb +64 -0
  246. data/test/unit/gateways/quickpay_test.rb +112 -0
  247. data/test/unit/gateways/realex_test.rb +151 -0
  248. data/test/unit/gateways/sage_bankcard_test.rb +162 -0
  249. data/test/unit/gateways/sage_virtual_check_test.rb +71 -0
  250. data/test/unit/gateways/secure_pay_au_test.rb +207 -0
  251. data/test/unit/gateways/secure_pay_tech_test.rb +44 -0
  252. data/test/unit/gateways/secure_pay_test.rb +87 -0
  253. data/test/unit/gateways/skip_jack_test.rb +133 -0
  254. data/test/unit/gateways/trans_first_test.rb +112 -0
  255. data/test/unit/gateways/trust_commerce_test.rb +90 -0
  256. data/test/unit/gateways/usa_epay_test.rb +128 -0
  257. data/test/unit/gateways/verifi_test.rb +96 -0
  258. data/test/unit/gateways/viaklix_test.rb +78 -0
  259. data/test/unit/gateways/wirecard_test.rb +250 -0
  260. data/test/unit/generators/test_gateway_generator.rb +46 -0
  261. data/test/unit/generators/test_generator_helper.rb +20 -0
  262. data/test/unit/generators/test_integration_generator.rb +53 -0
  263. data/test/unit/integrations/action_view_helper_test.rb +50 -0
  264. data/test/unit/integrations/bogus_module_test.rb +20 -0
  265. data/test/unit/integrations/chronopay_module_test.rb +13 -0
  266. data/test/unit/integrations/gestpay_module_test.rb +14 -0
  267. data/test/unit/integrations/helpers/bogus_helper_test.rb +28 -0
  268. data/test/unit/integrations/helpers/chronopay_helper_test.rb +67 -0
  269. data/test/unit/integrations/helpers/gestpay_helper_test.rb +100 -0
  270. data/test/unit/integrations/helpers/hi_trust_helper_test.rb +16 -0
  271. data/test/unit/integrations/helpers/nochex_helper_test.rb +53 -0
  272. data/test/unit/integrations/helpers/paypal_helper_test.rb +162 -0
  273. data/test/unit/integrations/helpers/quickpay_helper_test.rb +40 -0
  274. data/test/unit/integrations/helpers/two_checkout_helper_test.rb +92 -0
  275. data/test/unit/integrations/hi_trust_module_test.rb +13 -0
  276. data/test/unit/integrations/nochex_module_test.rb +13 -0
  277. data/test/unit/integrations/notifications/chronopay_notification_test.rb +66 -0
  278. data/test/unit/integrations/notifications/gestpay_notification_test.rb +60 -0
  279. data/test/unit/integrations/notifications/hi_trust_notification_test.rb +59 -0
  280. data/test/unit/integrations/notifications/nochex_notification_test.rb +51 -0
  281. data/test/unit/integrations/notifications/notification_test.rb +54 -0
  282. data/test/unit/integrations/notifications/paypal_notification_test.rb +85 -0
  283. data/test/unit/integrations/notifications/quickpay_notification_test.rb +69 -0
  284. data/test/unit/integrations/notifications/two_checkout_notification_test.rb +55 -0
  285. data/test/unit/integrations/paypal_module_test.rb +28 -0
  286. data/test/unit/integrations/quickpay_module_test.rb +9 -0
  287. data/test/unit/integrations/returns/chronopay_return_test.rb +11 -0
  288. data/test/unit/integrations/returns/gestpay_return_test.rb +10 -0
  289. data/test/unit/integrations/returns/hi_trust_return_test.rb +24 -0
  290. data/test/unit/integrations/returns/nochex_return_test.rb +10 -0
  291. data/test/unit/integrations/returns/paypal_return_test.rb +10 -0
  292. data/test/unit/integrations/returns/return_test.rb +11 -0
  293. data/test/unit/integrations/returns/two_checkout_return_test.rb +24 -0
  294. data/test/unit/integrations/two_checkout_module_test.rb +13 -0
  295. data/test/unit/post_data_test.rb +55 -0
  296. data/test/unit/posts_data_test.rb +48 -0
  297. data/test/unit/response_test.rb +28 -0
  298. data/test/unit/utils_test.rb +7 -0
  299. data/test/unit/validateable_test.rb +60 -0
  300. metadata +503 -0
@@ -0,0 +1,97 @@
1
+ require File.dirname(__FILE__) + '/sage_core'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ class SageVirtualCheckGateway < Gateway #:nodoc:
6
+ include SageCore
7
+ self.url = 'https://www.sagepayments.net/cgi-bin/eftVirtualCheck.dll?transaction'
8
+ self.source = 'virtual_check'
9
+
10
+ def purchase(money, credit_card, options = {})
11
+ post = {}
12
+ add_check(post, credit_card)
13
+ add_check_customer_data(post, options)
14
+ add_transaction_data(post, money, options)
15
+ commit(:purchase, post)
16
+ end
17
+
18
+ def void(reference, options = {})
19
+ post = {}
20
+ add_reference(post, reference)
21
+ commit(:void, post)
22
+ end
23
+
24
+ def credit(money, credit_card, options = {})
25
+ post = {}
26
+ add_check(post, credit_card)
27
+ add_check_customer_data(post, options)
28
+ add_transaction_data(post, money, options)
29
+ commit(:credit, post)
30
+ end
31
+
32
+ private
33
+ def add_check(post, check)
34
+ post[:C_first_name] = check.first_name
35
+ post[:C_last_name] = check.last_name
36
+ post[:C_rte] = check.routing_number
37
+ post[:C_acct] = check.account_number
38
+ post[:C_check_number] = check.number
39
+ post[:C_acct_type] = account_type(check)
40
+ end
41
+
42
+ def add_check_customer_data(post, options)
43
+ # Required  Customer Type – (NACHA Transaction Class)
44
+ # CCD for Commercial, Merchant Initiated
45
+ # PPD for Personal, Merchant Initiated
46
+ # WEB for Internet, Consumer Initiated
47
+ # RCK for Returned Checks
48
+ # ARC for Account Receivable Entry
49
+ # TEL for TelephoneInitiated
50
+ post[:C_customer_type] = "WEB"
51
+
52
+ # Optional  10  Digit Originator  ID – Assigned  By for  each transaction  class  or  business  purpose. If  not provided, the default Originator ID for the specific  Customer Type will be applied. 
53
+ post[:C_originator_id] = options[:originator_id]
54
+
55
+ # Optional  Transaction Addenda
56
+ post[:T_addenda] = options[:addenda]
57
+
58
+ # Required  Check  Writer  Social  Security  Number  (  Numbers Only, No Dashes ) 
59
+ post[:C_ssn] = options[:ssn].to_s.gsub(/[^\d]/, '')
60
+
61
+ post[:C_dl_state_code] = options[:drivers_license_state]
62
+ post[:C_dl_number] = options[:drivers_license_number]
63
+ post[:C_dob] = format_birth_date(options[:date_of_birth])
64
+ end
65
+
66
+ def format_birth_date(date)
67
+ date.respond_to?(:strftime) ? date.strftime("%m/%d/%Y") : date
68
+ end
69
+
70
+ # DDA for Checking
71
+ # SAV for Savings 
72
+ def account_type(check)
73
+ case check.account_type
74
+ when 'checking' then 'DDA'
75
+ when 'savings' then 'SAV'
76
+ else raise ArgumentError, "Unknown account type #{check.account_type}"
77
+ end
78
+ end
79
+
80
+ def parse(data)
81
+ response = {}
82
+ response[:success] = data[1,1]
83
+ response[:code] = data[2,6].strip
84
+ response[:message] = data[8,32].strip
85
+ response[:risk] = data[40, 2]
86
+ response[:reference] = data[42, 10]
87
+
88
+ extra_data = data[53...-1].split("\034")
89
+ response[:order_number] = extra_data[0]
90
+ response[:authentication_indicator] = extra_data[1]
91
+ response[:authentication_disclosure] = extra_data[2]
92
+ response
93
+ end
94
+ end
95
+ end
96
+ end
97
+
@@ -0,0 +1,146 @@
1
+ require File.dirname(__FILE__) + '/sage/sage_bankcard'
2
+ require File.dirname(__FILE__) + '/sage/sage_virtual_check'
3
+
4
+ module ActiveMerchant #:nodoc:
5
+ module Billing #:nodoc:
6
+ class SageGateway < Gateway
7
+ self.supported_countries = SageBankcardGateway.supported_countries
8
+ self.supported_cardtypes = SageBankcardGateway.supported_cardtypes
9
+
10
+ # Creates a new SageGateway
11
+ #
12
+ # The gateway requires that a valid login and password be passed
13
+ # in the +options+ hash.
14
+ #
15
+ # ==== Options
16
+ #
17
+ # * <tt>:login</tt> - The Sage Payment Solutions Merchant ID Number.
18
+ # * <tt>:password</tt> - The Sage Payment Solutions Merchant Key Number.
19
+ def initialize(options = {})
20
+ requires!(options, :login, :password)
21
+ @options = options
22
+ super
23
+ end
24
+
25
+ # Performs an authorization transaction
26
+ #
27
+ # ==== Parameters
28
+ # * <tt>money</tt> - The amount to be authorized as an integer value in cents.
29
+ # * <tt>credit_card</tt> - The CreditCard object to be used as the funding source for the transaction.
30
+ # * <tt>options</tt> - A hash of optional parameters.
31
+ # * <tt>:order_id</tt> - A unique reference for this order. (maximum of 20 characters).
32
+ # * <tt>:email</tt> - The customer's email address
33
+ # * <tt>:customer</tt> - The Customer Number for Purchase Card Level II Transactions
34
+ # * <tt>:billing_address</tt> - The customer's billing address as a hash of address information.
35
+ # * <tt>:address1</tt> - The billing address street
36
+ # * <tt>:city</tt> - The billing address city
37
+ # * <tt>:state</tt> - The billing address state
38
+ # * <tt>:country</tt> - The 2 digit ISO billing address country code
39
+ # * <tt>:zip</tt> - The billing address zip code
40
+ # * <tt>:phone</tt> - The billing address phone number
41
+ # * <tt>:fax</tt> - The billing address fax number
42
+ # * <tt>:shipping_address</tt> - The customer's shipping address as a hash of address information.
43
+ # * <tt>:name</tt> - The name at the shipping address
44
+ # * <tt>:address1</tt> - The shipping address street
45
+ # * <tt>:city</tt> - The shipping address city
46
+ # * <tt>:state</tt> - The shipping address state code
47
+ # * <tt>:country</tt> - The 2 digit ISO shipping address country code
48
+ # * <tt>:zip</tt> - The shipping address zip code
49
+ # * <tt>:tax</tt> - The tax amount for the transaction as an Integer value in cents. Maps to Sage <tt>T_tax</tt>.
50
+ # * <tt>:shipping</tt> - The shipping amount for the transaction as an Integer value in cents. Maps to Sage <tt>T_shipping</tt>.
51
+ def authorize(money, credit_card, options = {})
52
+ bankcard.authorize(money, credit_card, options)
53
+ end
54
+
55
+ # Performs a purchase, which is essentially an authorization and capture in a single operation.
56
+ #
57
+ # ==== Parameters
58
+ #
59
+ # * <tt>money</tt> - The amount to be authorized as an integer value in cents.
60
+ # * <tt>source</tt> - The CreditCard or Check object to be used as the funding source for the transaction.
61
+ # * <tt>options</tt> - A hash of optional parameters.
62
+ # * <tt>:order_id</tt> - A unique reference for this order. (maximum of 20 characters).
63
+ # * <tt>:email</tt> - The customer's email address
64
+ # * <tt>:customer</tt> - The Customer Number for Purchase Card Level II Transactions
65
+ # * <tt>:billing_address</tt> - The customer's billing address as a hash of address information.
66
+ # * <tt>:address1</tt> - The billing address street
67
+ # * <tt>:city</tt> - The billing address city
68
+ # * <tt>:state</tt> - The billing address state
69
+ # * <tt>:country</tt> - The 2 digit ISO billing address country code
70
+ # * <tt>:zip</tt> - The billing address zip code
71
+ # * <tt>:phone</tt> - The billing address phone number
72
+ # * <tt>:fax</tt> - The billing address fax number
73
+ # * <tt>:shipping_address</tt> - The customer's shipping address as a hash of address information.
74
+ # * <tt>:name</tt> - The name at the shipping address
75
+ # * <tt>:address1</tt> - The shipping address street
76
+ # * <tt>:city</tt> - The shipping address city
77
+ # * <tt>:state</tt> - The shipping address state code
78
+ # * <tt>:country</tt> - The 2 digit ISO shipping address country code
79
+ # * <tt>:zip</tt> - The shipping address zip code
80
+ # * <tt>:tax</tt> - The tax amount for the transaction as an integer value in cents. Maps to Sage <tt>T_tax</tt>.
81
+ # * <tt>:shipping</tt> - The shipping amount for the transaction as an integer value in cents. Maps to Sage <tt>T_shipping</tt>.
82
+ #
83
+ # ==== Additional options in the +options+ hash for when using a Check as the funding source
84
+ # * <tt>:originator_id</tt> - 10 digit originator. If not provided, Sage will use the default Originator ID for the specific customer type.
85
+ # * <tt>:addenda</tt> - Transaction addenda.
86
+ # * <tt>:ssn</tt> - The customer's Social Security Number.
87
+ # * <tt>:drivers_license_state</tt> - The customer's drivers license state code.
88
+ # * <tt>:drivers_license_number</tt> - The customer's drivers license number.
89
+ # * <tt>:date_of_birth</tt> - The customer's date of birth as a Time or Date object or a string in the format <tt>mm/dd/yyyy</tt>.
90
+ def purchase(money, source, options = {})
91
+ if source.type == "check"
92
+ virtual_check.purchase(money, source, options)
93
+ else
94
+ bankcard.purchase(money, source, options)
95
+ end
96
+ end
97
+
98
+ # Captures authorized funds.
99
+ #
100
+ # ==== Parameters
101
+ #
102
+ # * <tt>money</tt> - The amount to be authorized as an integer value in cents. Sage doesn't support changing the capture amount, so the full amount of the initial transaction will be captured.
103
+ # * <tt>reference</tt> - The authorization reference string returned by the original transaction's Response#authorization.
104
+ def capture(money, reference, options = {})
105
+ bankcard.capture(money, reference, options)
106
+ end
107
+
108
+ # Voids a prior transaction. Works for both CreditCard and Check transactions.
109
+ #
110
+ # ==== Parameters
111
+ #
112
+ # * <tt>reference</tt> - The authorization reference string returned by the original transaction's Response#authorization.
113
+ def void(reference, options = {})
114
+ if reference.split(";").last == "virtual_check"
115
+ virtual_check.void(reference, options)
116
+ else
117
+ bankcard.void(reference, options)
118
+ end
119
+ end
120
+
121
+ # Performs a credit transaction. (Sage +Credit+ transaction).
122
+ #
123
+ # ==== Parameters
124
+ #
125
+ # * <tt>money</tt> - The amount to be authorized as an integer value in cents.
126
+ # * <tt>source</tt> - The CreditCard or Check object to be used as the target for the credit.
127
+ def credit(money, source, options = {})
128
+ if source.type == "check"
129
+ virtual_check.credit(money, source, options)
130
+ else
131
+ bankcard.credit(money, source, options)
132
+ end
133
+ end
134
+
135
+ private
136
+ def bankcard
137
+ @bankcard ||= SageBankcardGateway.new(@options)
138
+ end
139
+
140
+ def virtual_check
141
+ @virtual_check ||= SageVirtualCheckGateway.new(@options)
142
+ end
143
+ end
144
+ end
145
+ end
146
+
@@ -0,0 +1,31 @@
1
+ require File.dirname(__FILE__) + '/authorize_net'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ class SecurePayGateway < AuthorizeNetGateway
6
+ self.live_url = self.test_url = 'https://www.securepay.com/AuthSpayAdapter/process.aspx'
7
+
8
+ self.homepage_url = 'http://www.securepay.com/'
9
+ self.display_name = 'SecurePay'
10
+
11
+ # Limit support to purchase() for the time being
12
+ # JRuby chokes here
13
+ # undef_method :authorize, :capture, :void, :credit
14
+
15
+ undef_method :authorize
16
+ undef_method :capture
17
+ undef_method :void
18
+ undef_method :credit
19
+
20
+ def test?
21
+ Base.gateway_mode == :test
22
+ end
23
+
24
+ private
25
+ def split(response)
26
+ response.split('%')
27
+ end
28
+ end
29
+ end
30
+ end
31
+
@@ -0,0 +1,157 @@
1
+ require 'rexml/document'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ class SecurePayAuGateway < Gateway
6
+ API_VERSION = 'xml-4.2'
7
+
8
+ TEST_URL = 'https://www.securepay.com.au/test/payment'
9
+ LIVE_URL = 'https://www.securepay.com.au/xmlapi/payment'
10
+
11
+ self.supported_countries = ['AU']
12
+ self.supported_cardtypes = [:visa, :master, :american_express, :diners_club, :jcb]
13
+
14
+ # The homepage URL of the gateway
15
+ self.homepage_url = 'http://securepay.com.au'
16
+
17
+ # The name of the gateway
18
+ self.display_name = 'SecurePay'
19
+
20
+ class_inheritable_accessor :request_timeout
21
+ self.request_timeout = 60
22
+
23
+ self.money_format = :cents
24
+ self.default_currency = 'AUD'
25
+
26
+ # 0 Standard Payment
27
+ # 4 Refund
28
+ # 6 Client Reversal (Void)
29
+ # 10 Preauthorise
30
+ # 11 Preauth Complete (Advice)
31
+ TRANSACTIONS = {
32
+ :purchase => 0,
33
+ :authorization => 10,
34
+ :capture => 11,
35
+ :void => 6,
36
+ :credit => 4
37
+ }
38
+
39
+ SUCCESS_CODES = [ '00', '08', '11', '16', '77' ]
40
+
41
+ def initialize(options = {})
42
+ requires!(options, :login, :password)
43
+ @options = options
44
+ super
45
+ end
46
+
47
+ def test?
48
+ @options[:test] || super
49
+ end
50
+
51
+ def purchase(money, credit_card, options = {})
52
+ commit :purchase, build_purchase_request(money, credit_card, options)
53
+ end
54
+
55
+ private
56
+
57
+ def build_purchase_request(money, credit_card, options)
58
+ xml = Builder::XmlMarkup.new
59
+
60
+ xml.tag! 'amount', amount(money)
61
+ xml.tag! 'currency', options[:currency] || currency(money)
62
+ xml.tag! 'purchaseOrderNo', options[:order_id].to_s.gsub(/[ ']/, '')
63
+
64
+ xml.tag! 'CreditCardInfo' do
65
+ xml.tag! 'cardNumber', credit_card.number
66
+ xml.tag! 'expiryDate', expdate(credit_card)
67
+ xml.tag! 'cvv', credit_card.verification_value if credit_card.verification_value?
68
+ end
69
+
70
+ xml.target!
71
+ end
72
+
73
+ def build_request(action, body)
74
+ xml = Builder::XmlMarkup.new
75
+ xml.instruct!
76
+ xml.tag! 'SecurePayMessage' do
77
+ xml.tag! 'MessageInfo' do
78
+ xml.tag! 'messageID', Utils.generate_unique_id.slice(0, 30)
79
+ xml.tag! 'messageTimestamp', generate_timestamp
80
+ xml.tag! 'timeoutValue', request_timeout
81
+ xml.tag! 'apiVersion', API_VERSION
82
+ end
83
+
84
+ xml.tag! 'MerchantInfo' do
85
+ xml.tag! 'merchantID', @options[:login]
86
+ xml.tag! 'password', @options[:password]
87
+ end
88
+
89
+ xml.tag! 'RequestType', 'Payment'
90
+ xml.tag! 'Payment' do
91
+ xml.tag! 'TxnList', "count" => 1 do
92
+ xml.tag! 'Txn', "ID" => 1 do
93
+ xml.tag! 'txnType', TRANSACTIONS[action]
94
+ xml.tag! 'txnSource', 23
95
+ xml << body
96
+ end
97
+ end
98
+ end
99
+ end
100
+
101
+ xml.target!
102
+ end
103
+
104
+ def commit(action, request)
105
+ response = parse(ssl_post(test? ? TEST_URL : LIVE_URL, build_request(action, request)))
106
+
107
+ Response.new(success?(response), message_from(response), response,
108
+ :test => test?,
109
+ :authorization => authorization_from(response)
110
+ )
111
+ end
112
+
113
+ def success?(response)
114
+ SUCCESS_CODES.include?(response[:response_code])
115
+ end
116
+
117
+ def authorization_from(response)
118
+ response[:txn_id]
119
+ end
120
+
121
+ def message_from(response)
122
+ response[:response_text] || response[:status_description]
123
+ end
124
+
125
+ def expdate(credit_card)
126
+ "#{format(credit_card.month, :two_digits)}/#{format(credit_card.year, :two_digits)}"
127
+ end
128
+
129
+ def parse(body)
130
+ xml = REXML::Document.new(body)
131
+
132
+ response = {}
133
+
134
+ xml.root.elements.to_a.each do |node|
135
+ parse_element(response, node)
136
+ end
137
+
138
+ response
139
+ end
140
+
141
+ def parse_element(response, node)
142
+ if node.has_elements?
143
+ node.elements.each{|element| parse_element(response, element) }
144
+ else
145
+ response[node.name.underscore.to_sym] = node.text
146
+ end
147
+ end
148
+
149
+ # YYYYDDMMHHNNSSKKK000sOOO
150
+ def generate_timestamp
151
+ time = Time.now.utc
152
+ time.strftime("%Y%d%m%H%M%S#{time.usec}+000")
153
+ end
154
+ end
155
+ end
156
+ end
157
+
@@ -0,0 +1,113 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ class SecurePayTechGateway < Gateway
4
+ class SecurePayTechPostData < PostData
5
+ self.required_fields = [ :OrderReference, :CardNumber, :CardExpiry, :CardHolderName, :CardType, :MerchantID, :MerchantKey, :Amount, :Currency ]
6
+ end
7
+
8
+ URL = 'https://tx.securepaytech.com/web/HttpPostPurchase'
9
+
10
+ PAYMENT_GATEWAY_RESPONSES = {
11
+ 1 => "Transaction OK",
12
+ 2 => "Insufficient funds",
13
+ 3 => "Card expired",
14
+ 4 => "Card declined",
15
+ 5 => "Server error",
16
+ 6 => "Communications error",
17
+ 7 => "Unsupported transaction type",
18
+ 8 => "Bad or malformed request",
19
+ 9 => "Invalid card number"
20
+ }
21
+
22
+ self.default_currency = 'NZD'
23
+ self.supported_countries = ['NZ']
24
+ self.supported_cardtypes = [:visa, :master, :american_express, :diners_club]
25
+ self.homepage_url = 'http://www.securepaytech.com/'
26
+ self.display_name = 'SecurePayTech'
27
+
28
+ def initialize(options = {})
29
+ requires!(options, :login, :password)
30
+ @options = options
31
+ super
32
+ end
33
+
34
+ def purchase(money, creditcard, options = {})
35
+ post = SecurePayTechPostData.new
36
+
37
+ add_invoice(post, money, options)
38
+ add_creditcard(post, creditcard)
39
+
40
+ commit(:purchase, post)
41
+ end
42
+
43
+ private
44
+
45
+ def add_invoice(post, money, options)
46
+ post[:Amount] = amount(money)
47
+ post[:Currency] = options[:currency] || currency(money)
48
+
49
+ post[:OrderReference] = options[:order_id]
50
+ end
51
+
52
+ def add_creditcard(post, creditcard)
53
+ post[:CardNumber] = creditcard.number
54
+ post[:CardExpiry] = expdate(creditcard)
55
+ post[:CardHolderName] = creditcard.name
56
+
57
+ if creditcard.verification_value?
58
+ post[:EnableCSC] = 1
59
+ post[:CSC] = creditcard.verification_value
60
+ end
61
+
62
+ # SPT will autodetect this
63
+ post[:CardType] = 0
64
+ end
65
+
66
+ def parse(body)
67
+ response = CGI.unescape(body).split(',')
68
+
69
+ result = {}
70
+ result[:result_code] = response[0].to_i
71
+
72
+ if response.length == 2
73
+ result[:fail_reason] = response[1]
74
+ else
75
+ result[:merchant_transaction_reference] = response[1]
76
+ result[:receipt_number] = response[2]
77
+ result[:transaction_number] = response[3]
78
+ result[:authorisation_id] = response[4]
79
+ result[:batch_number] = response[5]
80
+ end
81
+
82
+ result
83
+ end
84
+
85
+ def commit(action, post)
86
+ response = parse( ssl_post(URL, post_data(action, post) ) )
87
+
88
+ Response.new(response[:result_code] == 1, message_from(response), response,
89
+ :test => test?,
90
+ :authorization => response[:merchant_transaction_reference]
91
+ )
92
+ end
93
+
94
+ def message_from(result)
95
+ PAYMENT_GATEWAY_RESPONSES[result[:result_code]]
96
+ end
97
+
98
+ def post_data(action, post)
99
+ post[:MerchantID] = @options[:login]
100
+ post[:MerchantKey] = @options[:password]
101
+ post.to_s
102
+ end
103
+
104
+ def expdate(creditcard)
105
+ year = sprintf("%.4i", creditcard.year)
106
+ month = sprintf("%.2i", creditcard.month)
107
+
108
+ "#{month}#{year[-2..-1]}"
109
+ end
110
+ end
111
+ end
112
+ end
113
+