bitfluent-activemerchant 1.5.1.1

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 (138) hide show
  1. data/CHANGELOG +520 -0
  2. data/CONTRIBUTORS +138 -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 +102 -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 +406 -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/garanti.rb +222 -0
  31. data/lib/active_merchant/billing/gateways/instapay.rb +164 -0
  32. data/lib/active_merchant/billing/gateways/jetpay.rb +270 -0
  33. data/lib/active_merchant/billing/gateways/linkpoint.rb +449 -0
  34. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +154 -0
  35. data/lib/active_merchant/billing/gateways/merchant_ware.rb +283 -0
  36. data/lib/active_merchant/billing/gateways/modern_payments.rb +36 -0
  37. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +220 -0
  38. data/lib/active_merchant/billing/gateways/moneris.rb +205 -0
  39. data/lib/active_merchant/billing/gateways/net_registry.rb +189 -0
  40. data/lib/active_merchant/billing/gateways/netbilling.rb +168 -0
  41. data/lib/active_merchant/billing/gateways/ogone.rb +279 -0
  42. data/lib/active_merchant/billing/gateways/pay_junction.rb +392 -0
  43. data/lib/active_merchant/billing/gateways/pay_secure.rb +120 -0
  44. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +207 -0
  45. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +39 -0
  46. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +13 -0
  47. data/lib/active_merchant/billing/gateways/payflow.rb +236 -0
  48. data/lib/active_merchant/billing/gateways/payflow_express.rb +138 -0
  49. data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +15 -0
  50. data/lib/active_merchant/billing/gateways/payflow_uk.rb +21 -0
  51. data/lib/active_merchant/billing/gateways/payment_express.rb +230 -0
  52. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +326 -0
  53. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +38 -0
  54. data/lib/active_merchant/billing/gateways/paypal.rb +121 -0
  55. data/lib/active_merchant/billing/gateways/paypal_ca.rb +13 -0
  56. data/lib/active_merchant/billing/gateways/paypal_express.rb +135 -0
  57. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +20 -0
  58. data/lib/active_merchant/billing/gateways/plugnpay.rb +292 -0
  59. data/lib/active_merchant/billing/gateways/psigate.rb +214 -0
  60. data/lib/active_merchant/billing/gateways/psl_card.rb +304 -0
  61. data/lib/active_merchant/billing/gateways/quickpay.rb +213 -0
  62. data/lib/active_merchant/billing/gateways/realex.rb +200 -0
  63. data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +88 -0
  64. data/lib/active_merchant/billing/gateways/sage/sage_core.rb +116 -0
  65. data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +97 -0
  66. data/lib/active_merchant/billing/gateways/sage.rb +146 -0
  67. data/lib/active_merchant/billing/gateways/sage_pay.rb +309 -0
  68. data/lib/active_merchant/billing/gateways/sallie_mae.rb +144 -0
  69. data/lib/active_merchant/billing/gateways/secure_pay.rb +31 -0
  70. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +157 -0
  71. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +113 -0
  72. data/lib/active_merchant/billing/gateways/skip_jack.rb +453 -0
  73. data/lib/active_merchant/billing/gateways/smart_ps.rb +265 -0
  74. data/lib/active_merchant/billing/gateways/trans_first.rb +127 -0
  75. data/lib/active_merchant/billing/gateways/transax.rb +25 -0
  76. data/lib/active_merchant/billing/gateways/trust_commerce.rb +418 -0
  77. data/lib/active_merchant/billing/gateways/usa_epay.rb +194 -0
  78. data/lib/active_merchant/billing/gateways/verifi.rb +228 -0
  79. data/lib/active_merchant/billing/gateways/viaklix.rb +189 -0
  80. data/lib/active_merchant/billing/gateways/wirecard.rb +318 -0
  81. data/lib/active_merchant/billing/gateways.rb +18 -0
  82. data/lib/active_merchant/billing/integrations/action_view_helper.rb +79 -0
  83. data/lib/active_merchant/billing/integrations/bogus/helper.rb +17 -0
  84. data/lib/active_merchant/billing/integrations/bogus/notification.rb +11 -0
  85. data/lib/active_merchant/billing/integrations/bogus/return.rb +10 -0
  86. data/lib/active_merchant/billing/integrations/bogus.rb +23 -0
  87. data/lib/active_merchant/billing/integrations/chronopay/helper.rb +120 -0
  88. data/lib/active_merchant/billing/integrations/chronopay/notification.rb +158 -0
  89. data/lib/active_merchant/billing/integrations/chronopay/return.rb +10 -0
  90. data/lib/active_merchant/billing/integrations/chronopay.rb +23 -0
  91. data/lib/active_merchant/billing/integrations/gestpay/common.rb +42 -0
  92. data/lib/active_merchant/billing/integrations/gestpay/helper.rb +70 -0
  93. data/lib/active_merchant/billing/integrations/gestpay/notification.rb +85 -0
  94. data/lib/active_merchant/billing/integrations/gestpay/return.rb +10 -0
  95. data/lib/active_merchant/billing/integrations/gestpay.rb +25 -0
  96. data/lib/active_merchant/billing/integrations/helper.rb +93 -0
  97. data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +58 -0
  98. data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +59 -0
  99. data/lib/active_merchant/billing/integrations/hi_trust/return.rb +67 -0
  100. data/lib/active_merchant/billing/integrations/hi_trust.rb +27 -0
  101. data/lib/active_merchant/billing/integrations/ipay88/helper.rb +120 -0
  102. data/lib/active_merchant/billing/integrations/ipay88/return.rb +121 -0
  103. data/lib/active_merchant/billing/integrations/ipay88.rb +40 -0
  104. data/lib/active_merchant/billing/integrations/nochex/helper.rb +68 -0
  105. data/lib/active_merchant/billing/integrations/nochex/notification.rb +94 -0
  106. data/lib/active_merchant/billing/integrations/nochex/return.rb +10 -0
  107. data/lib/active_merchant/billing/integrations/nochex.rb +88 -0
  108. data/lib/active_merchant/billing/integrations/notification.rb +62 -0
  109. data/lib/active_merchant/billing/integrations/paypal/helper.rb +119 -0
  110. data/lib/active_merchant/billing/integrations/paypal/notification.rb +154 -0
  111. data/lib/active_merchant/billing/integrations/paypal/return.rb +10 -0
  112. data/lib/active_merchant/billing/integrations/paypal.rb +39 -0
  113. data/lib/active_merchant/billing/integrations/quickpay/helper.rb +72 -0
  114. data/lib/active_merchant/billing/integrations/quickpay/notification.rb +74 -0
  115. data/lib/active_merchant/billing/integrations/quickpay.rb +17 -0
  116. data/lib/active_merchant/billing/integrations/return.rb +35 -0
  117. data/lib/active_merchant/billing/integrations/two_checkout/helper.rb +59 -0
  118. data/lib/active_merchant/billing/integrations/two_checkout/notification.rb +114 -0
  119. data/lib/active_merchant/billing/integrations/two_checkout/return.rb +17 -0
  120. data/lib/active_merchant/billing/integrations/two_checkout.rb +23 -0
  121. data/lib/active_merchant/billing/integrations.rb +29 -0
  122. data/lib/active_merchant/billing/response.rb +32 -0
  123. data/lib/active_merchant/billing.rb +9 -0
  124. data/lib/active_merchant/common/connection.rb +172 -0
  125. data/lib/active_merchant/common/country.rb +319 -0
  126. data/lib/active_merchant/common/error.rb +26 -0
  127. data/lib/active_merchant/common/post_data.rb +24 -0
  128. data/lib/active_merchant/common/posts_data.rb +47 -0
  129. data/lib/active_merchant/common/requires_parameters.rb +16 -0
  130. data/lib/active_merchant/common/utils.rb +18 -0
  131. data/lib/active_merchant/common/validateable.rb +76 -0
  132. data/lib/active_merchant/common.rb +14 -0
  133. data/lib/active_merchant.rb +38 -0
  134. data/lib/activemerchant.rb +1 -0
  135. data/lib/certs/cacert.pem +7815 -0
  136. data/lib/support/gateway_support.rb +58 -0
  137. data/lib/support/outbound_hosts.rb +25 -0
  138. metadata +235 -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
