johnreitano-activemerchant 1.5.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 (131) hide show
  1. data/CHANGELOG +508 -0
  2. data/CONTRIBUTORS +134 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.rdoc +136 -0
  5. data/gem-public_cert.pem +20 -0
  6. data/lib/active_merchant/billing/avs_result.rb +98 -0
  7. data/lib/active_merchant/billing/base.rb +57 -0
  8. data/lib/active_merchant/billing/check.rb +68 -0
  9. data/lib/active_merchant/billing/credit_card.rb +159 -0
  10. data/lib/active_merchant/billing/credit_card_formatting.rb +21 -0
  11. data/lib/active_merchant/billing/credit_card_methods.rb +125 -0
  12. data/lib/active_merchant/billing/cvv_result.rb +38 -0
  13. data/lib/active_merchant/billing/expiry_date.rb +34 -0
  14. data/lib/active_merchant/billing/gateway.rb +163 -0
  15. data/lib/active_merchant/billing/gateways/authorize_net.rb +654 -0
  16. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +736 -0
  17. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +244 -0
  18. data/lib/active_merchant/billing/gateways/beanstream.rb +102 -0
  19. data/lib/active_merchant/billing/gateways/beanstream_interac.rb +54 -0
  20. data/lib/active_merchant/billing/gateways/bogus.rb +98 -0
  21. data/lib/active_merchant/billing/gateways/braintree.rb +17 -0
  22. data/lib/active_merchant/billing/gateways/card_stream.rb +230 -0
  23. data/lib/active_merchant/billing/gateways/cyber_source.rb +594 -0
  24. data/lib/active_merchant/billing/gateways/data_cash.rb +593 -0
  25. data/lib/active_merchant/billing/gateways/efsnet.rb +229 -0
  26. data/lib/active_merchant/billing/gateways/elavon.rb +134 -0
  27. data/lib/active_merchant/billing/gateways/eway.rb +277 -0
  28. data/lib/active_merchant/billing/gateways/exact.rb +222 -0
  29. data/lib/active_merchant/billing/gateways/first_pay.rb +172 -0
  30. data/lib/active_merchant/billing/gateways/instapay.rb +164 -0
  31. data/lib/active_merchant/billing/gateways/jetpay.rb +270 -0
  32. data/lib/active_merchant/billing/gateways/linkpoint.rb +449 -0
  33. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +154 -0
  34. data/lib/active_merchant/billing/gateways/merchant_ware.rb +283 -0
  35. data/lib/active_merchant/billing/gateways/modern_payments.rb +36 -0
  36. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +220 -0
  37. data/lib/active_merchant/billing/gateways/moneris.rb +205 -0
  38. data/lib/active_merchant/billing/gateways/net_registry.rb +189 -0
  39. data/lib/active_merchant/billing/gateways/netbilling.rb +168 -0
  40. data/lib/active_merchant/billing/gateways/ogone.rb +279 -0
  41. data/lib/active_merchant/billing/gateways/pay_junction.rb +392 -0
  42. data/lib/active_merchant/billing/gateways/pay_secure.rb +120 -0
  43. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +207 -0
  44. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +39 -0
  45. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +13 -0
  46. data/lib/active_merchant/billing/gateways/payflow.rb +236 -0
  47. data/lib/active_merchant/billing/gateways/payflow_express.rb +138 -0
  48. data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +15 -0
  49. data/lib/active_merchant/billing/gateways/payflow_uk.rb +21 -0
  50. data/lib/active_merchant/billing/gateways/payment_express.rb +230 -0
  51. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +326 -0
  52. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +38 -0
  53. data/lib/active_merchant/billing/gateways/paypal.rb +121 -0
  54. data/lib/active_merchant/billing/gateways/paypal_ca.rb +13 -0
  55. data/lib/active_merchant/billing/gateways/paypal_express.rb +130 -0
  56. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +20 -0
  57. data/lib/active_merchant/billing/gateways/plugnpay.rb +292 -0
  58. data/lib/active_merchant/billing/gateways/psigate.rb +214 -0
  59. data/lib/active_merchant/billing/gateways/psl_card.rb +304 -0
  60. data/lib/active_merchant/billing/gateways/quickpay.rb +213 -0
  61. data/lib/active_merchant/billing/gateways/realex.rb +200 -0
  62. data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +88 -0
  63. data/lib/active_merchant/billing/gateways/sage/sage_core.rb +116 -0
  64. data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +97 -0
  65. data/lib/active_merchant/billing/gateways/sage.rb +146 -0
  66. data/lib/active_merchant/billing/gateways/sage_pay.rb +309 -0
  67. data/lib/active_merchant/billing/gateways/sallie_mae.rb +144 -0
  68. data/lib/active_merchant/billing/gateways/secure_pay.rb +31 -0
  69. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +157 -0
  70. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +113 -0
  71. data/lib/active_merchant/billing/gateways/skip_jack.rb +453 -0
  72. data/lib/active_merchant/billing/gateways/smart_ps.rb +265 -0
  73. data/lib/active_merchant/billing/gateways/trans_first.rb +127 -0
  74. data/lib/active_merchant/billing/gateways/transax.rb +25 -0
  75. data/lib/active_merchant/billing/gateways/trust_commerce.rb +418 -0
  76. data/lib/active_merchant/billing/gateways/usa_epay.rb +194 -0
  77. data/lib/active_merchant/billing/gateways/verifi.rb +228 -0
  78. data/lib/active_merchant/billing/gateways/viaklix.rb +189 -0
  79. data/lib/active_merchant/billing/gateways/wirecard.rb +318 -0
  80. data/lib/active_merchant/billing/gateways.rb +18 -0
  81. data/lib/active_merchant/billing/integrations/action_view_helper.rb +79 -0
  82. data/lib/active_merchant/billing/integrations/bogus/helper.rb +17 -0
  83. data/lib/active_merchant/billing/integrations/bogus/notification.rb +11 -0
  84. data/lib/active_merchant/billing/integrations/bogus/return.rb +10 -0
  85. data/lib/active_merchant/billing/integrations/bogus.rb +23 -0
  86. data/lib/active_merchant/billing/integrations/chronopay/helper.rb +120 -0
  87. data/lib/active_merchant/billing/integrations/chronopay/notification.rb +158 -0
  88. data/lib/active_merchant/billing/integrations/chronopay/return.rb +10 -0
  89. data/lib/active_merchant/billing/integrations/chronopay.rb +23 -0
  90. data/lib/active_merchant/billing/integrations/gestpay/common.rb +42 -0
  91. data/lib/active_merchant/billing/integrations/gestpay/helper.rb +70 -0
  92. data/lib/active_merchant/billing/integrations/gestpay/notification.rb +85 -0
  93. data/lib/active_merchant/billing/integrations/gestpay/return.rb +10 -0
  94. data/lib/active_merchant/billing/integrations/gestpay.rb +25 -0
  95. data/lib/active_merchant/billing/integrations/helper.rb +93 -0
  96. data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +58 -0
  97. data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +59 -0
  98. data/lib/active_merchant/billing/integrations/hi_trust/return.rb +67 -0
  99. data/lib/active_merchant/billing/integrations/hi_trust.rb +27 -0
  100. data/lib/active_merchant/billing/integrations/nochex/helper.rb +68 -0
  101. data/lib/active_merchant/billing/integrations/nochex/notification.rb +94 -0
  102. data/lib/active_merchant/billing/integrations/nochex/return.rb +10 -0
  103. data/lib/active_merchant/billing/integrations/nochex.rb +88 -0
  104. data/lib/active_merchant/billing/integrations/notification.rb +62 -0
  105. data/lib/active_merchant/billing/integrations/paypal/helper.rb +119 -0
  106. data/lib/active_merchant/billing/integrations/paypal/notification.rb +154 -0
  107. data/lib/active_merchant/billing/integrations/paypal/return.rb +10 -0
  108. data/lib/active_merchant/billing/integrations/paypal.rb +39 -0
  109. data/lib/active_merchant/billing/integrations/quickpay/helper.rb +72 -0
  110. data/lib/active_merchant/billing/integrations/quickpay/notification.rb +74 -0
  111. data/lib/active_merchant/billing/integrations/quickpay.rb +17 -0
  112. data/lib/active_merchant/billing/integrations/return.rb +35 -0
  113. data/lib/active_merchant/billing/integrations/two_checkout/helper.rb +59 -0
  114. data/lib/active_merchant/billing/integrations/two_checkout/notification.rb +114 -0
  115. data/lib/active_merchant/billing/integrations/two_checkout/return.rb +17 -0
  116. data/lib/active_merchant/billing/integrations/two_checkout.rb +23 -0
  117. data/lib/active_merchant/billing/integrations.rb +29 -0
  118. data/lib/active_merchant/billing/response.rb +32 -0
  119. data/lib/active_merchant/billing.rb +9 -0
  120. data/lib/active_merchant/lib/connection.rb +170 -0
  121. data/lib/active_merchant/lib/country.rb +319 -0
  122. data/lib/active_merchant/lib/error.rb +4 -0
  123. data/lib/active_merchant/lib/post_data.rb +22 -0
  124. data/lib/active_merchant/lib/posts_data.rb +47 -0
  125. data/lib/active_merchant/lib/requires_parameters.rb +16 -0
  126. data/lib/active_merchant/lib/utils.rb +18 -0
  127. data/lib/active_merchant/lib/validateable.rb +76 -0
  128. data/lib/active_merchant.rb +46 -0
  129. data/lib/certs/cacert.pem +7815 -0
  130. data/lib/support/gateway_support.rb +58 -0
  131. metadata +218 -0
