mattbauer-activemerchant 1.4.2

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 (292) hide show
  1. data/CHANGELOG +459 -0
  2. data/CONTRIBUTERS +118 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README +134 -0
  5. data/Rakefile +153 -0
  6. data/gem-public_cert.pem +20 -0
  7. data/init.rb +3 -0
  8. data/lib/active_merchant.rb +60 -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 +34 -0
  17. data/lib/active_merchant/billing/gateway.rb +158 -0
  18. data/lib/active_merchant/billing/gateways.rb +3 -0
  19. data/lib/active_merchant/billing/gateways/authorize_net.rb +657 -0
  20. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +703 -0
  21. data/lib/active_merchant/billing/gateways/beanstream.rb +102 -0
  22. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +233 -0
  23. data/lib/active_merchant/billing/gateways/beanstream_interac.rb +54 -0
  24. data/lib/active_merchant/billing/gateways/bogus.rb +98 -0
  25. data/lib/active_merchant/billing/gateways/braintree.rb +17 -0
  26. data/lib/active_merchant/billing/gateways/card_stream.rb +230 -0
  27. data/lib/active_merchant/billing/gateways/cyber_source.rb +406 -0
  28. data/lib/active_merchant/billing/gateways/data_cash.rb +595 -0
  29. data/lib/active_merchant/billing/gateways/efsnet.rb +229 -0
  30. data/lib/active_merchant/billing/gateways/elavon.rb +106 -0
  31. data/lib/active_merchant/billing/gateways/eway.rb +277 -0
  32. data/lib/active_merchant/billing/gateways/exact.rb +222 -0
  33. data/lib/active_merchant/billing/gateways/first_pay.rb +172 -0
  34. data/lib/active_merchant/billing/gateways/instapay.rb +164 -0
  35. data/lib/active_merchant/billing/gateways/linkpoint.rb +396 -0
  36. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +154 -0
  37. data/lib/active_merchant/billing/gateways/merchant_ware.rb +283 -0
  38. data/lib/active_merchant/billing/gateways/modern_payments.rb +36 -0
  39. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +214 -0
  40. data/lib/active_merchant/billing/gateways/moneris.rb +295 -0
  41. data/lib/active_merchant/billing/gateways/moneris_usa.rb +258 -0
  42. data/lib/active_merchant/billing/gateways/net_registry.rb +189 -0
  43. data/lib/active_merchant/billing/gateways/netbilling.rb +168 -0
  44. data/lib/active_merchant/billing/gateways/ogone.rb +259 -0
  45. data/lib/active_merchant/billing/gateways/pay_junction.rb +392 -0
  46. data/lib/active_merchant/billing/gateways/pay_secure.rb +120 -0
  47. data/lib/active_merchant/billing/gateways/payflow.rb +236 -0
  48. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +207 -0
  49. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +39 -0
  50. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +13 -0
  51. data/lib/active_merchant/billing/gateways/payflow_express.rb +138 -0
  52. data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +15 -0
  53. data/lib/active_merchant/billing/gateways/payflow_uk.rb +21 -0
  54. data/lib/active_merchant/billing/gateways/payment_express.rb +230 -0
  55. data/lib/active_merchant/billing/gateways/paypal.rb +121 -0
  56. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +325 -0
  57. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +38 -0
  58. data/lib/active_merchant/billing/gateways/paypal_ca.rb +13 -0
  59. data/lib/active_merchant/billing/gateways/paypal_express.rb +130 -0
  60. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +20 -0
  61. data/lib/active_merchant/billing/gateways/plugnpay.rb +292 -0
  62. data/lib/active_merchant/billing/gateways/psigate.rb +214 -0
  63. data/lib/active_merchant/billing/gateways/psl_card.rb +306 -0
  64. data/lib/active_merchant/billing/gateways/quickpay.rb +213 -0
  65. data/lib/active_merchant/billing/gateways/realex.rb +200 -0
  66. data/lib/active_merchant/billing/gateways/sage.rb +146 -0
  67. data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +88 -0
  68. data/lib/active_merchant/billing/gateways/sage/sage_core.rb +110 -0
  69. data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +97 -0
  70. data/lib/active_merchant/billing/gateways/sage_pay.rb +308 -0
  71. data/lib/active_merchant/billing/gateways/secure_pay.rb +31 -0
  72. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +157 -0
  73. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +113 -0
  74. data/lib/active_merchant/billing/gateways/skip_jack.rb +442 -0
  75. data/lib/active_merchant/billing/gateways/smart_ps.rb +254 -0
  76. data/lib/active_merchant/billing/gateways/trans_first.rb +127 -0
  77. data/lib/active_merchant/billing/gateways/transax.rb +26 -0
  78. data/lib/active_merchant/billing/gateways/trust_commerce.rb +418 -0
  79. data/lib/active_merchant/billing/gateways/usa_epay.rb +194 -0
  80. data/lib/active_merchant/billing/gateways/verifi.rb +228 -0
  81. data/lib/active_merchant/billing/gateways/viaklix.rb +189 -0
  82. data/lib/active_merchant/billing/gateways/wirecard.rb +318 -0
  83. data/lib/active_merchant/billing/integrations.rb +22 -0
  84. data/lib/active_merchant/billing/integrations/action_view_helper.rb +79 -0
  85. data/lib/active_merchant/billing/integrations/bogus.rb +22 -0
  86. data/lib/active_merchant/billing/integrations/bogus/helper.rb +17 -0
  87. data/lib/active_merchant/billing/integrations/bogus/notification.rb +11 -0
  88. data/lib/active_merchant/billing/integrations/bogus/return.rb +10 -0
  89. data/lib/active_merchant/billing/integrations/chronopay.rb +22 -0
  90. data/lib/active_merchant/billing/integrations/chronopay/helper.rb +81 -0
  91. data/lib/active_merchant/billing/integrations/chronopay/notification.rb +156 -0
  92. data/lib/active_merchant/billing/integrations/chronopay/return.rb +10 -0
  93. data/lib/active_merchant/billing/integrations/gestpay.rb +26 -0
  94. data/lib/active_merchant/billing/integrations/gestpay/common.rb +42 -0
  95. data/lib/active_merchant/billing/integrations/gestpay/helper.rb +70 -0
  96. data/lib/active_merchant/billing/integrations/gestpay/notification.rb +83 -0
  97. data/lib/active_merchant/billing/integrations/gestpay/return.rb +10 -0
  98. data/lib/active_merchant/billing/integrations/helper.rb +93 -0
  99. data/lib/active_merchant/billing/integrations/hi_trust.rb +26 -0
  100. data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +58 -0
  101. data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +59 -0
  102. data/lib/active_merchant/billing/integrations/hi_trust/return.rb +67 -0
  103. data/lib/active_merchant/billing/integrations/nochex.rb +87 -0
  104. data/lib/active_merchant/billing/integrations/nochex/helper.rb +68 -0
  105. data/lib/active_merchant/billing/integrations/nochex/notification.rb +94 -0
  106. data/lib/active_merchant/billing/integrations/nochex/return.rb +10 -0
  107. data/lib/active_merchant/billing/integrations/notification.rb +62 -0
  108. data/lib/active_merchant/billing/integrations/paypal.rb +40 -0
  109. data/lib/active_merchant/billing/integrations/paypal/helper.rb +119 -0
  110. data/lib/active_merchant/billing/integrations/paypal/notification.rb +154 -0
  111. data/lib/active_merchant/billing/integrations/paypal/return.rb +10 -0
  112. data/lib/active_merchant/billing/integrations/quickpay.rb +18 -0
  113. data/lib/active_merchant/billing/integrations/quickpay/helper.rb +72 -0
  114. data/lib/active_merchant/billing/integrations/quickpay/notification.rb +74 -0
  115. data/lib/active_merchant/billing/integrations/return.rb +35 -0
  116. data/lib/active_merchant/billing/integrations/two_checkout.rb +23 -0
  117. data/lib/active_merchant/billing/integrations/two_checkout/helper.rb +59 -0
  118. data/lib/active_merchant/billing/integrations/two_checkout/notification.rb +114 -0
  119. data/lib/active_merchant/billing/integrations/two_checkout/return.rb +17 -0
  120. data/lib/active_merchant/billing/response.rb +32 -0
  121. data/lib/active_merchant/lib/connection.rb +170 -0
  122. data/lib/active_merchant/lib/country.rb +319 -0
  123. data/lib/active_merchant/lib/error.rb +4 -0
  124. data/lib/active_merchant/lib/post_data.rb +22 -0
  125. data/lib/active_merchant/lib/posts_data.rb +47 -0
  126. data/lib/active_merchant/lib/requires_parameters.rb +16 -0
  127. data/lib/active_merchant/lib/utils.rb +18 -0
  128. data/lib/active_merchant/lib/validateable.rb +76 -0
  129. data/lib/certs/cacert.pem +7815 -0
  130. data/lib/support/gateway_support.rb +58 -0
  131. data/script/destroy +14 -0
  132. data/script/generate +14 -0
  133. data/test/fixtures.yml +353 -0
  134. data/test/remote/gateways/remote_authorize_net_cim_test.rb +459 -0
  135. data/test/remote/gateways/remote_authorize_net_test.rb +145 -0
  136. data/test/remote/gateways/remote_beanstream_interac_test.rb +53 -0
  137. data/test/remote/gateways/remote_beanstream_test.rb +150 -0
  138. data/test/remote/gateways/remote_braintree_test.rb +154 -0
  139. data/test/remote/gateways/remote_card_stream_test.rb +148 -0
  140. data/test/remote/gateways/remote_cyber_source_test.rb +144 -0
  141. data/test/remote/gateways/remote_data_cash_test.rb +357 -0
  142. data/test/remote/gateways/remote_efsnet_test.rb +81 -0
  143. data/test/remote/gateways/remote_elavon_test.rb +66 -0
  144. data/test/remote/gateways/remote_eway_test.rb +74 -0
  145. data/test/remote/gateways/remote_exact_test.rb +60 -0
  146. data/test/remote/gateways/remote_first_pay_test.rb +87 -0
  147. data/test/remote/gateways/remote_instapay_test.rb +61 -0
  148. data/test/remote/gateways/remote_linkpoint_test.rb +112 -0
  149. data/test/remote/gateways/remote_merchant_e_solutions_test.rb +173 -0
  150. data/test/remote/gateways/remote_merchant_ware_test.rb +113 -0
  151. data/test/remote/gateways/remote_modern_payments_cim_test.rb +58 -0
  152. data/test/remote/gateways/remote_modern_payments_test.rb +43 -0
  153. data/test/remote/gateways/remote_moneris_test.rb +118 -0
  154. data/test/remote/gateways/remote_moneris_usa_test.rb +115 -0
  155. data/test/remote/gateways/remote_net_registry_test.rb +85 -0
  156. data/test/remote/gateways/remote_netbilling_test.rb +70 -0
  157. data/test/remote/gateways/remote_ogone_test.rb +108 -0
  158. data/test/remote/gateways/remote_pay_junction_test.rb +143 -0
  159. data/test/remote/gateways/remote_pay_secure_test.rb +39 -0
  160. data/test/remote/gateways/remote_payflow_express_test.rb +50 -0
  161. data/test/remote/gateways/remote_payflow_test.rb +237 -0
  162. data/test/remote/gateways/remote_payflow_uk_test.rb +173 -0
  163. data/test/remote/gateways/remote_payment_express_test.rb +136 -0
  164. data/test/remote/gateways/remote_paypal_express_test.rb +49 -0
  165. data/test/remote/gateways/remote_paypal_test.rb +178 -0
  166. data/test/remote/gateways/remote_plugnpay_test.rb +72 -0
  167. data/test/remote/gateways/remote_psigate_test.rb +50 -0
  168. data/test/remote/gateways/remote_psl_card_test.rb +125 -0
  169. data/test/remote/gateways/remote_quickpay_test.rb +190 -0
  170. data/test/remote/gateways/remote_realex_test.rb +224 -0
  171. data/test/remote/gateways/remote_sage_bankcard_test.rb +109 -0
  172. data/test/remote/gateways/remote_sage_pay_test.rb +219 -0
  173. data/test/remote/gateways/remote_sage_test.rb +87 -0
  174. data/test/remote/gateways/remote_sage_virtual_check_test.rb +62 -0
  175. data/test/remote/gateways/remote_secure_pay_au_test.rb +40 -0
  176. data/test/remote/gateways/remote_secure_pay_tech_test.rb +37 -0
  177. data/test/remote/gateways/remote_secure_pay_test.rb +28 -0
  178. data/test/remote/gateways/remote_skipjack_test.rb +105 -0
  179. data/test/remote/gateways/remote_trans_first_test.rb +34 -0
  180. data/test/remote/gateways/remote_transax_test.rb +112 -0
  181. data/test/remote/gateways/remote_trust_commerce_test.rb +152 -0
  182. data/test/remote/gateways/remote_usa_epay_test.rb +46 -0
  183. data/test/remote/gateways/remote_verifi_test.rb +107 -0
  184. data/test/remote/gateways/remote_viaklix_test.rb +43 -0
  185. data/test/remote/gateways/remote_wirecard_test.rb +111 -0
  186. data/test/remote/integrations/remote_gestpay_integration_test.rb +37 -0
  187. data/test/remote/integrations/remote_paypal_integration_test.rb +26 -0
  188. data/test/test_helper.rb +182 -0
  189. data/test/unit/avs_result_test.rb +59 -0
  190. data/test/unit/base_test.rb +55 -0
  191. data/test/unit/check_test.rb +88 -0
  192. data/test/unit/connection_test.rb +129 -0
  193. data/test/unit/country_code_test.rb +33 -0
  194. data/test/unit/country_test.rb +64 -0
  195. data/test/unit/credit_card_formatting_test.rb +19 -0
  196. data/test/unit/credit_card_methods_test.rb +179 -0
  197. data/test/unit/credit_card_test.rb +318 -0
  198. data/test/unit/cvv_result_test.rb +33 -0
  199. data/test/unit/expiry_date_test.rb +32 -0
  200. data/test/unit/gateways/authorize_net_cim_test.rb +638 -0
  201. data/test/unit/gateways/authorize_net_test.rb +290 -0
  202. data/test/unit/gateways/beanstream_interac_test.rb +51 -0
  203. data/test/unit/gateways/beanstream_test.rb +108 -0
  204. data/test/unit/gateways/bogus_test.rb +46 -0
  205. data/test/unit/gateways/braintree_test.rb +126 -0
  206. data/test/unit/gateways/card_stream_test.rb +90 -0
  207. data/test/unit/gateways/cyber_source_test.rb +188 -0
  208. data/test/unit/gateways/data_cash_test.rb +133 -0
  209. data/test/unit/gateways/efsnet_test.rb +123 -0
  210. data/test/unit/gateways/elavon_test.rb +139 -0
  211. data/test/unit/gateways/eway_test.rb +118 -0
  212. data/test/unit/gateways/exact_test.rb +156 -0
  213. data/test/unit/gateways/first_pay_test.rb +125 -0
  214. data/test/unit/gateways/gateway_test.rb +48 -0
  215. data/test/unit/gateways/instapay_test.rb +102 -0
  216. data/test/unit/gateways/linkpoint_test.rb +167 -0
  217. data/test/unit/gateways/merchant_e_solutions_test.rb +169 -0
  218. data/test/unit/gateways/merchant_ware_test.rb +188 -0
  219. data/test/unit/gateways/modern_payments_cim_test.rb +171 -0
  220. data/test/unit/gateways/moneris_test.rb +185 -0
  221. data/test/unit/gateways/moneris_usa_test.rb +183 -0
  222. data/test/unit/gateways/net_registry_test.rb +416 -0
  223. data/test/unit/gateways/netbilling_test.rb +54 -0
  224. data/test/unit/gateways/ogone_test.rb +256 -0
  225. data/test/unit/gateways/pay_junction_test.rb +123 -0
  226. data/test/unit/gateways/pay_secure_test.rb +71 -0
  227. data/test/unit/gateways/payflow_express_test.rb +173 -0
  228. data/test/unit/gateways/payflow_express_uk_test.rb +86 -0
  229. data/test/unit/gateways/payflow_test.rb +305 -0
  230. data/test/unit/gateways/payflow_uk_test.rb +30 -0
  231. data/test/unit/gateways/payment_express_test.rb +195 -0
  232. data/test/unit/gateways/paypal_express_test.rb +382 -0
  233. data/test/unit/gateways/paypal_test.rb +569 -0
  234. data/test/unit/gateways/plugnpay_test.rb +86 -0
  235. data/test/unit/gateways/psigate_test.rb +169 -0
  236. data/test/unit/gateways/psl_card_test.rb +64 -0
  237. data/test/unit/gateways/quickpay_test.rb +112 -0
  238. data/test/unit/gateways/realex_test.rb +151 -0
  239. data/test/unit/gateways/sage_bankcard_test.rb +162 -0
  240. data/test/unit/gateways/sage_pay_test.rb +139 -0
  241. data/test/unit/gateways/sage_virtual_check_test.rb +71 -0
  242. data/test/unit/gateways/secure_pay_au_test.rb +207 -0
  243. data/test/unit/gateways/secure_pay_tech_test.rb +44 -0
  244. data/test/unit/gateways/secure_pay_test.rb +87 -0
  245. data/test/unit/gateways/skip_jack_test.rb +133 -0
  246. data/test/unit/gateways/trans_first_test.rb +112 -0
  247. data/test/unit/gateways/trust_commerce_test.rb +90 -0
  248. data/test/unit/gateways/usa_epay_test.rb +128 -0
  249. data/test/unit/gateways/verifi_test.rb +96 -0
  250. data/test/unit/gateways/viaklix_test.rb +78 -0
  251. data/test/unit/gateways/wirecard_test.rb +250 -0
  252. data/test/unit/generators/test_gateway_generator.rb +46 -0
  253. data/test/unit/generators/test_generator_helper.rb +20 -0
  254. data/test/unit/generators/test_integration_generator.rb +53 -0
  255. data/test/unit/integrations/action_view_helper_test.rb +50 -0
  256. data/test/unit/integrations/bogus_module_test.rb +20 -0
  257. data/test/unit/integrations/chronopay_module_test.rb +13 -0
  258. data/test/unit/integrations/gestpay_module_test.rb +14 -0
  259. data/test/unit/integrations/helpers/bogus_helper_test.rb +28 -0
  260. data/test/unit/integrations/helpers/chronopay_helper_test.rb +67 -0
  261. data/test/unit/integrations/helpers/gestpay_helper_test.rb +100 -0
  262. data/test/unit/integrations/helpers/hi_trust_helper_test.rb +16 -0
  263. data/test/unit/integrations/helpers/nochex_helper_test.rb +53 -0
  264. data/test/unit/integrations/helpers/paypal_helper_test.rb +171 -0
  265. data/test/unit/integrations/helpers/quickpay_helper_test.rb +40 -0
  266. data/test/unit/integrations/helpers/two_checkout_helper_test.rb +92 -0
  267. data/test/unit/integrations/hi_trust_module_test.rb +13 -0
  268. data/test/unit/integrations/nochex_module_test.rb +13 -0
  269. data/test/unit/integrations/notifications/chronopay_notification_test.rb +66 -0
  270. data/test/unit/integrations/notifications/gestpay_notification_test.rb +60 -0
  271. data/test/unit/integrations/notifications/hi_trust_notification_test.rb +59 -0
  272. data/test/unit/integrations/notifications/nochex_notification_test.rb +51 -0
  273. data/test/unit/integrations/notifications/notification_test.rb +54 -0
  274. data/test/unit/integrations/notifications/paypal_notification_test.rb +85 -0
  275. data/test/unit/integrations/notifications/quickpay_notification_test.rb +69 -0
  276. data/test/unit/integrations/notifications/two_checkout_notification_test.rb +55 -0
  277. data/test/unit/integrations/paypal_module_test.rb +28 -0
  278. data/test/unit/integrations/quickpay_module_test.rb +9 -0
  279. data/test/unit/integrations/returns/chronopay_return_test.rb +11 -0
  280. data/test/unit/integrations/returns/gestpay_return_test.rb +10 -0
  281. data/test/unit/integrations/returns/hi_trust_return_test.rb +24 -0
  282. data/test/unit/integrations/returns/nochex_return_test.rb +10 -0
  283. data/test/unit/integrations/returns/paypal_return_test.rb +10 -0
  284. data/test/unit/integrations/returns/return_test.rb +11 -0
  285. data/test/unit/integrations/returns/two_checkout_return_test.rb +24 -0
  286. data/test/unit/integrations/two_checkout_module_test.rb +13 -0
  287. data/test/unit/post_data_test.rb +55 -0
  288. data/test/unit/posts_data_test.rb +48 -0
  289. data/test/unit/response_test.rb +28 -0
  290. data/test/unit/utils_test.rb +7 -0
  291. data/test/unit/validateable_test.rb +60 -0
  292. metadata +396 -0
