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,213 +0,0 @@
1
- require 'rexml/document'
2
- require 'digest/md5'
3
-
4
- module ActiveMerchant #:nodoc:
5
- module Billing #:nodoc:
6
- class QuickpayGateway < Gateway
7
- URL = 'https://secure.quickpay.dk/api'
8
-
9
- self.default_currency = 'DKK'
10
- self.money_format = :cents
11
- self.supported_cardtypes = [ :dankort, :forbrugsforeningen, :visa, :master, :american_express, :diners_club, :jcb, :maestro ]
12
- self.supported_countries = ['DK']
13
- self.homepage_url = 'http://quickpay.dk/'
14
- self.display_name = 'Quickpay'
15
-
16
- PROTOCOL = 3
17
-
18
- MD5_CHECK_FIELDS = {
19
- :authorize => [:protocol, :msgtype, :merchant, :ordernumber, :amount, :currency, :autocapture, :cardnumber, :expirationdate, :cvd, :cardtypelock],
20
- :capture => [:protocol, :msgtype, :merchant, :amount, :transaction],
21
- :cancel => [:protocol, :msgtype, :merchant, :transaction],
22
- :refund => [:protocol, :msgtype, :merchant, :amount, :transaction],
23
- :subscribe => [:protocol, :msgtype, :merchant, :ordernumber, :cardnumber, :expirationdate, :cvd, :cardtypelock, :description],
24
- :recurring => [:protocol, :msgtype, :merchant, :ordernumber, :amount, :currency, :autocapture, :transaction],
25
- :status => [:protocol, :msgtype, :merchant, :transaction],
26
- :chstatus => [:protocol, :msgtype, :merchant],
27
- }
28
-
29
- APPROVED = '000'
30
-
31
- # The login is the QuickpayId
32
- # The password is the md5checkword from the Quickpay admin interface
33
- def initialize(options = {})
34
- requires!(options, :login, :password)
35
- @options = options
36
- super
37
- end
38
-
39
- def authorize(money, credit_card_or_reference, options = {})
40
- post = {}
41
-
42
- add_amount(post, money, options)
43
- add_invoice(post, options)
44
- add_creditcard_or_reference(post, credit_card_or_reference, options)
45
- add_autocapture(post, false)
46
-
47
- commit(recurring_or_authorize(credit_card_or_reference), post)
48
- end
49
-
50
- def purchase(money, credit_card_or_reference, options = {})
51
- post = {}
52
-
53
- add_amount(post, money, options)
54
- add_creditcard_or_reference(post, credit_card_or_reference, options)
55
- add_invoice(post, options)
56
- add_autocapture(post, true)
57
-
58
- commit(recurring_or_authorize(credit_card_or_reference), post)
59
- end
60
-
61
- def capture(money, authorization, options = {})
62
- post = {}
63
-
64
- add_reference(post, authorization)
65
- add_amount_without_currency(post, money)
66
-
67
- commit(:capture, post)
68
- end
69
-
70
- def void(identification, options = {})
71
- post = {}
72
-
73
- add_reference(post, identification)
74
-
75
- commit(:cancel, post)
76
- end
77
-
78
- def credit(money, identification, options = {})
79
- post = {}
80
-
81
- add_amount_without_currency(post, money)
82
- add_reference(post, identification)
83
-
84
- commit(:refund, post)
85
- end
86
-
87
- def store(creditcard, options = {})
88
- post = {}
89
-
90
- add_creditcard(post, creditcard, options)
91
- add_invoice(post, options)
92
- add_description(post, options)
93
-
94
- commit(:subscribe, post)
95
- end
96
-
97
- private
98
-
99
- def add_amount(post, money, options = {})
100
- post[:amount] = amount(money)
101
- post[:currency] = options[:currency] || currency(money)
102
- end
103
-
104
- def add_amount_without_currency(post, money, options = {})
105
- post[:amount] = amount(money)
106
- end
107
-
108
- def add_invoice(post, options)
109
- post[:ordernumber] = format_order_number(options[:order_id])
110
- end
111
-
112
- def add_creditcard(post, credit_card, options)
113
- post[:cardnumber] = credit_card.number
114
- post[:cvd] = credit_card.verification_value
115
- post[:expirationdate] = expdate(credit_card)
116
- post[:cardtypelock] = options[:cardtypelock] unless options[:cardtypelock].blank?
117
- end
118
-
119
- def add_reference(post, identification)
120
- post[:transaction] = identification
121
- end
122
-
123
- def add_creditcard_or_reference(post, credit_card_or_reference, options)
124
- if credit_card_or_reference.is_a?(String)
125
- add_reference(post, credit_card_or_reference)
126
- else
127
- add_creditcard(post, credit_card_or_reference, options)
128
- end
129
- end
130
-
131
- def add_autocapture(post, autocapture)
132
- post[:autocapture] = autocapture ? 1 : 0
133
- end
134
-
135
- def recurring_or_authorize(credit_card_or_reference)
136
- credit_card_or_reference.is_a?(String) ? :recurring : :authorize
137
- end
138
-
139
- def add_description(post, options)
140
- post[:description] = options[:description]
141
- end
142
-
143
- def commit(action, params)
144
- response = parse(ssl_post(URL, post_data(action, params)))
145
-
146
- Response.new(successful?(response), message_from(response), response,
147
- :test => test?,
148
- :authorization => response[:transaction]
149
- )
150
- end
151
-
152
- def successful?(response)
153
- response[:qpstat] == APPROVED
154
- end
155
-
156
- def parse(data)
157
- response = {}
158
-
159
- doc = REXML::Document.new(data)
160
-
161
- doc.root.elements.each do |element|
162
- response[element.name.to_sym] = element.text
163
- end
164
-
165
- response
166
- end
167
-
168
- def message_from(response)
169
- case response[:qpstat]
170
- when '008' # Error in request data
171
- response[:qpstatmsg].to_s
172
- #.scan(/[A-Z][a-z0-9 \/]+/).to_sentence
173
- else
174
- response[:qpstatmsg].to_s
175
- end
176
- end
177
-
178
- def post_data(action, params = {})
179
- params[:protocol] = PROTOCOL
180
- params[:msgtype] = action.to_s
181
- params[:merchant] = @options[:login]
182
- #params[:testmode] = '1' if test?
183
- params[:md5check] = generate_check_hash(action, params)
184
-
185
- params.collect { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join("&")
186
- end
187
-
188
- def generate_check_hash(action, params)
189
- string = MD5_CHECK_FIELDS[action].collect do |key|
190
- params[key]
191
- end.join('')
192
-
193
- # Add the md5checkword
194
- string << @options[:password].to_s
195
-
196
- Digest::MD5.hexdigest(string)
197
- end
198
-
199
- def expdate(credit_card)
200
- year = format(credit_card.year, :two_digits)
201
- month = format(credit_card.month, :two_digits)
202
-
203
- "#{year}#{month}"
204
- end
205
-
206
- # Limited to 20 digits max
207
- def format_order_number(number)
208
- number.to_s.gsub(/[^\w_]/, '').rjust(4, "0")[0...20]
209
- end
210
- end
211
- end
212
- end
213
-
@@ -1,200 +0,0 @@
1
- require 'rexml/document'
2
- require 'digest/sha1'
3
-
4
- module ActiveMerchant
5
- module Billing
6
- # Realex us the leading CC gateway in Ireland
7
- # see http://www.realexpayments.com
8
- # Contributed by John Ward (john@ward.name)
9
- # see http://thinedgeofthewedge.blogspot.com
10
- #
11
- # Realex works using the following
12
- # login - The unique id of the merchant
13
- # password - The secret is used to digitally sign the request
14
- # account - This is an optional third part of the authentication process
15
- # and is used if the merchant wishes do distuinguish cc traffic from the different sources
16
- # by using a different account. This must be created in advance
17
- #
18
- # the Realex team decided to make the orderid unique per request,
19
- # so if validation fails you can not correct and resend using the
20
- # same order id
21
- class RealexGateway < Gateway
22
- URL = 'https://epage.payandshop.com/epage-remote.cgi'
23
-
24
- CARD_MAPPING = {
25
- 'master' => 'MC',
26
- 'visa' => 'VISA',
27
- 'american_express' => 'AMEX',
28
- 'diners_club' => 'DINERS',
29
- 'switch' => 'SWITCH',
30
- 'solo' => 'SWITCH',
31
- 'laser' => 'LASER'
32
- }
33
-
34
- self.money_format = :cents
35
- self.default_currency = 'EUR'
36
- self.supported_cardtypes = [ :visa, :master, :american_express, :diners_club, :switch, :solo, :laser ]
37
- self.supported_countries = [ 'IE', 'GB' ]
38
- self.homepage_url = 'http://www.realexpayments.com/'
39
- self.display_name = 'Realex'
40
-
41
- SUCCESS, DECLINED = "Successful", "Declined"
42
- BANK_ERROR = REALEX_ERROR = "Gateway is in maintenance. Please try again later."
43
- ERROR = CLIENT_DEACTIVATED = "Gateway Error"
44
-
45
- def initialize(options = {})
46
- requires!(options, :login, :password)
47
- @options = options
48
- super
49
- end
50
-
51
- def purchase(money, credit_card, options = {})
52
- requires!(options, :order_id)
53
-
54
- request = build_purchase_or_authorization_request(:purchase, money, credit_card, options)
55
- commit(request)
56
- end
57
-
58
- private
59
- def commit(request)
60
- response = parse(ssl_post(URL, request))
61
-
62
- Response.new(response[:result] == "00", message_from(response), response,
63
- :test => response[:message] =~ /\[ test system \]/,
64
- :authorization => response[:authcode],
65
- :cvv_result => response[:cvnresult]
66
- )
67
- end
68
-
69
- def parse(xml)
70
- response = {}
71
-
72
- xml = REXML::Document.new(xml)
73
- xml.elements.each('//response/*') do |node|
74
-
75
- if (node.elements.size == 0)
76
- response[node.name.downcase.to_sym] = normalize(node.text)
77
- else
78
- node.elements.each do |childnode|
79
- name = "#{node.name.downcase}_#{childnode.name.downcase}"
80
- response[name.to_sym] = normalize(childnode.text)
81
- end
82
- end
83
-
84
- end unless xml.root.nil?
85
-
86
- response
87
- end
88
-
89
- def parse_credit_card_number(request)
90
- xml = REXML::Document.new(request)
91
- card_number = REXML::XPath.first(xml, '/request/card/number')
92
- card_number && card_number.text
93
- end
94
-
95
- def build_purchase_or_authorization_request(action, money, credit_card, options)
96
- timestamp = Time.now.strftime('%Y%m%d%H%M%S')
97
-
98
- xml = Builder::XmlMarkup.new :indent => 2
99
- xml.tag! 'request', 'timestamp' => timestamp, 'type' => 'auth' do
100
-
101
- xml.tag! 'merchantid', @options[:login]
102
- xml.tag! 'account', @options[:account]
103
-
104
- xml.tag! 'orderid', sanitize_order_id(options[:order_id])
105
- xml.tag! 'amount', amount(money), 'currency' => options[:currency] || currency(money)
106
-
107
- xml.tag! 'card' do
108
- xml.tag! 'number', credit_card.number
109
- xml.tag! 'expdate', expiry_date(credit_card)
110
- xml.tag! 'type', CARD_MAPPING[card_brand(credit_card).to_s]
111
- xml.tag! 'chname', credit_card.name
112
- xml.tag! 'issueno', credit_card.issue_number
113
-
114
- xml.tag! 'cvn' do
115
- xml.tag! 'number', credit_card.verification_value
116
- xml.tag! 'presind', credit_card.verification_value? ? 1 : nil
117
- end
118
- end
119
-
120
- xml.tag! 'autosettle', 'flag' => auto_settle_flag(action)
121
- xml.tag! 'sha1hash', sha1from("#{timestamp}.#{@options[:login]}.#{sanitize_order_id(options[:order_id])}.#{amount(money)}.#{options[:currency] || currency(money)}.#{credit_card.number}")
122
- xml.tag! 'comments' do
123
- xml.tag! 'comment', options[:description], 'id' => 1
124
- xml.tag! 'comment', 'id' => 2
125
- end
126
-
127
- billing_address = options[:billing_address] || options[:address] || {}
128
- shipping_address = options[:shipping_address] || {}
129
-
130
- xml.tag! 'tssinfo' do
131
- xml.tag! 'address', 'type' => 'billing' do
132
- xml.tag! 'code', billing_address[:zip]
133
- xml.tag! 'country', billing_address[:country]
134
- end
135
-
136
- xml.tag! 'address', 'type' => 'shipping' do
137
- xml.tag! 'code', shipping_address[:zip]
138
- xml.tag! 'country', shipping_address[:country]
139
- end
140
-
141
- xml.tag! 'custnum', options[:customer]
142
-
143
- xml.tag! 'prodid', options[:invoice]
144
- xml.tag! 'varref'
145
- end
146
- end
147
-
148
- xml.target!
149
- end
150
-
151
- def auto_settle_flag(action)
152
- action == :authorization ? '0' : '1'
153
- end
154
-
155
- def expiry_date(credit_card)
156
- "#{format(credit_card.month, :two_digits)}#{format(credit_card.year, :two_digits)}"
157
- end
158
-
159
- def sha1from(string)
160
- Digest::SHA1.hexdigest("#{Digest::SHA1.hexdigest(string)}.#{@options[:password]}")
161
- end
162
-
163
- def normalize(field)
164
- case field
165
- when "true" then true
166
- when "false" then false
167
- when "" then nil
168
- when "null" then nil
169
- else field
170
- end
171
- end
172
-
173
- def message_from(response)
174
- message = nil
175
- case response[:result]
176
- when "00"
177
- message = SUCCESS
178
- when "101"
179
- message = response[:message]
180
- when "102", "103"
181
- message = DECLINED
182
- when /^2[0-9][0-9]/
183
- message = BANK_ERROR
184
- when /^3[0-9][0-9]/
185
- message = REALEX_ERROR
186
- when /^5[0-9][0-9]/
187
- message = ERROR
188
- when "666"
189
- message = CLIENT_DEACTIVATED
190
- else
191
- message = DECLINED
192
- end
193
- end
194
-
195
- def sanitize_order_id(order_id)
196
- order_id.to_s.gsub(/[^a-zA-Z0-9\-_]/, '')
197
- end
198
- end
199
- end
200
- end
@@ -1,146 +0,0 @@
1
- require File.dirname(__FILE__) + '/sage/sage_bankcard'
2
- require File.dirname(__FILE__) + '/sage/sage_virtual_check'
3
-
4
- module ActiveMerchant #:nodoc:
5
- module Billing #:nodoc:
6
- class SageGateway < Gateway
7
- self.supported_countries = SageBankcardGateway.supported_countries
8
- self.supported_cardtypes = SageBankcardGateway.supported_cardtypes
9
-
10
- # Creates a new SageGateway
11
- #
12
- # The gateway requires that a valid login and password be passed
13
- # in the +options+ hash.
14
- #
15
- # ==== Options
16
- #
17
- # * <tt>:login</tt> - The Sage Payment Solutions Merchant ID Number.
18
- # * <tt>:password</tt> - The Sage Payment Solutions Merchant Key Number.
19
- def initialize(options = {})
20
- requires!(options, :login, :password)
21
- @options = options
22
- super
23
- end
24
-
25
- # Performs an authorization transaction
26
- #
27
- # ==== Parameters
28
- # * <tt>money</tt> - The amount to be authorized as an integer value in cents.
29
- # * <tt>credit_card</tt> - The CreditCard object to be used as the funding source for the transaction.
30
- # * <tt>options</tt> - A hash of optional parameters.
31
- # * <tt>:order_id</tt> - A unique reference for this order. (maximum of 20 characters).
32
- # * <tt>:email</tt> - The customer's email address
33
- # * <tt>:customer</tt> - The Customer Number for Purchase Card Level II Transactions
34
- # * <tt>:billing_address</tt> - The customer's billing address as a hash of address information.
35
- # * <tt>:address1</tt> - The billing address street
36
- # * <tt>:city</tt> - The billing address city
37
- # * <tt>:state</tt> - The billing address state
38
- # * <tt>:country</tt> - The 2 digit ISO billing address country code
39
- # * <tt>:zip</tt> - The billing address zip code
40
- # * <tt>:phone</tt> - The billing address phone number
41
- # * <tt>:fax</tt> - The billing address fax number
42
- # * <tt>:shipping_address</tt> - The customer's shipping address as a hash of address information.
43
- # * <tt>:name</tt> - The name at the shipping address
44
- # * <tt>:address1</tt> - The shipping address street
45
- # * <tt>:city</tt> - The shipping address city
46
- # * <tt>:state</tt> - The shipping address state code
47
- # * <tt>:country</tt> - The 2 digit ISO shipping address country code
48
- # * <tt>:zip</tt> - The shipping address zip code
49
- # * <tt>:tax</tt> - The tax amount for the transaction as an Integer value in cents. Maps to Sage <tt>T_tax</tt>.
50
- # * <tt>:shipping</tt> - The shipping amount for the transaction as an Integer value in cents. Maps to Sage <tt>T_shipping</tt>.
51
- def authorize(money, credit_card, options = {})
52
- bankcard.authorize(money, credit_card, options)
53
- end
54
-
55
- # Performs a purchase, which is essentially an authorization and capture in a single operation.
56
- #
57
- # ==== Parameters
58
- #
59
- # * <tt>money</tt> - The amount to be authorized as an integer value in cents.
60
- # * <tt>source</tt> - The CreditCard or Check object to be used as the funding source for the transaction.
61
- # * <tt>options</tt> - A hash of optional parameters.
62
- # * <tt>:order_id</tt> - A unique reference for this order. (maximum of 20 characters).
63
- # * <tt>:email</tt> - The customer's email address
64
- # * <tt>:customer</tt> - The Customer Number for Purchase Card Level II Transactions
65
- # * <tt>:billing_address</tt> - The customer's billing address as a hash of address information.
66
- # * <tt>:address1</tt> - The billing address street
67
- # * <tt>:city</tt> - The billing address city
68
- # * <tt>:state</tt> - The billing address state
69
- # * <tt>:country</tt> - The 2 digit ISO billing address country code
70
- # * <tt>:zip</tt> - The billing address zip code
71
- # * <tt>:phone</tt> - The billing address phone number
72
- # * <tt>:fax</tt> - The billing address fax number
73
- # * <tt>:shipping_address</tt> - The customer's shipping address as a hash of address information.
74
- # * <tt>:name</tt> - The name at the shipping address
75
- # * <tt>:address1</tt> - The shipping address street
76
- # * <tt>:city</tt> - The shipping address city
77
- # * <tt>:state</tt> - The shipping address state code
78
- # * <tt>:country</tt> - The 2 digit ISO shipping address country code
79
- # * <tt>:zip</tt> - The shipping address zip code
80
- # * <tt>:tax</tt> - The tax amount for the transaction as an integer value in cents. Maps to Sage <tt>T_tax</tt>.
81
- # * <tt>:shipping</tt> - The shipping amount for the transaction as an integer value in cents. Maps to Sage <tt>T_shipping</tt>.
82
- #
83
- # ==== Additional options in the +options+ hash for when using a Check as the funding source
84
- # * <tt>:originator_id</tt> - 10 digit originator. If not provided, Sage will use the default Originator ID for the specific customer type.
85
- # * <tt>:addenda</tt> - Transaction addenda.
86
- # * <tt>:ssn</tt> - The customer's Social Security Number.
87
- # * <tt>:drivers_license_state</tt> - The customer's drivers license state code.
88
- # * <tt>:drivers_license_number</tt> - The customer's drivers license number.
89
- # * <tt>:date_of_birth</tt> - The customer's date of birth as a Time or Date object or a string in the format <tt>mm/dd/yyyy</tt>.
90
- def purchase(money, source, options = {})
91
- if source.type == "check"
92
- virtual_check.purchase(money, source, options)
93
- else
94
- bankcard.purchase(money, source, options)
95
- end
96
- end
97
-
98
- # Captures authorized funds.
99
- #
100
- # ==== Parameters
101
- #
102
- # * <tt>money</tt> - The amount to be authorized as an integer value in cents. Sage doesn't support changing the capture amount, so the full amount of the initial transaction will be captured.
103
- # * <tt>reference</tt> - The authorization reference string returned by the original transaction's Response#authorization.
104
- def capture(money, reference, options = {})
105
- bankcard.capture(money, reference, options)
106
- end
107
-
108
- # Voids a prior transaction. Works for both CreditCard and Check transactions.
109
- #
110
- # ==== Parameters
111
- #
112
- # * <tt>reference</tt> - The authorization reference string returned by the original transaction's Response#authorization.
113
- def void(reference, options = {})
114
- if reference.split(";").last == "virtual_check"
115
- virtual_check.void(reference, options)
116
- else
117
- bankcard.void(reference, options)
118
- end
119
- end
120
-
121
- # Performs a credit transaction. (Sage +Credit+ transaction).
122
- #
123
- # ==== Parameters
124
- #
125
- # * <tt>money</tt> - The amount to be authorized as an integer value in cents.
126
- # * <tt>source</tt> - The CreditCard or Check object to be used as the target for the credit.
127
- def credit(money, source, options = {})
128
- if source.type == "check"
129
- virtual_check.credit(money, source, options)
130
- else
131
- bankcard.credit(money, source, options)
132
- end
133
- end
134
-
135
- private
136
- def bankcard
137
- @bankcard ||= SageBankcardGateway.new(@options)
138
- end
139
-
140
- def virtual_check
141
- @virtual_check ||= SageVirtualCheckGateway.new(@options)
142
- end
143
- end
144
- end
145
- end
146
-