@@ -0,0 +1,244 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module BeanstreamCore
4
+ URL = 'https://www.beanstream.com/scripts/process_transaction.asp'
5
+
6
+ TRANSACTIONS = {
7
+ :authorization => 'PA',
8
+ :purchase => 'P',
9
+ :capture => 'PAC',
10
+ :credit => 'R',
11
+ :void => 'VP',
12
+ :check_purchase => 'D',
13
+ :check_credit => 'C',
14
+ :void_purchase => 'VP',
15
+ :void_credit => 'VR'
16
+ }
17
+
18
+ CVD_CODES = {
19
+ '1' => 'M',
20
+ '2' => 'N',
21
+ '3' => 'I',
22
+ '4' => 'S',
23
+ '5' => 'U',
24
+ '6' => 'P'
25
+ }
26
+
27
+ AVS_CODES = {
28
+ '0' => 'R',
29
+ '5' => 'I',
30
+ '9' => 'I'
31
+ }
32
+
33
+ def self.included(base)
34
+ base.default_currency = 'CAD'
35
+
36
+ # The countries the gateway supports merchants from as 2 digit ISO country codes
37
+ base.supported_countries = ['CA']
38
+
39
+ # The card types supported by the payment gateway
40
+ base.supported_cardtypes = [:visa, :master, :american_express]
41
+
42
+ # The homepage URL of the gateway
43
+ base.homepage_url = 'http://www.beanstream.com/'
44
+
45
+ # The name of the gateway
46
+ base.display_name = 'Beanstream.com'
47
+ end
48
+
49
+ # Only <tt>:login</tt> is required by default,
50
+ # which is the merchant's merchant ID. If you'd like to perform void,
51
+ # capture or credit transactions then you'll also need to add a username
52
+ # and password to your account under administration -> account settings ->
53
+ # order settings -> Use username/password validation
54
+ def initialize(options = {})
55
+ requires!(options, :login)
56
+ @options = options
57
+ super
58
+ end
59
+
60
+ def capture(money, authorization, options = {})
61
+ reference, amount, type = split_auth(authorization)
62
+
63
+ post = {}
64
+ add_amount(post, money)
65
+ add_reference(post, reference)
66
+ add_transaction_type(post, :capture)
67
+ commit(post)
68
+ end
69
+
70
+ def credit(money, source, options = {})
71
+ post = {}
72
+ reference, amount, type = split_auth(source)
73
+ add_reference(post, reference)
74
+ add_transaction_type(post, credit_action(type))
75
+ add_amount(post, money)
76
+ commit(post)
77
+ end
78
+
79
+ private
80
+ def purchase_action(source)
81
+ source.type.to_s == "check" ? :check_purchase : :purchase
82
+ end
83
+
84
+ def void_action(original_transaction_type)
85
+ original_transaction_type == TRANSACTIONS[:credit] ? :void_credit : :void_purchase
86
+ end
87
+
88
+ def credit_action(type)
89
+ type == TRANSACTIONS[:check_purchase] ? :check_credit : :credit
90
+ end
91
+
92
+ def split_auth(string)
93
+ string.split(";")
94
+ end
95
+
96
+ def add_amount(post, money)
97
+ post[:trnAmount] = amount(money)
98
+ end
99
+
100
+ def add_original_amount(post, amount)
101
+ post[:trnAmount] = amount
102
+ end
103
+
104
+ def add_reference(post, reference)
105
+ post[:adjId] = reference
106
+ end
107
+
108
+ def add_address(post, options)
109
+ prepare_address_for_non_american_countries(options)
110
+
111
+ if billing_address = options[:billing_address] || options[:address]
112
+ post[:ordName] = billing_address[:name]
113
+ post[:ordEmailAddress] = options[:email]
114
+ post[:ordPhoneNumber] = billing_address[:phone]
115
+ post[:ordAddress1] = billing_address[:address1]
116
+ post[:ordAddress2] = billing_address[:address2]
117
+ post[:ordCity] = billing_address[:city]
118
+ post[:ordProvince] = billing_address[:state]
119
+ post[:ordPostalCode] = billing_address[:zip]
120
+ post[:ordCountry] = billing_address[:country]
121
+ end
122
+ if shipping_address = options[:shipping_address]
123
+ post[:shipName] = shipping_address[:name]
124
+ post[:shipEmailAddress] = options[:email]
125
+ post[:shipPhoneNumber] = shipping_address[:phone]
126
+ post[:shipAddress1] = shipping_address[:address1]
127
+ post[:shipAddress2] = shipping_address[:address2]
128
+ post[:shipCity] = shipping_address[:city]
129
+ post[:shipProvince] = shipping_address[:state]
130
+ post[:shipPostalCode] = shipping_address[:zip]
131
+ post[:shipCountry] = shipping_address[:country]
132
+ post[:shippingMethod] = shipping_address[:shipping_method]
133
+ post[:deliveryEstimate] = shipping_address[:delivery_estimate]
134
+ end
135
+ end
136
+
137
+ def prepare_address_for_non_american_countries(options)
138
+ [ options[:billing_address], options[:shipping_address] ].compact.each do |address|
139
+ unless ['US', 'CA'].include?(address[:country])
140
+ address[:state] = '--'
141
+ address[:zip] = '000000' unless address[:zip]
142
+ end
143
+ end
144
+ end
145
+
146
+ def add_invoice(post, options)
147
+ post[:trnOrderNumber] = options[:order_id]
148
+ post[:trnComments] = options[:description]
149
+ post[:ordItemPrice] = amount(options[:subtotal])
150
+ post[:ordShippingPrice] = amount(options[:shipping])
151
+ post[:ordTax1Price] = amount(options[:tax1] || options[:tax])
152
+ post[:ordTax2Price] = amount(options[:tax2])
153
+ post[:ref1] = options[:custom]
154
+ end
155
+
156
+ def add_credit_card(post, credit_card)
157
+ post[:trnCardOwner] = credit_card.name
158
+ post[:trnCardNumber] = credit_card.number
159
+ post[:trnExpMonth] = format(credit_card.month, :two_digits)
160
+ post[:trnExpYear] = format(credit_card.year, :two_digits)
161
+ post[:trnCardCvd] = credit_card.verification_value
162
+ end
163
+
164
+ def add_check(post, check)
165
+ # The institution number of the consumer’s financial institution. Required for Canadian dollar EFT transactions.
166
+ post[:institutionNumber] = check.institution_number
167
+
168
+ # The bank transit number of the consumer’s bank account. Required for Canadian dollar EFT transactions.
169
+ post[:transitNumber] = check.transit_number
170
+
171
+ # The routing number of the consumer’s bank account. Required for US dollar EFT transactions.
172
+ post[:routingNumber] = check.routing_number
173
+
174
+ # The account number of the consumer’s bank account. Required for both Canadian and US dollar EFT transactions.
175
+ post[:accountNumber] = check.account_number
176
+ end
177
+
178
+ def parse(body)
179
+ results = {}
180
+ if !body.nil?
181
+ body.split(/&/).each do |pair|
182
+ key,val = pair.split(/=/)
183
+ results[key.to_sym] = val.nil? ? nil : CGI.unescape(val)
184
+ end
185
+ end
186
+
187
+ # Clean up the message text if there is any
188
+ if results[:messageText]
189
+ results[:messageText].gsub!(/<LI>/, "")
190
+ results[:messageText].gsub!(/(\.)?<br>/, ". ")
191
+ results[:messageText].strip!
192
+ end
193
+
194
+ results
195
+ end
196
+
197
+ def commit(params)
198
+ post(post_data(params))
199
+ end
200
+
201
+ def post(data)
202
+ response = parse(ssl_post(URL, data))
203
+ build_response(success?(response), message_from(response), response,
204
+ :test => test? || response[:authCode] == "TEST",
205
+ :authorization => authorization_from(response),
206
+ :cvv_result => CVD_CODES[response[:cvdId]],
207
+ :avs_result => { :code => (AVS_CODES.include? response[:avsId]) ? AVS_CODES[response[:avsId]] : response[:avsId] }
208
+ )
209
+ end
210
+
211
+ def authorization_from(response)
212
+ "#{response[:trnId]};#{response[:trnAmount]};#{response[:trnType]}"
213
+ end
214
+
215
+ def message_from(response)
216
+ response[:messageText]
217
+ end
218
+
219
+ def success?(response)
220
+ response[:responseType] == 'R' || response[:trnApproved] == '1'
221
+ end
222
+
223
+ def add_source(post, source)
224
+ source.type == "check" ? add_check(post, source) : add_credit_card(post, source)
225
+ end
226
+
227
+ def add_transaction_type(post, action)
228
+ post[:trnType] = TRANSACTIONS[action]
229
+ end
230
+
231
+ def post_data(params)
232
+ params[:requestType] = 'BACKEND'
233
+ params[:merchant_id] = @options[:login]
234
+ params[:username] = @options[:user] if @options[:user]
235
+ params[:password] = @options[:password] if @options[:password]
236
+ params[:vbvEnabled] = '0'
237
+ params[:scEnabled] = '0'
238
+
239
+ params.reject{|k, v| v.blank?}.collect { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join("&")
240
+ end
241
+ end
242
+ end
243
+ end
244
+
@@ -0,0 +1,102 @@
1
+ require File.dirname(__FILE__) + '/beanstream/beanstream_core'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ # This class implements the Canadian {Beanstream}[http://www.beanstream.com] payment gateway.
6
+ # It is also named TD Canada Trust Online Mart payment gateway.
7
+ # To learn more about the specification of Beanstream gateway, please read the OM_Direct_Interface_API.pdf,
8
+ # which you can get from your Beanstream account or get from me by email.
9
+ #
10
+ # == Supported transaction types by Beanstream:
11
+ # * +P+ - Purchase
12
+ # * +PA+ - Pre Authorization
13
+ # * +PAC+ - Pre Authorization Completion
14
+ #
15
+ # == Notes
16
+ # * Recurring billing is not yet implemented.
17
+ # * Adding of order products information is not implemented.
18
+ # * Ensure that country and province data is provided as a code such as "CA", "US", "QC".
19
+ # * login is the Beanstream merchant ID, username and password should be enabled in your Beanstream account and passed in using the <tt>:user</tt> and <tt>:password</tt> options.
20
+ # * Test your app with your true merchant id and test credit card information provided in the api pdf document.
21
+ #
22
+ # Example authorization (Beanstream PA transaction type):
23
+ #
24
+ # twenty = 2000
25
+ # gateway = BeanstreamGateway.new(
26
+ # :login => '100200000',
27
+ # :user => 'xiaobozz',
28
+ # :password => 'password'
29
+ # )
30
+ #
31
+ # credit_card = CreditCard.new(
32
+ # :number => '4030000010001234',
33
+ # :month => 8,
34
+ # :year => 2011,
35
+ # :first_name => 'xiaobo',
36
+ # :last_name => 'zzz',
37
+ # :verification_value => 137
38
+ # )
39
+ # response = gateway.authorize(twenty, credit_card,
40
+ # :order_id => '1234',
41
+ # :billing_address => {
42
+ # :name => 'xiaobo zzz',
43
+ # :phone => '555-555-5555',
44
+ # :address1 => '1234 Levesque St.',
45
+ # :address2 => 'Apt B',
46
+ # :city => 'Montreal',
47
+ # :state => 'QC',
48
+ # :country => 'CA',
49
+ # :zip => 'H2C1X8'
50
+ # },
51
+ # :email => 'xiaobozzz@example.com',
52
+ # :subtotal => 800,
53
+ # :shipping => 100,
54
+ # :tax1 => 100,
55
+ # :tax2 => 100,
56
+ # :custom => 'reference one'
57
+ # )
58
+ class BeanstreamGateway < Gateway
59
+ include BeanstreamCore
60
+
61
+ def authorize(money, credit_card, options = {})
62
+ post = {}
63
+ add_amount(post, money)
64
+ add_invoice(post, options)
65
+ add_credit_card(post, credit_card)
66
+ add_address(post, options)
67
+ add_transaction_type(post, :authorization)
68
+ commit(post)
69
+ end
70
+
71
+ def purchase(money, source, options = {})
72
+ post = {}
73
+ add_amount(post, money)
74
+ add_invoice(post, options)
75
+ add_source(post, source)
76
+ add_address(post, options)
77
+ add_transaction_type(post, purchase_action(source))
78
+ commit(post)
79
+ end
80
+
81
+ def void(authorization, options = {})
82
+ reference, amount, type = split_auth(authorization)
83
+
84
+ post = {}
85
+ add_reference(post, reference)
86
+ add_original_amount(post, amount)
87
+ add_transaction_type(post, void_action(type))
88
+ commit(post)
89
+ end
90
+
91
+ def interac
92
+ @interac ||= BeanstreamInteracGateway.new(@options)
93
+ end
94
+
95
+ private
96
+ def build_response(*args)
97
+ Response.new(*args)
98
+ end
99
+ end
100
+ end
101
+ end
102
+
@@ -0,0 +1,54 @@
1
+ require File.dirname(__FILE__) + '/beanstream/beanstream_core'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ class BeanstreamInteracResponse < Response
6
+ def redirect
7
+ params['pageContents']
8
+ end
9
+ end
10
+
11
+ class BeanstreamInteracGateway < Gateway
12
+ include BeanstreamCore
13
+
14
+ # Confirm a transaction posted back from the bank to Beanstream.
15
+ # Confirming a transaction does not require any credentials,
16
+ # and in an application with many merchants sharing a funded
17
+ # URL the application may not yet know which merchant the
18
+ # post back is for until the response of the confirmation is
19
+ # received, which contains the order number.
20
+ def self.confirm(transaction)
21
+ gateway = new(:login => '')
22
+ gateway.confirm(transaction)
23
+ end
24
+
25
+ def purchase(money, options = {})
26
+ post = {}
27
+ add_amount(post, money)
28
+ add_invoice(post, options)
29
+ add_address(post, options)
30
+ add_interac_details(post, options)
31
+ add_transaction_type(post, :purchase)
32
+ commit(post)
33
+ end
34
+
35
+ # Confirm a transaction posted back from the bank to Beanstream.
36
+ def confirm(transaction)
37
+ post(transaction)
38
+ end
39
+
40
+ private
41
+
42
+ def add_interac_details(post, options)
43
+ address = options[:billing_address] || options[:address] || {}
44
+ post[:trnCardOwner] = address[:name]
45
+ post[:paymentMethod] = 'IO'
46
+ end
47
+
48
+ def build_response(*args)
49
+ BeanstreamInteracResponse.new(*args)
50
+ end
51
+ end
52
+ end
53
+ end
54
+
@@ -0,0 +1,98 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ # Bogus Gateway
4
+ class BogusGateway < Gateway
5
+ AUTHORIZATION = '53433'
6
+
7
+ SUCCESS_MESSAGE = "Bogus Gateway: Forced success"
8
+ FAILURE_MESSAGE = "Bogus Gateway: Forced failure"
9
+ ERROR_MESSAGE = "Bogus Gateway: Use CreditCard number 1 for success, 2 for exception and anything else for error"
10
+ CREDIT_ERROR_MESSAGE = "Bogus Gateway: Use trans_id 1 for success, 2 for exception and anything else for error"
11
+ UNSTORE_ERROR_MESSAGE = "Bogus Gateway: Use trans_id 1 for success, 2 for exception and anything else for error"
12
+ CAPTURE_ERROR_MESSAGE = "Bogus Gateway: Use authorization number 1 for exception, 2 for error and anything else for success"
13
+ VOID_ERROR_MESSAGE = "Bogus Gateway: Use authorization number 1 for exception, 2 for error and anything else for success"
14
+
15
+ self.supported_countries = ['US']
16
+ self.supported_cardtypes = [:bogus]
17
+ self.homepage_url = 'http://example.com'
18
+ self.display_name = 'Bogus'
19
+
20
+ def authorize(money, creditcard, options = {})
21
+ case creditcard.number
22
+ when '1'
23
+ Response.new(true, SUCCESS_MESSAGE, {:authorized_amount => money.to_s}, :test => true, :authorization => AUTHORIZATION )
24
+ when '2'
25
+ Response.new(false, FAILURE_MESSAGE, {:authorized_amount => money.to_s, :error => FAILURE_MESSAGE }, :test => true)
26
+ else
27
+ raise Error, ERROR_MESSAGE
28
+ end
29
+ end
30
+
31
+ def purchase(money, creditcard, options = {})
32
+ case creditcard.number
33
+ when '1'
34
+ Response.new(true, SUCCESS_MESSAGE, {:paid_amount => money.to_s}, :test => true)
35
+ when '2'
36
+ Response.new(false, FAILURE_MESSAGE, {:paid_amount => money.to_s, :error => FAILURE_MESSAGE },:test => true)
37
+ else
38
+ raise Error, ERROR_MESSAGE
39
+ end
40
+ end
41
+
42
+ def credit(money, ident, options = {})
43
+ case ident
44
+ when '1'
45
+ raise Error, CREDIT_ERROR_MESSAGE
46
+ when '2'
47
+ Response.new(false, FAILURE_MESSAGE, {:paid_amount => money.to_s, :error => FAILURE_MESSAGE }, :test => true)
48
+ else
49
+ Response.new(true, SUCCESS_MESSAGE, {:paid_amount => money.to_s}, :test => true)
50
+ end
51
+ end
52
+
53
+ def capture(money, ident, options = {})
54
+ case ident
55
+ when '1'
56
+ raise Error, CAPTURE_ERROR_MESSAGE
57
+ when '2'
58
+ Response.new(false, FAILURE_MESSAGE, {:paid_amount => money.to_s, :error => FAILURE_MESSAGE }, :test => true)
59
+ else
60
+ Response.new(true, SUCCESS_MESSAGE, {:paid_amount => money.to_s}, :test => true)
61
+ end
62
+ end
63
+
64
+ def void(ident, options = {})
65
+ case ident
66
+ when '1'
67
+ raise Error, VOID_ERROR_MESSAGE
68
+ when '2'
69
+ Response.new(false, FAILURE_MESSAGE, {:authorization => ident, :error => FAILURE_MESSAGE }, :test => true)
70
+ else
71
+ Response.new(true, SUCCESS_MESSAGE, {:authorization => ident}, :test => true)
72
+ end
73
+ end
74
+
75
+ def store(creditcard, options = {})
76
+ case creditcard.number
77
+ when '1'
78
+ Response.new(true, SUCCESS_MESSAGE, {:billingid => '1'}, :test => true, :authorization => AUTHORIZATION )
79
+ when '2'
80
+ Response.new(false, FAILURE_MESSAGE, {:billingid => nil, :error => FAILURE_MESSAGE }, :test => true)
81
+ else
82
+ raise Error, ERROR_MESSAGE
83
+ end
84
+ end
85
+
86
+ def unstore(identification, options = {})
87
+ case identification
88
+ when '1'
89
+ Response.new(true, SUCCESS_MESSAGE, {}, :test => true)
90
+ when '2'
91
+ Response.new(false, FAILURE_MESSAGE, {:error => FAILURE_MESSAGE },:test => true)
92
+ else
93
+ raise Error, UNSTORE_ERROR_MESSAGE
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,17 @@
1
+ require File.join(File.dirname(__FILE__),'smart_ps.rb')
2
+ module ActiveMerchant #:nodoc:
3
+ module Billing #:nodoc:
4
+ class BraintreeGateway < SmartPs
5
+ def api_url
6
+ 'https://secure.braintreepaymentgateway.com/api/transact.php'
7
+ end
8
+
9
+ self.supported_countries = ['US']
10
+ self.supported_cardtypes = [:visa, :master, :american_express, :discover]
11
+ self.homepage_url = 'http://www.braintreepaymentsolutions.com'
12
+ self.display_name = 'Braintree'
13
+ self.default_currency = 'USD'
14
+ end
15
+ end
16
+ end
17
+