@@ -0,0 +1,10 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module Gestpay
5
+ class Return < ActiveMerchant::Billing::Integrations::Return
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,93 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ class Helper #:nodoc:
5
+ attr_reader :fields
6
+ class_inheritable_accessor :service_url
7
+ class_inheritable_hash :mappings
8
+ class_inheritable_accessor :country_format
9
+ self.country_format = :alpha2
10
+
11
+ # The application making the calls to the gateway
12
+ # Useful for things like the PayPal build notation (BN) id fields
13
+ class_inheritable_accessor :application_id
14
+ self.application_id = 'ActiveMerchant'
15
+
16
+ def initialize(order, account, options = {})
17
+ options.assert_valid_keys([:amount, :currency, :test])
18
+ @fields = {}
19
+ self.order = order
20
+ self.account = account
21
+ self.amount = options[:amount]
22
+ self.currency = options[:currency]
23
+ end
24
+
25
+ def self.mapping(attribute, options = {})
26
+ self.mappings ||= {}
27
+ self.mappings[attribute] = options
28
+ end
29
+
30
+ def add_field(name, value)
31
+ return if name.blank? || value.blank?
32
+ @fields[name.to_s] = value.to_s
33
+ end
34
+
35
+ def add_fields(subkey, params = {})
36
+ params.each do |k, v|
37
+ field = mappings[subkey][k]
38
+ add_field(field, v) unless field.blank?
39
+ end
40
+ end
41
+
42
+ def billing_address(params = {})
43
+ add_address(:billing_address, params)
44
+ end
45
+
46
+ def shipping_address(params = {})
47
+ add_address(:shipping_address, params)
48
+ end
49
+
50
+ def form_fields
51
+ @fields
52
+ end
53
+
54
+ private
55
+
56
+ def add_address(key, params)
57
+ return if mappings[key].nil?
58
+
59
+ code = lookup_country_code(params.delete(:country))
60
+ add_field(mappings[key][:country], code)
61
+ add_fields(key, params)
62
+ end
63
+
64
+ def lookup_country_code(name_or_code)
65
+ country = Country.find(name_or_code)
66
+ country.code(country_format).to_s
67
+ rescue InvalidCountryCodeError
68
+ name_or_code
69
+ end
70
+
71
+ def method_missing(method_id, *args)
72
+ method_id = method_id.to_s.gsub(/=$/, '').to_sym
73
+ # Return and do nothing if the mapping was not found. This allows
74
+ # For easy substitution of the different integrations
75
+ return if mappings[method_id].nil?
76
+
77
+ mapping = mappings[method_id]
78
+
79
+ case mapping
80
+ when Array
81
+ mapping.each{ |field| add_field(field, args.last) }
82
+ when Hash
83
+ options = args.last.is_a?(Hash) ? args.pop : {}
84
+
85
+ mapping.each{ |key, field| add_field(field, options[key]) }
86
+ else
87
+ add_field(mapping, args.last)
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,26 @@
1
+ require File.dirname(__FILE__) + '/hi_trust/helper.rb'
2
+ require File.dirname(__FILE__) + '/hi_trust/notification.rb'
3
+ require File.dirname(__FILE__) + '/hi_trust/return.rb'
4
+
5
+ module ActiveMerchant #:nodoc:
6
+ module Billing #:nodoc:
7
+ module Integrations #:nodoc:
8
+ module HiTrust
9
+ TEST_URL = 'https://testtrustlink.hitrust.com.tw/TrustLink/TrxReq'
10
+ LIVE_URL = 'https://trustlink.hitrust.com.tw/TrustLink/TrxReq'
11
+
12
+ def self.service_url
13
+ ActiveMerchant::Billing::Base.integration_mode == :test ? TEST_URL : LIVE_URL
14
+ end
15
+
16
+ def self.notification(post)
17
+ Notification.new(post)
18
+ end
19
+
20
+ def self.return(query_string)
21
+ Return.new(query_string)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,58 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module HiTrust
5
+ class Helper < ActiveMerchant::Billing::Integrations::Helper
6
+
7
+ # Transaction types
8
+ # * Auth
9
+ # * AuthRe
10
+ # * Capture
11
+ # * CaptureRe
12
+ # * Refund
13
+ # * RefundRe
14
+ # * Query
15
+ def initialize(order, account, options = {})
16
+ super
17
+ # Perform an authorization by default
18
+ add_field('Type', 'Auth')
19
+
20
+ # Capture the payment right away
21
+ add_field('depositflag', '1')
22
+
23
+ # Disable auto query - who knows what it does?
24
+ add_field('queryflag', '1')
25
+
26
+ add_field('orderdesc', 'Store purchase')
27
+ end
28
+
29
+ mapping :account, 'storeid'
30
+ mapping :amount, 'amount'
31
+
32
+ def amount=(money)
33
+ cents = money.respond_to?(:cents) ? money.cents : money
34
+
35
+ if money.is_a?(String) or cents.to_i < 0
36
+ raise ArgumentError, 'money amount must be either a Money object or a positive integer in cents.'
37
+ end
38
+
39
+ add_field(mappings[:amount], cents)
40
+ end
41
+ # Supported currencies include:
42
+ # * CNY:Chinese Yuan (Renminbi)
43
+ # * TWD:New Taiwan Dollar
44
+ # * HKD:Hong Kong Dollar
45
+ # * USD:US Dollar
46
+ # * AUD:Austrian Dollar
47
+ mapping :currency, 'currency'
48
+
49
+ mapping :order, 'ordernumber'
50
+ mapping :description, 'orderdesc'
51
+
52
+ mapping :notify_url, 'merUpdateURL'
53
+ mapping :return_url, 'returnURL'
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,59 @@
1
+ require 'net/http'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ module Integrations #:nodoc:
6
+ module HiTrust
7
+ class Notification < ActiveMerchant::Billing::Integrations::Notification
8
+ SUCCESS = '00'
9
+
10
+ self.production_ips = [ '203.75.242.8' ]
11
+
12
+ def complete?
13
+ status == 'Completed'
14
+ end
15
+
16
+ def transaction_id
17
+ params['authRRN']
18
+ end
19
+
20
+ def item_id
21
+ params['ordernumber']
22
+ end
23
+
24
+ def received_at
25
+ Time.parse(params['orderdate']) rescue nil
26
+ end
27
+
28
+ def currency
29
+ params['currency']
30
+ end
31
+
32
+ def gross
33
+ sprintf("%.2f", gross_cents.to_f / 100)
34
+ end
35
+
36
+ def gross_cents
37
+ params['approveamount'].to_i
38
+ end
39
+
40
+ def account
41
+ params['storeid']
42
+ end
43
+
44
+ def status
45
+ params['retcode'] == SUCCESS ? 'Completed' : 'Failed'
46
+ end
47
+
48
+ def test?
49
+ ActiveMerchant::Billing::Base.integration_mode == :test
50
+ end
51
+
52
+ def acknowledge
53
+ true
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,67 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module HiTrust
5
+ class Return < ActiveMerchant::Billing::Integrations::Return
6
+ SUCCESS = "00"
7
+ CODES = { "00" => "Operation completed successfully",
8
+ "-1" => "Unable to initialize winsock dll.",
9
+ "-2" => "Can't create stream socket.",
10
+ "-3" => "No Request Message.",
11
+ "-4" => "Can't connect to server.",
12
+ "-5" => "Send socket error.",
13
+ "-6" => "Couldn't receive data.",
14
+ "-7" => "Receive Broken message.",
15
+ "-8" => "Unable to initialize Envirnment.",
16
+ "-9" => "Can't Read Server RSA File.",
17
+ "-10" => "Can't Read Client RSA File.",
18
+ "-11" => "Web Server error.",
19
+ "-12" => "Receive Message type error.",
20
+ "-13" => "No Request Message.",
21
+ "-14" => "No Response Content.",
22
+ "-18" => "Merchant Update URL not found.",
23
+ "-19" => "Server URL not find Domain or IP.",
24
+ "-20" => "Server URL only can fill http or https.",
25
+ "-21" => "Server Config File open error.",
26
+ "-22" => "Server RSA Key File open error.",
27
+ "-23" => "Server RSA Key File read error.",
28
+ "-24" => "Server Config File have some errors, Please to check it.",
29
+ "-25" => "Merchant Config File open error.",
30
+ "-26" => "Merchant RSA Key File open error.",
31
+ "-27" => "Merchant RSA Key File read error.",
32
+ "-28" => "Merchant Config File has some errors, Please to check it.",
33
+ "-29" => "Server Type is unknown.",
34
+ "-30" => "Comm Type is unknown.",
35
+ "-31" => "Input Parameter [ORDERNO] is null or empty.",
36
+ "-32" => "Input Parameter [STOREID] is null or empty.",
37
+ "-33" => "Input Parameter [ORDERDESC] is null or empty.",
38
+ "-34" => "Input Parameter [CURRENCY] is null or empty.",
39
+ "-35" => "Input Parameter [AMOUNT] is null or empty.",
40
+ "-36" => "Input Parameter [ORDERURL] is null or empty.",
41
+ "-37" => "Input Parameter [RETURNURL] is null or empty.",
42
+ "-38" => "Input Parameter [DEPOSIT] is null or empty.",
43
+ "-39" => "Input Parameter [QUERYFLAG] is null or empty.",
44
+ "-40" => "Input Parameter [UPDATEURL] is null or empty.",
45
+ "-41" => "Input Parameter [MERUPDATEURL] is null or empty.",
46
+ "-42" => "Input Parameter [KEY] is null or empty.",
47
+ "-43" => "Input Parameter [MAC] is null or empty.",
48
+ "-44" => "Input Parameter [CIPHER] is null or empty.",
49
+ "-45" => "Input Parameter [TrxType] is wrong.",
50
+ "-100" => "TrustLink Server is closed. Or Merchant Server IP is not consistent with TrustLink Server setting.",
51
+ "-101" => "TrustLink Server receives NULL.",
52
+ "-308" => "Order Number already exists.",
53
+ "positive" => "Response from Bank. Please contact with Acquirer Bank Service or HiTRUST Call Center."
54
+ }
55
+
56
+ def success?
57
+ params['retcode'] == SUCCESS
58
+ end
59
+
60
+ def message
61
+ CODES[ params['retcode'] ]
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,87 @@
1
+ require File.dirname(__FILE__) + '/nochex/helper.rb'
2
+ require File.dirname(__FILE__) + '/nochex/notification.rb'
3
+ require File.dirname(__FILE__) + '/nochex/return.rb'
4
+
5
+ module ActiveMerchant #:nodoc:
6
+ module Billing #:nodoc:
7
+ module Integrations #:nodoc:
8
+ # To start with Nochex, follow the instructions for installing
9
+ # ActiveMerchant as a plugin, as described on
10
+ # http://www.activemerchant.org/.
11
+ #
12
+ # The plugin will automatically add the ActionView helper for
13
+ # ActiveMerchant, which will allow you to make the Nochex payments.
14
+ # The idea behind the helper is that it generates an invisible
15
+ # forwarding screen that will automatically redirect the user.
16
+ # So you would collect all the information about the order and then
17
+ # simply render the hidden form, which redirects the user to Nochex.
18
+ #
19
+ # The syntax of the helper is as follows:
20
+ #
21
+ # <% payment_service_for 'order id', 'nochex_user_id',
22
+ # :amount => 50.00,
23
+ # :service => :nochex,
24
+ # :html => { :id => 'nochex-form' } do |service| %>
25
+ #
26
+ # <% service.customer :first_name => 'Cody',
27
+ # :last_name => 'Fauser',
28
+ # :phone => '(555)555-5555',
29
+ # :email => 'cody@example.com' %>
30
+ #
31
+ # <% service.billing_address :city => 'Ottawa',
32
+ # :address1 => '21 Snowy Brook Lane',
33
+ # :address2 => 'Apt. 36',
34
+ # :state => 'ON',
35
+ # :country => 'CA',
36
+ # :zip => 'K1J1E5' %>
37
+ #
38
+ # <% service.invoice '#1000' %>
39
+ # <% service.shipping '0.00' %>
40
+ # <% service.tax '0.00' %>
41
+ #
42
+ # <% service.notify_url url_for(:action => 'notify', :only_path => false) %>
43
+ # <% service.return_url url_for(:action => 'done', :only_path => false) %>
44
+ # <% service.cancel_return_url 'http://mystore.com' %>
45
+ # <% end %>
46
+ #
47
+ # The notify_url is the URL that the Nochex IPN will be sent. You can
48
+ # handle the notification in your controller action as follows:
49
+ #
50
+ # class NotificationController < ApplicationController
51
+ # include ActiveMerchant::Billing::Integrations
52
+ #
53
+ # def notify
54
+ # notification = Nochex::Notification.new(request.raw_post)
55
+ #
56
+ # begin
57
+ # # Acknowledge notification with Nochex
58
+ # raise StandardError, 'Illegal Notification' unless notification.acknowledge
59
+ # # Process the payment
60
+ # rescue => e
61
+ # logger.warn("Illegal notification received: #{e.message}")
62
+ # ensure
63
+ # head(:ok)
64
+ # end
65
+ # end
66
+ # end
67
+ module Nochex
68
+
69
+ mattr_accessor :service_url
70
+ self.service_url = 'https://www.nochex.com/nochex.dll/checkout'
71
+
72
+ mattr_accessor :notification_confirmation_url
73
+ self.notification_confirmation_url = 'https://www.nochex.com/nochex.dll/apc/apc'
74
+
75
+ # Simply a convenience method that returns a new
76
+ # ActiveMerchant::Billing::Integrations::Nochex::Notification
77
+ def self.notification(post)
78
+ Notification.new(post)
79
+ end
80
+
81
+ def self.return(query_string)
82
+ Return.new(query_string)
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,68 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module Nochex
5
+ class Helper < ActiveMerchant::Billing::Integrations::Helper
6
+ # Required Parameters
7
+ # email
8
+ # amount
9
+ mapping :account, 'email'
10
+ mapping :amount, 'amount'
11
+
12
+ # Set the field status = test for testing with accounts:
13
+ # Account Password
14
+ # test1@nochex.com 123456
15
+ # test2@nochex.com 123456
16
+ # def initialize(order, account, options = {})
17
+ # super
18
+ # add_field('status', 'test')
19
+ # end
20
+
21
+ # Need to format the amount to have 2 decimal places
22
+ def amount=(money)
23
+ cents = money.respond_to?(:cents) ? money.cents : money
24
+ if money.is_a?(String) or cents.to_i <= 0
25
+ raise ArgumentError, 'money amount must be either a Money object or a positive integer in cents.'
26
+ end
27
+ add_field mappings[:amount], sprintf("%.2f", cents.to_f/100)
28
+ end
29
+
30
+ # Optional Parameters
31
+ # ordernumber
32
+ mapping :order, 'ordernumber'
33
+
34
+ # firstname
35
+ # lastname
36
+ # email_address_sender
37
+ mapping :customer, :first_name => 'firstname',
38
+ :last_name => 'lastname',
39
+ :email => 'email_address_sender'
40
+
41
+ # town
42
+ # firstline
43
+ # county
44
+ # postcode
45
+ mapping :billing_address, :city => 'town',
46
+ :address1 => 'firstline',
47
+ :state => 'county',
48
+ :zip => 'postcode'
49
+
50
+ # responderurl
51
+ mapping :notify_url, 'responderurl'
52
+
53
+ # returnurl
54
+ mapping :return_url, 'returnurl'
55
+
56
+ # cancelurl
57
+ mapping :cancel_return_url, 'cancelurl'
58
+
59
+ # description
60
+ mapping :description, 'description'
61
+
62
+ # Currently unmapped
63
+ # logo
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end