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,11 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module Bogus
5
+ class Notification < ActiveMerchant::Billing::Integrations::Notification
6
+
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module Bogus
5
+ class Return < ActiveMerchant::Billing::Integrations::Return
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,22 @@
1
+ require 'active_merchant/billing/integrations/chronopay/helper.rb'
2
+ require 'active_merchant/billing/integrations/chronopay/notification.rb'
3
+ require 'active_merchant/billing/integrations/chronopay/return.rb'
4
+
5
+ module ActiveMerchant #:nodoc:
6
+ module Billing #:nodoc:
7
+ module Integrations #:nodoc:
8
+ module Chronopay
9
+ mattr_accessor :service_url
10
+ self.service_url = 'https://secure.chronopay.com/index_shop.cgi'
11
+
12
+ def self.notification(post)
13
+ Notification.new(post)
14
+ end
15
+
16
+ def self.return(query_string)
17
+ Return.new(query_string)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,81 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module Chronopay
5
+ class Helper < ActiveMerchant::Billing::Integrations::Helper
6
+ self.country_format = :alpha3
7
+
8
+ def initialize(order, account, options = {})
9
+ super
10
+ add_field('cb_type', 'p')
11
+ add_field('language', 'EN')
12
+ end
13
+
14
+ # product_id
15
+ mapping :account, 'product_id'
16
+ # product_name
17
+ mapping :invoice, 'product_name'
18
+ # product_price
19
+ mapping :amount, 'product_price'
20
+ # product_price_currency
21
+ mapping :currency, 'product_price_currency'
22
+
23
+ # f_name
24
+ # s_name
25
+ # email
26
+ mapping :customer, :first_name => 'f_name',
27
+ :last_name => 's_name',
28
+ :phone => 'phone',
29
+ :email => 'email'
30
+
31
+ # city
32
+ # street
33
+ # state
34
+ # zip
35
+ # country - The country must be a 3 digit country code
36
+ # phone
37
+
38
+ mapping :billing_address, :city => 'city',
39
+ :address1 => 'street',
40
+ :state => 'state',
41
+ :zip => 'zip',
42
+ :country => 'country'
43
+
44
+ def billing_address(mapping = {})
45
+ # Gets the country code in the appropriate format or returns what we were given
46
+ # The appropriate format for Chronopay is the alpha 3 country code
47
+ country_code = lookup_country_code(mapping.delete(:country))
48
+ add_field(mappings[:billing_address][:country], country_code)
49
+
50
+ countries_with_supported_states = ['USA', 'CAN']
51
+ if !countries_with_supported_states.include?(country_code)
52
+ mapping.delete(:state)
53
+ add_field(mappings[:billing_address][:state], 'XX')
54
+ end
55
+ mapping.each do |k, v|
56
+ field = mappings[:billing_address][k]
57
+ add_field(field, v) unless field.nil?
58
+ end
59
+ end
60
+
61
+ # card_no
62
+ # exp_month
63
+ # exp_year
64
+ mapping :credit_card, :number => 'card_no',
65
+ :expiry_month => 'exp_month',
66
+ :expiry_year => 'exp_year'
67
+
68
+ # cb_url
69
+ mapping :notify_url, 'cb_url'
70
+
71
+ # cs1
72
+ mapping :order, 'cs1'
73
+
74
+ # cs2
75
+ # cs3
76
+ # decline_url
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,156 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module Chronopay
5
+ class Notification < ActiveMerchant::Billing::Integrations::Notification
6
+ def complete?
7
+ status == 'Completed'
8
+ end
9
+
10
+ # Status of transaction. List of possible values:
11
+ # <tt>onetime – one time payment has been made, no repayment required;</tt>::
12
+ # <tt>initial – first payment has been made, repayment required in corresponding period;</tt>::
13
+ # <tt>decline – charge request has been rejected;</tt>::
14
+ # <tt>rebill – repayment has been made together with initial transaction;</ttt>::
15
+ # <tt>cancel – repayments has been disabled;</tt>::
16
+ # <tt>expire – customer’s access to restricted zone membership has been expired;</tt>::
17
+ # <tt>refund – request to refund has been received;</tt>::
18
+ # <tt>chargeback – request to chargeback has been received.</tt>::
19
+ #
20
+ # This implementation of Chronopay does not support subscriptions.
21
+ # The status codes used are matched to the status codes that Paypal
22
+ # sends. See Paypal::Notification#status for more details
23
+ def status
24
+ case params['transaction_type']
25
+ when 'onetime'
26
+ 'Completed'
27
+ when 'refund'
28
+ 'Refunded'
29
+ when 'chargeback'
30
+ 'Reversed'
31
+ else
32
+ 'Failed'
33
+ end
34
+ end
35
+
36
+ # Unique ID of transaction
37
+ def transaction_id
38
+ params['transaction_id']
39
+ end
40
+
41
+ # Unique ID of customer
42
+ def customer_id
43
+ params['customer_id']
44
+ end
45
+
46
+ # Unique ID of Merchant’s web-site
47
+ def site_id
48
+ params['site_id']
49
+ end
50
+
51
+ # ID of a product that was purchased
52
+ def product_id
53
+ params['product_id']
54
+ end
55
+
56
+ # Language
57
+ def language
58
+ params['language']
59
+ end
60
+
61
+ def received_at
62
+ Time.parse("#{date} #{time}") unless date.blank? || time.blank?
63
+ end
64
+
65
+ # Date of transaction in MM/DD/YYYY format
66
+ def date
67
+ params['date']
68
+ end
69
+
70
+ # Time of transaction in HH:MM:SS format
71
+ def time
72
+ params['time']
73
+ end
74
+
75
+ # The customer's full name
76
+ def name
77
+ params['name']
78
+ end
79
+
80
+ # The customer's email address
81
+ def email
82
+ params['email']
83
+ end
84
+
85
+ # The customer's street address
86
+ def street
87
+ params['street']
88
+ end
89
+
90
+ # The customer's country - 3 digit country code
91
+ def country
92
+ params['country']
93
+ end
94
+
95
+ # The customer's city
96
+ def city
97
+ params['city']
98
+ end
99
+
100
+ # The customer's zip
101
+ def zip
102
+ params['zip']
103
+ end
104
+
105
+ # The customer's state. Only useful for US Customers
106
+ def state
107
+ params['state']
108
+ end
109
+
110
+ # Customer’s login for restricted access zone of Merchant’s Web-site
111
+ def username
112
+ params['username']
113
+ end
114
+
115
+ # Customer's password for restricted access zone of Merchant’s Web-site, as chosen
116
+ def password
117
+ params['password']
118
+ end
119
+
120
+ # The item id passed in the first custom parameter
121
+ def item_id
122
+ params['cs1']
123
+ end
124
+
125
+ # Additional parameter
126
+ def custom2
127
+ params['cs2']
128
+ end
129
+
130
+ # Additional parameter
131
+ def custom3
132
+ params['cs3']
133
+ end
134
+
135
+ # The currency the purchase was made in
136
+ def currency
137
+ params['currency']
138
+ end
139
+
140
+ # the money amount we received in X.2 decimal.
141
+ def gross
142
+ params['total']
143
+ end
144
+
145
+ def test?
146
+ date.blank? && time.blank? && transaction_id.blank?
147
+ end
148
+
149
+ def acknowledge
150
+ true
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
@@ -0,0 +1,10 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module Chronopay
5
+ class Return < ActiveMerchant::Billing::Integrations::Return
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,26 @@
1
+ # With help from Giovanni Intini and his code for RGestPay - http://medlar.it/it/progetti/rgestpay
2
+
3
+ require File.dirname(__FILE__) + '/gestpay/common.rb'
4
+ require File.dirname(__FILE__) + '/gestpay/helper.rb'
5
+ require File.dirname(__FILE__) + '/gestpay/notification.rb'
6
+ require File.dirname(__FILE__) + '/gestpay/return.rb'
7
+
8
+ module ActiveMerchant #:nodoc:
9
+ module Billing #:nodoc:
10
+ module Integrations #:nodoc:
11
+ module Gestpay
12
+
13
+ mattr_accessor :service_url
14
+ self.service_url = 'https://ecomm.sella.it/gestpay/pagam.asp'
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,42 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module Gestpay
5
+ module Common
6
+ VERSION = "2.0"
7
+ ENCRYPTION_PATH = "/CryptHTTPS/Encrypt.asp"
8
+ DECRYPTION_PATH = "/CryptHTTPS/Decrypt.asp"
9
+ DELIMITER = '*P1*'
10
+
11
+ CURRENCY_MAPPING = {
12
+ 'EUR' => '242',
13
+ 'ITL' => '18',
14
+ 'BRL' => '234',
15
+ 'USD' => '1',
16
+ 'JPY' => '71',
17
+ 'HKD' => '103'
18
+ }
19
+
20
+ def parse_response(response)
21
+ case response
22
+ when /#cryptstring#(.*)#\/cryptstring#/, /#decryptstring#(.*)#\/decryptstring#/
23
+ $1
24
+ when /#error#(.*)#\/error#/
25
+ raise StandardError, "An error occurred retrieving the encrypted string from GestPay: #{$1}"
26
+ else
27
+ raise StandardError, "No response was received by GestPay"
28
+ end
29
+ end
30
+
31
+ def ssl_get(url, path)
32
+ uri = URI.parse(url)
33
+ site = Net::HTTP.new(uri.host, uri.port)
34
+ site.use_ssl = true
35
+ site.verify_mode = OpenSSL::SSL::VERIFY_NONE
36
+ site.get(path).body
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,70 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module Gestpay
5
+ class Helper < ActiveMerchant::Billing::Integrations::Helper
6
+ include Common
7
+ # Valid language codes
8
+ # Italian => 1
9
+ # English => 2
10
+ # Spanish => 3
11
+ # French => 4
12
+ # Tedesco => 5
13
+ def initialize(order, account, options = {})
14
+ super
15
+ add_field('PAY1_IDLANGUAGE', 2)
16
+ end
17
+
18
+ mapping :account, 'ShopLogin'
19
+
20
+ mapping :amount, 'PAY1_AMOUNT'
21
+ mapping :currency, 'PAY1_UICCODE'
22
+
23
+ mapping :order, 'PAY1_SHOPTRANSACTIONID'
24
+
25
+ # Buyer name PAY1_CHNAME
26
+ mapping :customer, :email => 'PAY1_CHEMAIL'
27
+
28
+ mapping :credit_card, :number => 'PAY1_CARDNUMBER',
29
+ :expiry_month => 'PAY1_EXPMONTH',
30
+ :expiry_year => 'PAY1_EXPYEAR',
31
+ :verification_value => 'PAY1_CVV'
32
+
33
+ def customer(params = {})
34
+ add_field(mappings[:customer][:email], params[:email])
35
+ add_field('PAY1_CHNAME', "#{params[:first_name]} #{params[:last_name]}")
36
+ end
37
+
38
+ def currency=(currency_code)
39
+ code = CURRENCY_MAPPING[currency_code]
40
+ raise StandardError, "Invalid currency code #{currency_code} specified" if code.nil?
41
+
42
+ add_field(mappings[:currency], code)
43
+ end
44
+
45
+ def form_fields
46
+ @encrypted_data ||= get_encrypted_string
47
+
48
+ {
49
+ 'a' => @fields['ShopLogin'],
50
+ 'b' => @encrypted_data
51
+ }
52
+ end
53
+
54
+ def get_encrypted_string
55
+ response = ssl_get(Gestpay.service_url, encryption_query_string)
56
+ parse_response(response)
57
+ end
58
+
59
+ def encryption_query_string
60
+ fields = ['PAY1_AMOUNT', 'PAY1_SHOPTRANSACTIONID', 'PAY1_UICCODE']
61
+
62
+ encoded_params = fields.collect{ |field| "#{field}=#{CGI.escape(@fields[field])}" }.join(DELIMITER)
63
+
64
+ "#{ENCRYPTION_PATH}?a=" + CGI.escape(@fields['ShopLogin']) + "&b=" + encoded_params + "&c=" + CGI.escape(VERSION)
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,83 @@
1
+ require 'net/http'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ module Integrations #:nodoc:
6
+ module Gestpay
7
+ class Notification < ActiveMerchant::Billing::Integrations::Notification
8
+ include Common
9
+
10
+ def complete?
11
+ status == 'Completed'
12
+ end
13
+
14
+ # The important param
15
+ def item_id
16
+ params['PAY1_SHOPTRANSACTIONID']
17
+ end
18
+
19
+ def transaction_id
20
+ params['PAY1_BANKTRANSACTIONID']
21
+ end
22
+
23
+ # the money amount we received in X.2 decimal.
24
+ def gross
25
+ params['PAY1_AMOUNT']
26
+ end
27
+
28
+ def currency
29
+ CURRENCY_MAPPING.index(params['PAY1_UICCODE'])
30
+ end
31
+
32
+ def test?
33
+ false
34
+ end
35
+
36
+ def status
37
+ case params['PAY1_TRANSACTIONRESULT']
38
+ when 'OK'
39
+ 'Completed'
40
+ else
41
+ 'Failed'
42
+ end
43
+ end
44
+
45
+ def acknowledge
46
+ true
47
+ end
48
+
49
+ private
50
+ # Take the posted data and move the relevant data into a hash
51
+ def parse(query_string)
52
+ @raw = query_string
53
+
54
+ return if query_string.blank?
55
+ encrypted_params = parse_delimited_string(query_string)
56
+
57
+ return if encrypted_params['a'].blank? || encrypted_params['b'].blank?
58
+ @params = decrypt_data(encrypted_params['a'], encrypted_params['b'])
59
+ end
60
+
61
+ def parse_delimited_string(string, delimiter = '&', unencode_cgi = false)
62
+ result = {}
63
+ for line in string.split(delimiter)
64
+ key, value = *line.scan( %r{^(\w+)\=(.*)$} ).flatten
65
+ result[key] = unencode_cgi ? CGI.unescape(value) : value
66
+ end
67
+ result
68
+ end
69
+
70
+ def decrypt_data(shop_login, encrypted_string)
71
+ response = ssl_get(Gestpay.service_url, decryption_query_string(shop_login, encrypted_string))
72
+ encoded_response = parse_response(response)
73
+ parse_delimited_string(encoded_response, DELIMITER, true)
74
+ end
75
+
76
+ def decryption_query_string(shop_login, encrypted_string)
77
+ "#{DECRYPTION_PATH}?a=" + CGI.escape(shop_login) + "&b=" + encrypted_string + "&c=" + CGI.escape(VERSION)
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end