+ card_brand(source) == "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
+ card_brand(source) == "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,102 @@
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
+ money = amount(money)
22
+ case creditcard.number
23
+ when '1'
24
+ Response.new(true, SUCCESS_MESSAGE, {:authorized_amount => money}, :test => true, :authorization => AUTHORIZATION )
25
+ when '2'
26
+ Response.new(false, FAILURE_MESSAGE, {:authorized_amount => money, :error => FAILURE_MESSAGE }, :test => true)
27
+ else
28
+ raise Error, ERROR_MESSAGE
29
+ end
30
+ end
31
+
32
+ def purchase(money, creditcard, options = {})
33
+ money = amount(money)
34
+ case creditcard.number
35
+ when '1'
36
+ Response.new(true, SUCCESS_MESSAGE, {:paid_amount => money}, :test => true)
37
+ when '2'
38
+ Response.new(false, FAILURE_MESSAGE, {:paid_amount => money, :error => FAILURE_MESSAGE },:test => true)
39
+ else
40
+ raise Error, ERROR_MESSAGE
41
+ end
42
+ end
43
+
44
+ def credit(money, ident, options = {})
45
+ money = amount(money)
46
+ case ident
47
+ when '1'
48
+ raise Error, CREDIT_ERROR_MESSAGE
49
+ when '2'
50
+ Response.new(false, FAILURE_MESSAGE, {:paid_amount => money, :error => FAILURE_MESSAGE }, :test => true)
51
+ else
52
+ Response.new(true, SUCCESS_MESSAGE, {:paid_amount => money}, :test => true)
53
+ end
54
+ end
55
+
56
+ def capture(money, ident, options = {})
57
+ money = amount(money)
58
+ case ident
59
+ when '1'
60
+ raise Error, CAPTURE_ERROR_MESSAGE
61
+ when '2'
62
+ Response.new(false, FAILURE_MESSAGE, {:paid_amount => money, :error => FAILURE_MESSAGE }, :test => true)
63
+ else
64
+ Response.new(true, SUCCESS_MESSAGE, {:paid_amount => money}, :test => true)
65
+ end
66
+ end
67
+
68
+ def void(ident, options = {})
69
+ case ident
70
+ when '1'
71
+ raise Error, VOID_ERROR_MESSAGE
72
+ when '2'
73
+ Response.new(false, FAILURE_MESSAGE, {:authorization => ident, :error => FAILURE_MESSAGE }, :test => true)
74
+ else
75
+ Response.new(true, SUCCESS_MESSAGE, {:authorization => ident}, :test => true)
76
+ end
77
+ end
78
+
79
+ def store(creditcard, options = {})
80
+ case creditcard.number
81
+ when '1'
82
+ Response.new(true, SUCCESS_MESSAGE, {:billingid => '1'}, :test => true, :authorization => AUTHORIZATION )
83
+ when '2'
84
+ Response.new(false, FAILURE_MESSAGE, {:billingid => nil, :error => FAILURE_MESSAGE }, :test => true)
85
+ else
86
+ raise Error, ERROR_MESSAGE
87
+ end
88
+ end
89
+
90
+ def unstore(identification, options = {})
91
+ case identification
92
+ when '1'
93
+ Response.new(true, SUCCESS_MESSAGE, {}, :test => true)
94
+ when '2'
95
+ Response.new(false, FAILURE_MESSAGE, {:error => FAILURE_MESSAGE },:test => true)
96
+ else
97
+ raise Error, UNSTORE_ERROR_MESSAGE
98
+ end
99
+ end
100
+ end
101
+ end
102
+ 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
+