abtain_billing 1.0 → 1.02

Sign up to get free protection for your applications and to get access to all the features.
Files changed (237) hide show
  1. data/CHANGELOG +2 -472
  2. data/CONTRIBUTORS +0 -126
  3. data/MIT-LICENSE +2 -2
  4. data/Rakefile +3 -3
  5. data/init.rb +3 -3
  6. data/lib/{active_merchant.rb → abtain_billing.rb} +18 -18
  7. data/lib/{active_merchant → abtain_billing}/billing/avs_result.rb +1 -1
  8. data/lib/{active_merchant → abtain_billing}/billing/base.rb +7 -7
  9. data/lib/{active_merchant → abtain_billing}/billing/check.rb +1 -1
  10. data/lib/{active_merchant → abtain_billing}/billing/credit_card.rb +2 -2
  11. data/lib/{active_merchant → abtain_billing}/billing/credit_card_formatting.rb +1 -1
  12. data/lib/{active_merchant → abtain_billing}/billing/credit_card_methods.rb +2 -2
  13. data/lib/{active_merchant → abtain_billing}/billing/cvv_result.rb +1 -1
  14. data/lib/{active_merchant → abtain_billing}/billing/expiry_date.rb +1 -1
  15. data/lib/{active_merchant → abtain_billing}/billing/gateway.rb +5 -5
  16. data/lib/{active_merchant → abtain_billing}/billing/gateways.rb +1 -1
  17. data/lib/{active_merchant → abtain_billing}/billing/gateways/authorize_net.rb +3 -1
  18. data/lib/{active_merchant → abtain_billing}/billing/gateways/authorize_net_cim.rb +2 -1
  19. data/lib/{active_merchant → abtain_billing}/billing/gateways/bogus.rb +1 -1
  20. data/lib/{active_merchant → abtain_billing}/billing/gateways/cyber_source.rb +1 -1
  21. data/lib/abtain_billing/billing/integrations.rb +22 -0
  22. data/lib/{active_merchant → abtain_billing}/billing/integrations/action_view_helper.rb +2 -2
  23. data/lib/{active_merchant → abtain_billing}/billing/integrations/bogus.rb +4 -4
  24. data/lib/{active_merchant → abtain_billing}/billing/integrations/bogus/helper.rb +2 -2
  25. data/lib/{active_merchant → abtain_billing}/billing/integrations/bogus/notification.rb +2 -2
  26. data/lib/{active_merchant → abtain_billing}/billing/integrations/bogus/return.rb +2 -2
  27. data/lib/{active_merchant → abtain_billing}/billing/integrations/chronopay.rb +4 -4
  28. data/lib/{active_merchant → abtain_billing}/billing/integrations/chronopay/helper.rb +2 -2
  29. data/lib/{active_merchant → abtain_billing}/billing/integrations/chronopay/notification.rb +2 -2
  30. data/lib/{active_merchant → abtain_billing}/billing/integrations/chronopay/return.rb +2 -2
  31. data/lib/{active_merchant → abtain_billing}/billing/integrations/gestpay.rb +1 -1
  32. data/lib/{active_merchant → abtain_billing}/billing/integrations/gestpay/common.rb +1 -1
  33. data/lib/{active_merchant → abtain_billing}/billing/integrations/gestpay/helper.rb +2 -2
  34. data/lib/{active_merchant → abtain_billing}/billing/integrations/gestpay/notification.rb +2 -2
  35. data/lib/{active_merchant → abtain_billing}/billing/integrations/gestpay/return.rb +2 -2
  36. data/lib/{active_merchant → abtain_billing}/billing/integrations/helper.rb +2 -2
  37. data/lib/{active_merchant → abtain_billing}/billing/integrations/hi_trust.rb +2 -2
  38. data/lib/{active_merchant → abtain_billing}/billing/integrations/hi_trust/helper.rb +2 -2
  39. data/lib/{active_merchant → abtain_billing}/billing/integrations/hi_trust/notification.rb +3 -3
  40. data/lib/{active_merchant → abtain_billing}/billing/integrations/hi_trust/return.rb +2 -2
  41. data/lib/{active_merchant → abtain_billing}/billing/integrations/nochex.rb +5 -5
  42. data/lib/{active_merchant → abtain_billing}/billing/integrations/nochex/helper.rb +2 -2
  43. data/lib/{active_merchant → abtain_billing}/billing/integrations/nochex/notification.rb +3 -3
  44. data/lib/{active_merchant → abtain_billing}/billing/integrations/nochex/return.rb +2 -2
  45. data/lib/{active_merchant → abtain_billing}/billing/integrations/notification.rb +2 -2
  46. data/lib/{active_merchant → abtain_billing}/billing/integrations/paypal.rb +5 -5
  47. data/lib/{active_merchant → abtain_billing}/billing/integrations/paypal/helper.rb +2 -2
  48. data/lib/{active_merchant → abtain_billing}/billing/integrations/paypal/notification.rb +3 -3
  49. data/lib/{active_merchant → abtain_billing}/billing/integrations/paypal/return.rb +2 -2
  50. data/lib/{active_merchant → abtain_billing}/billing/integrations/quickpay.rb +1 -1
  51. data/lib/{active_merchant → abtain_billing}/billing/integrations/quickpay/helper.rb +2 -2
  52. data/lib/{active_merchant → abtain_billing}/billing/integrations/quickpay/notification.rb +2 -2
  53. data/lib/{active_merchant → abtain_billing}/billing/integrations/return.rb +1 -1
  54. data/lib/{active_merchant → abtain_billing}/billing/integrations/two_checkout.rb +1 -1
  55. data/lib/{active_merchant → abtain_billing}/billing/integrations/two_checkout/helper.rb +3 -3
  56. data/lib/{active_merchant → abtain_billing}/billing/integrations/two_checkout/notification.rb +2 -2
  57. data/lib/{active_merchant → abtain_billing}/billing/integrations/two_checkout/return.rb +2 -2
  58. data/lib/{active_merchant → abtain_billing}/billing/response.rb +2 -2
  59. data/lib/{active_merchant → abtain_billing}/lib/connection.rb +3 -3
  60. data/lib/{active_merchant → abtain_billing}/lib/country.rb +1 -1
  61. data/lib/abtain_billing/lib/error.rb +4 -0
  62. data/lib/{active_merchant → abtain_billing}/lib/post_data.rb +0 -0
  63. data/lib/{active_merchant → abtain_billing}/lib/posts_data.rb +1 -1
  64. data/lib/{active_merchant → abtain_billing}/lib/requires_parameters.rb +1 -1
  65. data/lib/{active_merchant → abtain_billing}/lib/utils.rb +1 -1
  66. data/lib/{active_merchant → abtain_billing}/lib/validateable.rb +1 -1
  67. data/lib/support/gateway_support.rb +3 -3
  68. data/test/fixtures.yml +2 -2
  69. data/test/remote/integrations/remote_gestpay_integration_test.rb +1 -1
  70. data/test/remote/integrations/remote_paypal_integration_test.rb +3 -3
  71. data/test/test_helper.rb +10 -10
  72. data/test/unit/base_test.rb +2 -2
  73. data/test/unit/connection_test.rb +11 -11
  74. data/test/unit/country_code_test.rb +1 -1
  75. data/test/unit/country_test.rb +1 -1
  76. data/test/unit/credit_card_formatting_test.rb +1 -1
  77. data/test/unit/credit_card_methods_test.rb +2 -2
  78. data/test/unit/gateways/authorize_net_test.rb +2 -2
  79. data/test/unit/gateways/bogus_test.rb +1 -1
  80. data/test/unit/gateways/data_cash_test.rb +1 -1
  81. data/test/unit/gateways/jetpay_test.rb +1 -1
  82. data/test/unit/gateways/merchant_ware_test.rb +1 -1
  83. data/test/unit/gateways/payflow_express_test.rb +1 -1
  84. data/test/unit/gateways/payflow_test.rb +5 -5
  85. data/test/unit/gateways/paypal_express_test.rb +2 -2
  86. data/test/unit/gateways/paypal_test.rb +2 -2
  87. data/test/unit/gateways/realex_test.rb +1 -1
  88. data/test/unit/gateways/verifi_test.rb +1 -1
  89. data/test/unit/integrations/action_view_helper_test.rb +1 -1
  90. data/test/unit/integrations/bogus_module_test.rb +1 -1
  91. data/test/unit/integrations/chronopay_module_test.rb +1 -1
  92. data/test/unit/integrations/gestpay_module_test.rb +1 -1
  93. data/test/unit/integrations/helpers/bogus_helper_test.rb +1 -1
  94. data/test/unit/integrations/helpers/chronopay_helper_test.rb +1 -1
  95. data/test/unit/integrations/helpers/gestpay_helper_test.rb +1 -1
  96. data/test/unit/integrations/helpers/hi_trust_helper_test.rb +1 -1
  97. data/test/unit/integrations/helpers/nochex_helper_test.rb +1 -1
  98. data/test/unit/integrations/helpers/paypal_helper_test.rb +2 -2
  99. data/test/unit/integrations/helpers/quickpay_helper_test.rb +1 -1
  100. data/test/unit/integrations/helpers/two_checkout_helper_test.rb +4 -4
  101. data/test/unit/integrations/hi_trust_module_test.rb +1 -1
  102. data/test/unit/integrations/nochex_module_test.rb +1 -1
  103. data/test/unit/integrations/notifications/chronopay_notification_test.rb +1 -1
  104. data/test/unit/integrations/notifications/gestpay_notification_test.rb +1 -1
  105. data/test/unit/integrations/notifications/hi_trust_notification_test.rb +4 -4
  106. data/test/unit/integrations/notifications/nochex_notification_test.rb +1 -1
  107. data/test/unit/integrations/notifications/notification_test.rb +4 -4
  108. data/test/unit/integrations/notifications/paypal_notification_test.rb +1 -1
  109. data/test/unit/integrations/notifications/quickpay_notification_test.rb +1 -1
  110. data/test/unit/integrations/notifications/two_checkout_notification_test.rb +1 -1
  111. data/test/unit/integrations/paypal_module_test.rb +4 -4
  112. data/test/unit/integrations/quickpay_module_test.rb +1 -1
  113. data/test/unit/integrations/returns/chronopay_return_test.rb +1 -1
  114. data/test/unit/integrations/returns/gestpay_return_test.rb +1 -1
  115. data/test/unit/integrations/returns/hi_trust_return_test.rb +1 -1
  116. data/test/unit/integrations/returns/nochex_return_test.rb +1 -1
  117. data/test/unit/integrations/returns/paypal_return_test.rb +1 -1
  118. data/test/unit/integrations/returns/return_test.rb +1 -1
  119. data/test/unit/integrations/returns/two_checkout_return_test.rb +1 -1
  120. data/test/unit/integrations/two_checkout_module_test.rb +1 -1
  121. data/test/unit/posts_data_test.rb +5 -5
  122. data/test/unit/utils_test.rb +1 -1
  123. data/test/unit/validateable_test.rb +2 -2
  124. metadata +63 -174
  125. data/lib/active_merchant/billing/gateways/beanstream.rb +0 -102
  126. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +0 -233
  127. data/lib/active_merchant/billing/gateways/beanstream_interac.rb +0 -54
  128. data/lib/active_merchant/billing/gateways/braintree.rb +0 -17
  129. data/lib/active_merchant/billing/gateways/card_stream.rb +0 -230
  130. data/lib/active_merchant/billing/gateways/data_cash.rb +0 -595
  131. data/lib/active_merchant/billing/gateways/efsnet.rb +0 -229
  132. data/lib/active_merchant/billing/gateways/elavon.rb +0 -106
  133. data/lib/active_merchant/billing/gateways/eway.rb +0 -277
  134. data/lib/active_merchant/billing/gateways/exact.rb +0 -222
  135. data/lib/active_merchant/billing/gateways/first_pay.rb +0 -172
  136. data/lib/active_merchant/billing/gateways/instapay.rb +0 -164
  137. data/lib/active_merchant/billing/gateways/jetpay.rb +0 -270
  138. data/lib/active_merchant/billing/gateways/linkpoint.rb +0 -449
  139. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +0 -154
  140. data/lib/active_merchant/billing/gateways/merchant_ware.rb +0 -283
  141. data/lib/active_merchant/billing/gateways/modern_payments.rb +0 -36
  142. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +0 -214
  143. data/lib/active_merchant/billing/gateways/moneris.rb +0 -205
  144. data/lib/active_merchant/billing/gateways/net_registry.rb +0 -189
  145. data/lib/active_merchant/billing/gateways/netbilling.rb +0 -168
  146. data/lib/active_merchant/billing/gateways/ogone.rb +0 -279
  147. data/lib/active_merchant/billing/gateways/pay_junction.rb +0 -392
  148. data/lib/active_merchant/billing/gateways/pay_secure.rb +0 -120
  149. data/lib/active_merchant/billing/gateways/payflow.rb +0 -236
  150. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +0 -207
  151. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +0 -39
  152. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +0 -13
  153. data/lib/active_merchant/billing/gateways/payflow_express.rb +0 -138
  154. data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +0 -15
  155. data/lib/active_merchant/billing/gateways/payflow_uk.rb +0 -21
  156. data/lib/active_merchant/billing/gateways/payment_express.rb +0 -230
  157. data/lib/active_merchant/billing/gateways/paypal.rb +0 -121
  158. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +0 -326
  159. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +0 -38
  160. data/lib/active_merchant/billing/gateways/paypal_ca.rb +0 -13
  161. data/lib/active_merchant/billing/gateways/paypal_express.rb +0 -130
  162. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +0 -20
  163. data/lib/active_merchant/billing/gateways/plugnpay.rb +0 -292
  164. data/lib/active_merchant/billing/gateways/psigate.rb +0 -214
  165. data/lib/active_merchant/billing/gateways/psl_card.rb +0 -306
  166. data/lib/active_merchant/billing/gateways/quickpay.rb +0 -213
  167. data/lib/active_merchant/billing/gateways/realex.rb +0 -200
  168. data/lib/active_merchant/billing/gateways/sage.rb +0 -146
  169. data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +0 -88
  170. data/lib/active_merchant/billing/gateways/sage/sage_core.rb +0 -116
  171. data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +0 -97
  172. data/lib/active_merchant/billing/gateways/sage_pay.rb +0 -308
  173. data/lib/active_merchant/billing/gateways/sallie_mae.rb +0 -144
  174. data/lib/active_merchant/billing/gateways/secure_pay.rb +0 -31
  175. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +0 -157
  176. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +0 -113
  177. data/lib/active_merchant/billing/gateways/skip_jack.rb +0 -452
  178. data/lib/active_merchant/billing/gateways/smart_ps.rb +0 -254
  179. data/lib/active_merchant/billing/gateways/trans_first.rb +0 -127
  180. data/lib/active_merchant/billing/gateways/transax.rb +0 -26
  181. data/lib/active_merchant/billing/gateways/trust_commerce.rb +0 -418
  182. data/lib/active_merchant/billing/gateways/usa_epay.rb +0 -194
  183. data/lib/active_merchant/billing/gateways/verifi.rb +0 -228
  184. data/lib/active_merchant/billing/gateways/viaklix.rb +0 -189
  185. data/lib/active_merchant/billing/gateways/wirecard.rb +0 -318
  186. data/lib/active_merchant/billing/integrations.rb +0 -22
  187. data/lib/active_merchant/lib/error.rb +0 -4
  188. data/test/remote/gateways/remote_beanstream_interac_test.rb +0 -53
  189. data/test/remote/gateways/remote_beanstream_test.rb +0 -150
  190. data/test/remote/gateways/remote_braintree_test.rb +0 -154
  191. data/test/remote/gateways/remote_card_stream_test.rb +0 -148
  192. data/test/remote/gateways/remote_data_cash_test.rb +0 -357
  193. data/test/remote/gateways/remote_efsnet_test.rb +0 -81
  194. data/test/remote/gateways/remote_elavon_test.rb +0 -66
  195. data/test/remote/gateways/remote_eway_test.rb +0 -74
  196. data/test/remote/gateways/remote_exact_test.rb +0 -60
  197. data/test/remote/gateways/remote_first_pay_test.rb +0 -87
  198. data/test/remote/gateways/remote_instapay_test.rb +0 -61
  199. data/test/remote/gateways/remote_jetpay_test.rb +0 -103
  200. data/test/remote/gateways/remote_linkpoint_test.rb +0 -121
  201. data/test/remote/gateways/remote_merchant_e_solutions_test.rb +0 -173
  202. data/test/remote/gateways/remote_merchant_ware_test.rb +0 -113
  203. data/test/remote/gateways/remote_modern_payments_cim_test.rb +0 -58
  204. data/test/remote/gateways/remote_modern_payments_test.rb +0 -43
  205. data/test/remote/gateways/remote_moneris_test.rb +0 -82
  206. data/test/remote/gateways/remote_net_registry_test.rb +0 -85
  207. data/test/remote/gateways/remote_netbilling_test.rb +0 -70
  208. data/test/remote/gateways/remote_ogone_test.rb +0 -115
  209. data/test/remote/gateways/remote_pay_junction_test.rb +0 -143
  210. data/test/remote/gateways/remote_pay_secure_test.rb +0 -39
  211. data/test/remote/gateways/remote_payflow_express_test.rb +0 -50
  212. data/test/remote/gateways/remote_payflow_test.rb +0 -237
  213. data/test/remote/gateways/remote_payflow_uk_test.rb +0 -173
  214. data/test/remote/gateways/remote_payment_express_test.rb +0 -136
  215. data/test/remote/gateways/remote_paypal_express_test.rb +0 -49
  216. data/test/remote/gateways/remote_paypal_test.rb +0 -191
  217. data/test/remote/gateways/remote_plugnpay_test.rb +0 -72
  218. data/test/remote/gateways/remote_psigate_test.rb +0 -50
  219. data/test/remote/gateways/remote_psl_card_test.rb +0 -125
  220. data/test/remote/gateways/remote_quickpay_test.rb +0 -190
  221. data/test/remote/gateways/remote_realex_test.rb +0 -224
  222. data/test/remote/gateways/remote_sage_bankcard_test.rb +0 -109
  223. data/test/remote/gateways/remote_sage_pay_test.rb +0 -219
  224. data/test/remote/gateways/remote_sage_test.rb +0 -87
  225. data/test/remote/gateways/remote_sage_virtual_check_test.rb +0 -62
  226. data/test/remote/gateways/remote_sallie_mae_test.rb +0 -51
  227. data/test/remote/gateways/remote_secure_pay_au_test.rb +0 -40
  228. data/test/remote/gateways/remote_secure_pay_tech_test.rb +0 -37
  229. data/test/remote/gateways/remote_secure_pay_test.rb +0 -28
  230. data/test/remote/gateways/remote_skipjack_test.rb +0 -105
  231. data/test/remote/gateways/remote_trans_first_test.rb +0 -34
  232. data/test/remote/gateways/remote_transax_test.rb +0 -112
  233. data/test/remote/gateways/remote_trust_commerce_test.rb +0 -152
  234. data/test/remote/gateways/remote_usa_epay_test.rb +0 -46
  235. data/test/remote/gateways/remote_verifi_test.rb +0 -107
  236. data/test/remote/gateways/remote_viaklix_test.rb +0 -43
  237. data/test/remote/gateways/remote_wirecard_test.rb +0 -111
@@ -1,214 +0,0 @@
1
- # This class implements the Psigate gateway for the ActiveMerchant module.
2
- # Psigate = http://www.psigate.com/ The class is currently set up to use
3
- # the psigate test server while rails is in testing or developement mode.
4
- # The real server will be used while in production mode.
5
- #
6
- # Modifications by Sean O'Hara ( sohara at sohara dot com )
7
- #
8
- # Usage for a PreAuth (authorize) is as follows:
9
- #
10
- # twenty = 2000
11
- # gateway = PsigateGateway.new(
12
- # :login => 'teststore',
13
- # :password => 'psigate1234'
14
- # )
15
- #
16
- # creditcard = CreditCard.new(
17
- # :number => '4242424242424242',
18
- # :month => 8,
19
- # :year => 2006,
20
- # :first_name => 'Longbob',
21
- # :last_name => 'Longsen'
22
- # )
23
- # response = @gateway.authorize(twenty, creditcard,
24
- # :order_id => 1234,
25
- # :billing_address => {
26
- # :address1 => '123 fairweather Lane',
27
- # :address2 => 'Apt B',
28
- # :city => 'New York',
29
- # :state => 'NY',
30
- # :country => 'U.S.A.',
31
- # :zip => '10010'
32
- # },
33
- # :email => 'jack@yahoo.com'
34
- # )
35
-
36
- require 'rexml/document'
37
-
38
- module ActiveMerchant #:nodoc:
39
- module Billing #:nodoc:
40
-
41
- class PsigateGateway < Gateway
42
- TEST_URL = 'https://dev.psigate.com:7989/Messenger/XMLMessenger'
43
- LIVE_URL = 'https://secure.psigate.com:7934/Messenger/XMLMessenger'
44
-
45
- self.supported_cardtypes = [:visa, :master, :american_express]
46
- self.supported_countries = ['CA']
47
- self.homepage_url = 'http://www.psigate.com/'
48
- self.display_name = 'Psigate'
49
-
50
- SUCCESS_MESSAGE = 'Success'
51
- FAILURE_MESSAGE = 'The transaction was declined'
52
-
53
- def initialize(options = {})
54
- requires!(options, :login, :password)
55
- @options = options
56
- super
57
- end
58
-
59
- # Psigate PreAuth
60
- def authorize(money, creditcard, options = {})
61
- requires!(options, :order_id)
62
- options.update({ :CardAction => "1" })
63
- commit(money, creditcard, options)
64
- end
65
-
66
- # Psigate Sale
67
- def purchase(money, creditcard, options = {})
68
- requires!(options, :order_id)
69
- options.update({ :CardAction => "0" })
70
- commit(money, creditcard, options)
71
- end
72
-
73
- # Psigate PostAuth
74
- def capture(money, authorization, options = {})
75
- options.update({ :CardAction => "2", :order_id => authorization })
76
- commit(money, nil, options)
77
- end
78
-
79
-
80
- # Psigate Credit
81
- def credit(money, authorization, options = {})
82
- options.update({ :CardAction => "3", :order_id => authorization })
83
- commit(money, nil, options)
84
- end
85
-
86
- private
87
-
88
- def commit(money, creditcard, options = {})
89
- response = parse(ssl_post(test? ? TEST_URL : LIVE_URL, post_data(money, creditcard, options)))
90
-
91
- Response.new(successful?(response), message_from(response), response,
92
- :test => test?,
93
- :authorization => response[:orderid],
94
- :avs_result => { :code => response[:avsresult] },
95
- :cvv_result => response[:cardidresult]
96
- )
97
- end
98
-
99
- def successful?(response)
100
- response[:approved] == "APPROVED"
101
- end
102
-
103
- def parse(xml)
104
- response = {:message => "Global Error Receipt", :complete => false}
105
-
106
- xml = REXML::Document.new(xml)
107
- xml.elements.each('//Result/*') do |node|
108
-
109
- response[node.name.downcase.to_sym] = normalize(node.text)
110
-
111
- end unless xml.root.nil?
112
-
113
- response
114
- end
115
-
116
- def post_data(money, creditcard, options)
117
- xml = REXML::Document.new
118
- xml << REXML::XMLDecl.new
119
- root = xml.add_element("Order")
120
-
121
- for key, value in parameters(money, creditcard, options)
122
- root.add_element(key.to_s).text = value if value
123
- end
124
-
125
- xml.to_s
126
- end
127
-
128
- # Set up the parameters hash just once so we don't have to do it
129
- # for every action.
130
- def parameters(money, creditcard, options = {})
131
- params = {
132
- # General order paramters
133
- :StoreID => @options[:login],
134
- :Passphrase => @options[:password],
135
- :TestResult => options[:test_result],
136
- :OrderID => options[:order_id],
137
- :UserID => options[:user_id],
138
- :Phone => options[:phone],
139
- :Fax => options[:fax],
140
- :Email => options[:email],
141
-
142
- # Credit Card paramaters
143
- :PaymentType => "CC",
144
- :CardAction => options[:CardAction],
145
-
146
- # Financial paramters
147
- :CustomerIP => options[:ip],
148
- :SubTotal => amount(money),
149
- :Tax1 => options[:tax1],
150
- :Tax2 => options[:tax2],
151
- :ShippingTotal => options[:shipping_total],
152
- }
153
-
154
- if creditcard
155
- exp_month = sprintf("%.2i", creditcard.month) unless creditcard.month.blank?
156
- exp_year = creditcard.year.to_s[2,2] unless creditcard.year.blank?
157
- card_id_code = creditcard.verification_value.blank? ? nil : "1"
158
-
159
- params.update(
160
- :CardNumber => creditcard.number,
161
- :CardExpMonth => exp_month,
162
- :CardExpYear => exp_year,
163
- :CardIDCode => card_id_code,
164
- :CardIDNumber => creditcard.verification_value
165
- )
166
- end
167
-
168
- if address = options[:billing_address] || options[:address]
169
- params[:Bname] = address[:name] || creditcard.name
170
- params[:Baddress1] = address[:address1] unless address[:address1].blank?
171
- params[:Baddress2] = address[:address2] unless address[:address2].blank?
172
- params[:Bcity] = address[:city] unless address[:city].blank?
173
- params[:Bprovince] = address[:state] unless address[:state].blank?
174
- params[:Bpostalcode] = address[:zip] unless address[:zip].blank?
175
- params[:Bcountry] = address[:country] unless address[:country].blank?
176
- params[:Bcompany] = address[:company] unless address[:company].blank?
177
- end
178
-
179
- if address = options[:shipping_address]
180
- params[:Sname] = address[:name] || creditcard.name
181
- params[:Saddress1] = address[:address1] unless address[:address1].blank?
182
- params[:Saddress2] = address[:address2] unless address[:address2].blank?
183
- params[:Scity] = address[:city] unless address[:city].blank?
184
- params[:Sprovince] = address[:state] unless address[:state].blank?
185
- params[:Spostalcode] = address[:zip] unless address[:zip].blank?
186
- params[:Scountry] = address[:country] unless address[:country].blank?
187
- params[:Scompany] = address[:company] unless address[:company].blank?
188
- end
189
-
190
- return params
191
- end
192
-
193
- def message_from(response)
194
- if response[:approved] == "APPROVED"
195
- return SUCCESS_MESSAGE
196
- else
197
- return FAILURE_MESSAGE if response[:errmsg].blank?
198
- return response[:errmsg].gsub(/[^\w]/, ' ').split.join(" ").capitalize
199
- end
200
- end
201
-
202
- # Make a ruby type out of the response string
203
- def normalize(field)
204
- case field
205
- when "true" then true
206
- when "false" then false
207
- when "" then nil
208
- when "null" then nil
209
- else field
210
- end
211
- end
212
- end
213
- end
214
- end
@@ -1,306 +0,0 @@
1
- # Author:: MoneySpyder, http://moneyspyder.co.uk
2
-
3
- module ActiveMerchant
4
- module Billing
5
- #
6
- # ActiveMerchant PSL Card Gateway
7
- #
8
- # Notes:
9
- # -To be able to use the capture function, the IP address of the machine must be
10
- # registered with PSL
11
- # -ESALE_KEYED should only be used in situations where the cardholder perceives the
12
- # transaction to be Internet-based, such as purchasing from a web site/on-line store.
13
- # If the Internet is used purely for the transport of information from the merchant
14
- # directly to the gateway then the appropriate cardholder present or not present message
15
- # type should be used rather than the ‘E’ equivalent.
16
- # -The CV2 / AVS policies are set up with the account settings when signing up for an account
17
- class PslCardGateway < Gateway
18
- self.money_format = :cents
19
- self.default_currency = 'GBP'
20
-
21
- self.supported_countries = ['GB']
22
- # Visa Credit, Visa Debit, Mastercard, Maestro, Solo, Electron,
23
- # American Express, Diners Club, JCB, International Maestro,
24
- # Style, Clydesdale Financial Services, Other
25
-
26
- self.supported_cardtypes = [ :visa, :master, :american_express, :diners_club, :jcb, :switch, :solo, :maestro ]
27
- self.homepage_url = 'http://www.paymentsolutionsltd.com/'
28
- self.display_name = 'PSL Payment Solutions'
29
-
30
- # Default ISO 3166 country code (GB)
31
- cattr_accessor :location
32
- self.location = 826
33
-
34
- # PslCard server URL - The url is the same whether testing or live - use
35
- # the test account when testing...
36
- URL = 'https://pslcard3.paymentsolutionsltd.com/secure/transact.asp?'
37
-
38
- # eCommerce sale transaction, details keyed by merchant or cardholder
39
- MESSAGE_TYPE = 'ESALE_KEYED'
40
-
41
- # The type of response that we want to get from PSL, options are HTML, XML or REDIRECT
42
- RESPONSE_ACTION = 'HTML'
43
-
44
- # Currency Codes
45
- CURRENCY_CODES = {
46
- 'AUD' => 036,
47
- 'GBP' => 826,
48
- 'USD' => 840
49
- }
50
-
51
- #The terminal used - only for swipe transactions, so hard coded to 32 for online
52
- EMV_TERMINAL_TYPE = 32
53
-
54
- #Different Dispatch types
55
- DISPATCH_LATER = 'LATER'
56
- DISPATCH_NOW = 'NOW'
57
-
58
- # Return codes
59
- APPROVED = '00'
60
-
61
- #Nominal amount to authorize for a 'dispatch later' type
62
- #The nominal amount is held straight away, when the goods are ready
63
- #to be dispatched, PSL is informed and the full amount is the
64
- #taken.
65
- NOMINAL_AMOUNT = 101
66
-
67
- AVS_CODE = {
68
- "ALL MATCH" => 'Y',
69
- "SECURITY CODE MATCH ONLY" => 'N',
70
- "ADDRESS MATCH ONLY" => 'Y',
71
- "NO DATA MATCHES" => 'N',
72
- "DATA NOT CHECKED" => 'R',
73
- "SECURITY CHECKS NOT SUPPORTED" => 'X'
74
- }
75
-
76
- CVV_CODE = {
77
- "ALL MATCH" => 'M',
78
- "SECURITY CODE MATCH ONLY" => 'M',
79
- "ADDRESS MATCH ONLY" => 'N',
80
- "NO DATA MATCHES" => 'N',
81
- "DATA NOT CHECKED" => 'P',
82
- "SECURITY CHECKS NOT SUPPORTED" => 'X'
83
- }
84
-
85
- # Create a new PslCardGateway
86
- #
87
- # The gateway requires that a valid :login be passed in the options hash
88
- #
89
- # Paramaters:
90
- # -options:
91
- # :login - the PslCard account login (required)
92
- def initialize(options = {})
93
- requires!(options, :login)
94
-
95
- @options = options
96
- super
97
- end
98
-
99
- # Purchase the item straight away
100
- #
101
- # Parameters:
102
- # -money: Money object for the total to be charged
103
- # -authorization: the PSL cross reference from the previous authorization
104
- # -options:
105
- #
106
- # Returns:
107
- # -ActiveRecord::Billing::Response object
108
- #
109
- def purchase(money, credit_card, options = {})
110
- post = {}
111
-
112
- add_amount(post, money, DISPATCH_NOW, options)
113
- add_credit_card(post, credit_card)
114
- add_address(post, options)
115
- add_invoice(post, options)
116
- add_purchase_details(post)
117
-
118
- commit(post)
119
- end
120
-
121
- # Authorize the transaction
122
- #
123
- # Reserves the funds on the customer's credit card, but does not
124
- # charge the card.
125
- #
126
- # This implementation does not authorize the full amount, rather it checks that the full amount
127
- # is available and only 'reserves' the nominal amount (currently a pound and a penny)
128
- #
129
- # Parameters:
130
- # -money: Money object for the total to be charged
131
- # -authorization: the PSL cross reference from the previous authorization
132
- # -options:
133
- #
134
- # Returns:
135
- # -ActiveRecord::Billing::Response object
136
- #
137
- def authorize(money, credit_card, options = {})
138
- post = {}
139
-
140
- add_amount(post, money, DISPATCH_LATER, options)
141
- add_credit_card(post, credit_card)
142
- add_address(post, options)
143
- add_invoice(post, options)
144
- add_purchase_details(post)
145
-
146
- commit(post)
147
- end
148
-
149
- # Post an authorization.
150
- #
151
- # Captures the funds from an authorized transaction.
152
- #
153
- # Parameters:
154
- # -money: Money object for the total to be charged
155
- # -authorization: The PSL Cross Reference
156
- # -options:
157
- #
158
- # Returns:
159
- # -ActiveRecord::Billing::Response object
160
- #
161
- def capture(money, authorization, options = {})
162
- post = {}
163
-
164
- add_amount(post, money, DISPATCH_NOW, options)
165
- add_reference(post, authorization)
166
- add_purchase_details(post)
167
-
168
- commit(post)
169
- end
170
-
171
- private
172
-
173
- def add_credit_card(post, credit_card)
174
- post[:QAName] = credit_card.name
175
- post[:CardNumber] = credit_card.number
176
- post[:EMVTerminalType] = EMV_TERMINAL_TYPE
177
- post[:ExpMonth] = credit_card.month
178
- post[:ExpYear] = credit_card.year
179
-
180
- if requires_start_date_or_issue_number?(credit_card)
181
- post[:IssueNumber] = credit_card.issue_number unless credit_card.issue_number.blank?
182
- post[:StartMonth] = credit_card.start_month unless credit_card.start_month.blank?
183
- post[:StartYear] = credit_card.start_year unless credit_card.start_year.blank?
184
- end
185
-
186
- # CV2 check
187
- post[:AVSCV2Check] = credit_card.verification_value? ? 'YES' : 'NO'
188
- post[:CV2] = credit_card.verification_value if credit_card.verification_value?
189
- end
190
-
191
- def add_address(post, options)
192
- address = options[:billing_address] || options[:address]
193
- return if address.nil?
194
-
195
- post[:QAAddress] = [:address1, :address2, :city, :state].collect{|a| address[a]}.reject{|a| a.blank?}.join(' ')
196
- post[:QAPostcode] = address[:zip]
197
- end
198
-
199
- def add_invoice(post, options)
200
- post[:MerchantName] = options[:merchant] || 'Merchant Name' # May use this as the order_id field
201
- post[:OrderID] = options[:order_id] unless options[:order_id].blank?
202
- end
203
-
204
- def add_reference(post, authorization)
205
- post[:CrossReference] = authorization
206
- end
207
-
208
- def add_amount(post, money, dispatch_type, options)
209
- post[:CurrencyCode] = currency_code(options[:currency] || currency(money))
210
-
211
- if dispatch_type == DISPATCH_LATER
212
- post[:amount] = amount(NOMINAL_AMOUNT)
213
- post[:DispatchLaterAmount] = amount(money)
214
- else
215
- post[:amount] = amount(money)
216
- end
217
-
218
- post[:Dispatch] = dispatch_type
219
- end
220
-
221
- def add_purchase_details(post)
222
- post[:EchoAmount] = 'YES'
223
- post[:SCBI] = 'YES' # Return information about the transaction
224
- post[:MessageType] = MESSAGE_TYPE
225
- end
226
-
227
- # Get the currency code for the passed money object
228
- #
229
- # The money class stores the currency as an ISO 4217:2001 Alphanumeric,
230
- # however PSL requires the ISO 4217:2001 Numeric code.
231
- #
232
- # Parameters:
233
- # -money: Money object with the amount and currency
234
- #
235
- # Returns:
236
- # -the ISO 4217:2001 Numberic currency code
237
- #
238
- def currency_code(currency)
239
- CURRENCY_CODES[currency]
240
- end
241
-
242
- # Parse the PSL response and create a Response object
243
- #
244
- # Parameters:
245
- # -body: The response string returned from PSL, Formatted:
246
- # Key=value&key=value...
247
- #
248
- # Returns:
249
- # -a hash with all of the values returned in the PSL response
250
- #
251
- def parse(body)
252
-
253
- fields = {}
254
- for line in body.split('&')
255
- key, value = *line.scan( %r{^(\w+)\=(.*)$} ).flatten
256
- fields[key] = CGI.unescape(value)
257
- end
258
- fields.symbolize_keys
259
- end
260
-
261
- # Send the passed data to PSL for processing
262
- #
263
- # Parameters:
264
- # -request: The data that is to be sent to PSL
265
- #
266
- # Returns:
267
- # - ActiveMerchant::Billing::Response object
268
- #
269
- def commit(request)
270
- response = parse( ssl_post(URL, post_data(request)) )
271
-
272
- Response.new(response[:ResponseCode] == APPROVED, response[:Message], response,
273
- :test => test?,
274
- :authorization => response[:CrossReference],
275
- :cvv_result => CVV_CODE[response[:AVSCV2Check]],
276
- :avs_result => { :code => AVS_CODE[response[:AVSCV2Check]] }
277
- )
278
- end
279
-
280
- # Put the passed data into a format that can be submitted to PSL
281
- # Key=Value&Key=Value...
282
- #
283
- # Any ampersands and equal signs are removed from the data being posted
284
- # as PSL puts them back into the response string which then cannot be parsed.
285
- # This is after escaping before sending the request to PSL - this is a work
286
- # around for the time being
287
- #
288
- # Parameters:
289
- # -post: Hash of all the data to be sent
290
- #
291
- # Returns:
292
- # -String: the data to be sent
293
- #
294
- def post_data(post)
295
- post[:CountryCode] = self.location
296
- post[:MerchantID] = @options[:login]
297
- post[:ValidityID] = @options[:password]
298
- post[:ResponseAction] = RESPONSE_ACTION
299
-
300
- post.collect { |key, value|
301
- "#{key}=#{CGI.escape(value.to_s.tr('&=', ' '))}"
302
- }.join("&")
303
- end
304
- end
305
- end
306
- end