activemerchant 1.24.0 → 1.25.0
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.
- data.tar.gz.sig +0 -0
- data/CHANGELOG +31 -0
- data/CONTRIBUTORS +12 -0
- data/README.md +1 -0
- data/lib/active_merchant/billing/base.rb +8 -9
- data/lib/active_merchant/billing/gateway.rb +31 -31
- data/lib/active_merchant/billing/gateways/authorize_net.rb +25 -24
- data/lib/active_merchant/billing/gateways/braintree_blue.rb +45 -1
- data/lib/active_merchant/billing/gateways/cyber_source.rb +157 -29
- data/lib/active_merchant/billing/gateways/eway.rb +17 -8
- data/lib/active_merchant/billing/gateways/fat_zebra.rb +152 -0
- data/lib/active_merchant/billing/gateways/litle.rb +0 -1
- data/lib/active_merchant/billing/gateways/metrics_global.rb +323 -0
- data/lib/active_merchant/billing/gateways/orbital.rb +12 -9
- data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +7 -3
- data/lib/active_merchant/billing/gateways/wirecard.rb +79 -84
- data/lib/active_merchant/billing/integrations/easy_pay.rb +30 -0
- data/lib/active_merchant/billing/integrations/easy_pay/common.rb +40 -0
- data/lib/active_merchant/billing/integrations/easy_pay/helper.rb +40 -0
- data/lib/active_merchant/billing/integrations/easy_pay/notification.rb +51 -0
- data/lib/active_merchant/billing/integrations/payflow_link/helper.rb +1 -1
- data/lib/active_merchant/billing/integrations/paypal_payments_advanced.rb +20 -0
- data/lib/active_merchant/billing/integrations/paypal_payments_advanced/helper.rb +15 -0
- data/lib/active_merchant/version.rb +1 -1
- metadata +39 -25
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGELOG
CHANGED
@@ -1,5 +1,25 @@
|
|
1
1
|
= ActiveMerchant CHANGELOG
|
2
2
|
|
3
|
+
== Version 1.25.0 (July 3, 2012)
|
4
|
+
|
5
|
+
* eWAY gateway: Add support for Diners Club cards [Soleone]
|
6
|
+
* Orbital gateway: Never send country code for orders outside of US, CA and GB [Soleone]
|
7
|
+
* Add EasyPay integration [nashby]
|
8
|
+
* Updating LitleOnline requirement to 8.13.2 to take advantage of better validation and get bugfix for Username [GregDrake]
|
9
|
+
* USAepay gateway: Add description support [ntalbott]
|
10
|
+
* Add Paypal Payments Advanced integration [csaunders]
|
11
|
+
* Authorize.Net gateway: Improve #refund docs [neerajdotname]
|
12
|
+
* Wirecard gateway: Fix for missing address hash [ntalbott]
|
13
|
+
* Clean up requires of RubyGems and JSON gems. Rename remote Litle test to match naming conventions [codyfauser]
|
14
|
+
* Cybersource gateway: Fix updating address only [fabiokr]
|
15
|
+
* Cybersource gateway: Move email requirement [fabiokr]
|
16
|
+
* Add the Metrics Global gateway [DanKnox]
|
17
|
+
* Braintree Blue gateway: Support wiredump_device [moklett]
|
18
|
+
* Add Fat Zebra gateway [amasses]
|
19
|
+
* Braintree Blue gateway: Always pass CVV on update [shayfrendt]
|
20
|
+
* eWAY gateway: Update docs. Require address [juggler]
|
21
|
+
* Cybersource gateway: Add support for subscriptions [fabiokr]
|
22
|
+
|
3
23
|
== Version 1.24.0 (June 8, 2012)
|
4
24
|
|
5
25
|
* PayPal gateway: Support for incomplete captures [mbulat]
|
@@ -9,6 +29,17 @@
|
|
9
29
|
* Paybox Direct: treat all response codes besides '00000' as failures
|
10
30
|
[Soleone]
|
11
31
|
* Deprecate CreditCard#type method in favor of CreditCard#brand [jduff]
|
32
|
+
* Cybersource gateway: Add subscriptions support [fabiokr, jaredmoody]
|
33
|
+
* eWay gateway: Improved docs, and more accurate required parameters [juggler]
|
34
|
+
* Braintree Blue gateway: Always pass CVV on card update [shayfrendt]
|
35
|
+
* Add Fat Zebra gateway [amasses]
|
36
|
+
* Braintree Blue gateway: Add support for wiredump_device [moklett]
|
37
|
+
* Add Metrics Global gateway [DanKnox]
|
38
|
+
* Cybersource gateway: Do not require email address for subscription operations [fabiokr]
|
39
|
+
* Cybersource gateway: Fix passing only an address when updating a subscription [fabiokr]
|
40
|
+
* Wirecard gateway: Fix for missing address; general cleanup [ntalbott]
|
41
|
+
* Authorize.Net gateway: Document ability to just pass the last four to #refund [neerajdotname]
|
42
|
+
* Add EasyPay integration [nashby]
|
12
43
|
|
13
44
|
== Version 1.23.0 (May 23, 2012)
|
14
45
|
|
data/CONTRIBUTORS
CHANGED
@@ -305,3 +305,15 @@ ePay integration (April 2012)
|
|
305
305
|
Litle gateway (May 2012)
|
306
306
|
|
307
307
|
* Gregory Drake (GregDrake)
|
308
|
+
|
309
|
+
Fat Zebra gateway (June 2012)
|
310
|
+
|
311
|
+
* Matthew Savage (amasses)
|
312
|
+
|
313
|
+
Metrics Global gateway (June 2012)
|
314
|
+
|
315
|
+
* Dan Knox (DanKnox)
|
316
|
+
|
317
|
+
EasyPay integration (July 2012)
|
318
|
+
|
319
|
+
* Vasiliy Ermolovich (nashby)
|
data/README.md
CHANGED
@@ -99,6 +99,7 @@ The [ActiveMerchant Wiki](http://github.com/Shopify/active_merchant/wikis) conta
|
|
99
99
|
* [ePay](http://www.epay.dk/) - DK, SE, NO
|
100
100
|
* [eWAY](http://www.eway.com.au/) - AU
|
101
101
|
* [E-xact](http://www.e-xact.com) - CA, US
|
102
|
+
* [Fat Zebra](https://www.fatzebra.com.au) - AU
|
102
103
|
* [Federated Canada](http://www.federatedcanada.com/) - CA
|
103
104
|
* [FirstPay](http://www.first-pay.com) - US
|
104
105
|
* [Garanti Sanal POS](https://ccpos.garanti.com.tr/ccRaporlar/garanti/ccReports) - US, TR
|
@@ -5,12 +5,12 @@ module ActiveMerchant #:nodoc:
|
|
5
5
|
#
|
6
6
|
# ActiveMerchant::Billing::Base.gateway_mode = :test
|
7
7
|
mattr_accessor :gateway_mode
|
8
|
-
|
8
|
+
|
9
9
|
# Set ActiveMerchant integrations in test mode.
|
10
10
|
#
|
11
11
|
# ActiveMerchant::Billing::Base.integration_mode = :test
|
12
12
|
mattr_accessor :integration_mode
|
13
|
-
|
13
|
+
|
14
14
|
# Set both the mode of both the gateways and integrations
|
15
15
|
# at once
|
16
16
|
mattr_reader :mode
|
@@ -22,36 +22,35 @@ module ActiveMerchant #:nodoc:
|
|
22
22
|
end
|
23
23
|
|
24
24
|
self.mode = :production
|
25
|
-
|
25
|
+
|
26
26
|
# Return the matching gateway for the provider
|
27
27
|
# * <tt>bogus</tt>: BogusGateway - Does nothing (for testing)
|
28
28
|
# * <tt>moneris</tt>: MonerisGateway
|
29
29
|
# * <tt>authorize_net</tt>: AuthorizeNetGateway
|
30
30
|
# * <tt>trust_commerce</tt>: TrustCommerceGateway
|
31
|
-
#
|
31
|
+
#
|
32
32
|
# ActiveMerchant::Billing::Base.gateway('moneris').new
|
33
33
|
def self.gateway(name)
|
34
34
|
Billing.const_get("#{name.to_s.downcase}_gateway".camelize)
|
35
35
|
end
|
36
|
-
|
37
36
|
|
38
37
|
# Return the matching integration module
|
39
38
|
# You can then get the notification from the module
|
40
|
-
# * <tt>bogus</tt>: Bogus - Does nothing (for testing)
|
39
|
+
# * <tt>bogus</tt>: Bogus - Does nothing (for testing)
|
41
40
|
# * <tt>chronopay</tt>: Chronopay - Does nothing (for testing)
|
42
41
|
# * <tt>paypal</tt>: Chronopay - Does nothing (for testing)
|
43
|
-
#
|
42
|
+
#
|
44
43
|
# chronopay = ActiveMerchant::Billing::Base.integration('chronopay')
|
45
44
|
# notification = chronopay.notification(raw_post)
|
46
45
|
#
|
47
46
|
def self.integration(name)
|
48
47
|
Billing::Integrations.const_get("#{name.to_s.downcase}".camelize)
|
49
48
|
end
|
50
|
-
|
49
|
+
|
51
50
|
# A check to see if we're in test mode
|
52
51
|
def self.test?
|
53
52
|
self.gateway_mode == :test
|
54
53
|
end
|
55
|
-
end
|
54
|
+
end
|
56
55
|
end
|
57
56
|
end
|
@@ -4,12 +4,12 @@ require 'active_merchant/billing/response'
|
|
4
4
|
|
5
5
|
module ActiveMerchant #:nodoc:
|
6
6
|
module Billing #:nodoc:
|
7
|
-
#
|
7
|
+
#
|
8
8
|
# == Description
|
9
|
-
# The Gateway class is the base class for all ActiveMerchant gateway implementations.
|
10
|
-
#
|
9
|
+
# The Gateway class is the base class for all ActiveMerchant gateway implementations.
|
10
|
+
#
|
11
11
|
# The standard list of gateway functions that most concrete gateway subclasses implement is:
|
12
|
-
#
|
12
|
+
#
|
13
13
|
# * <tt>purchase(money, creditcard, options = {})</tt>
|
14
14
|
# * <tt>authorize(money, creditcard, options = {})</tt>
|
15
15
|
# * <tt>capture(money, authorization, options = {})</tt>
|
@@ -24,7 +24,7 @@ module ActiveMerchant #:nodoc:
|
|
24
24
|
#
|
25
25
|
# * <tt>store(creditcard, options = {})</tt>
|
26
26
|
# * <tt>unstore(identification, options = {})</tt>
|
27
|
-
#
|
27
|
+
#
|
28
28
|
# === Gateway Options
|
29
29
|
# The options hash consists of the following options:
|
30
30
|
#
|
@@ -38,9 +38,9 @@ module ActiveMerchant #:nodoc:
|
|
38
38
|
# * <tt>:currency</tt> - The currency of the transaction. Only important when you are using a currency that is not the default with a gateway that supports multiple currencies.
|
39
39
|
# * <tt>:billing_address</tt> - A hash containing the billing address of the customer.
|
40
40
|
# * <tt>:shipping_address</tt> - A hash containing the shipping address of the customer.
|
41
|
-
#
|
41
|
+
#
|
42
42
|
# The <tt>:billing_address</tt>, and <tt>:shipping_address</tt> hashes can have the following keys:
|
43
|
-
#
|
43
|
+
#
|
44
44
|
# * <tt>:name</tt> - The full name of the customer.
|
45
45
|
# * <tt>:company</tt> - The company name of the customer.
|
46
46
|
# * <tt>:address1</tt> - The primary street address of the customer.
|
@@ -60,78 +60,78 @@ module ActiveMerchant #:nodoc:
|
|
60
60
|
include RequiresParameters
|
61
61
|
include CreditCardFormatting
|
62
62
|
include Utils
|
63
|
-
|
63
|
+
|
64
64
|
DEBIT_CARDS = [ :switch, :solo ]
|
65
65
|
CURRENCIES_WITHOUT_FRACTIONS = [ 'JPY' ]
|
66
66
|
CREDIT_DEPRECATION_MESSAGE = "Support for using credit to refund existing transactions is deprecated and will be removed from a future release of ActiveMerchant. Please use the refund method instead."
|
67
|
-
|
67
|
+
|
68
68
|
cattr_reader :implementations
|
69
69
|
@@implementations = []
|
70
|
-
|
70
|
+
|
71
71
|
def self.inherited(subclass)
|
72
72
|
super
|
73
73
|
@@implementations << subclass
|
74
74
|
end
|
75
|
-
|
75
|
+
|
76
76
|
# The format of the amounts used by the gateway
|
77
77
|
# :dollars => '12.50'
|
78
78
|
# :cents => '1250'
|
79
79
|
class_attribute :money_format
|
80
80
|
self.money_format = :dollars
|
81
|
-
|
81
|
+
|
82
82
|
# The default currency for the transactions if no currency is provided
|
83
83
|
class_attribute :default_currency
|
84
|
-
|
84
|
+
|
85
85
|
# The countries of merchants the gateway supports
|
86
86
|
class_attribute :supported_countries
|
87
87
|
self.supported_countries = []
|
88
|
-
|
88
|
+
|
89
89
|
# The supported card types for the gateway
|
90
90
|
class_attribute :supported_cardtypes
|
91
91
|
self.supported_cardtypes = []
|
92
|
-
|
92
|
+
|
93
93
|
class_attribute :homepage_url
|
94
94
|
class_attribute :display_name
|
95
|
-
|
95
|
+
|
96
96
|
# The application making the calls to the gateway
|
97
97
|
# Useful for things like the PayPal build notation (BN) id fields
|
98
98
|
superclass_delegating_accessor :application_id
|
99
99
|
self.application_id = 'ActiveMerchant'
|
100
|
-
|
100
|
+
|
101
101
|
attr_reader :options
|
102
|
-
|
102
|
+
|
103
103
|
# Use this method to check if your gateway of interest supports a credit card of some type
|
104
104
|
def self.supports?(card_type)
|
105
105
|
supported_cardtypes.include?(card_type.to_sym)
|
106
106
|
end
|
107
|
-
|
107
|
+
|
108
108
|
def self.card_brand(source)
|
109
109
|
result = source.respond_to?(:brand) ? source.brand : source.type
|
110
110
|
result.to_s.downcase
|
111
111
|
end
|
112
|
-
|
112
|
+
|
113
113
|
def card_brand(source)
|
114
114
|
self.class.card_brand(source)
|
115
115
|
end
|
116
|
-
|
116
|
+
|
117
117
|
# Initialize a new gateway.
|
118
|
-
#
|
119
|
-
# See the documentation for the gateway you will be using to make sure there are no other
|
118
|
+
#
|
119
|
+
# See the documentation for the gateway you will be using to make sure there are no other
|
120
120
|
# required options.
|
121
121
|
def initialize(options = {})
|
122
122
|
end
|
123
|
-
|
123
|
+
|
124
124
|
# Are we running in test mode?
|
125
125
|
def test?
|
126
126
|
Base.gateway_mode == :test
|
127
127
|
end
|
128
|
-
|
128
|
+
|
129
129
|
private # :nodoc: all
|
130
130
|
|
131
|
-
def name
|
131
|
+
def name
|
132
132
|
self.class.name.scan(/\:\:(\w+)Gateway/).flatten.first
|
133
133
|
end
|
134
|
-
|
134
|
+
|
135
135
|
def amount(money)
|
136
136
|
return nil if money.nil?
|
137
137
|
cents = if money.respond_to?(:cents)
|
@@ -141,8 +141,8 @@ module ActiveMerchant #:nodoc:
|
|
141
141
|
money
|
142
142
|
end
|
143
143
|
|
144
|
-
if money.is_a?(String)
|
145
|
-
raise ArgumentError, 'money amount must be a positive Integer in cents.'
|
144
|
+
if money.is_a?(String)
|
145
|
+
raise ArgumentError, 'money amount must be a positive Integer in cents.'
|
146
146
|
end
|
147
147
|
|
148
148
|
if self.money_format == :cents
|
@@ -156,11 +156,11 @@ module ActiveMerchant #:nodoc:
|
|
156
156
|
amount = amount(money)
|
157
157
|
CURRENCIES_WITHOUT_FRACTIONS.include?(currency.to_s) ? amount.split('.').first : amount
|
158
158
|
end
|
159
|
-
|
159
|
+
|
160
160
|
def currency(money)
|
161
161
|
money.respond_to?(:currency) ? money.currency : self.default_currency
|
162
162
|
end
|
163
|
-
|
163
|
+
|
164
164
|
def requires_start_date_or_issue_number?(credit_card)
|
165
165
|
return false if card_brand(credit_card).blank?
|
166
166
|
DEBIT_CARDS.include?(card_brand(credit_card).to_sym)
|
@@ -2,11 +2,11 @@ module ActiveMerchant #:nodoc:
|
|
2
2
|
module Billing #:nodoc:
|
3
3
|
# For more information on the Authorize.Net Gateway please visit their {Integration Center}[http://developer.authorize.net/]
|
4
4
|
#
|
5
|
-
# The login and password are not the username and password you use to
|
6
|
-
# login to the Authorize.Net Merchant Interface. Instead, you will
|
7
|
-
# use the API Login ID as the login and Transaction Key as the
|
5
|
+
# The login and password are not the username and password you use to
|
6
|
+
# login to the Authorize.Net Merchant Interface. Instead, you will
|
7
|
+
# use the API Login ID as the login and Transaction Key as the
|
8
8
|
# password.
|
9
|
-
#
|
9
|
+
#
|
10
10
|
# ==== How to Get Your API Login ID and Transaction Key
|
11
11
|
#
|
12
12
|
# 1. Log into the Merchant Interface
|
@@ -14,13 +14,13 @@ module ActiveMerchant #:nodoc:
|
|
14
14
|
# 3. Click on API Login ID and Transaction Key in the Security section
|
15
15
|
# 4. Type in the answer to the secret question configured on setup
|
16
16
|
# 5. Click Submit
|
17
|
-
#
|
17
|
+
#
|
18
18
|
# ==== Automated Recurring Billing (ARB)
|
19
|
-
#
|
19
|
+
#
|
20
20
|
# Automated Recurring Billing (ARB) is an optional service for submitting and managing recurring, or subscription-based, transactions.
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# To use recurring, update_recurring, cancel_recurring and status_recurring ARB must be enabled for your account.
|
23
|
-
#
|
23
|
+
#
|
24
24
|
# Information about ARB is available on the {Authorize.Net website}[http://www.authorize.net/solutions/merchantsolutions/merchantservices/automatedrecurringbilling/].
|
25
25
|
# Information about the ARB API is available at the {Authorize.Net Integration Center}[http://developer.authorize.net/]
|
26
26
|
class AuthorizeNetGateway < Gateway
|
@@ -33,7 +33,7 @@ module ActiveMerchant #:nodoc:
|
|
33
33
|
|
34
34
|
self.arb_test_url = 'https://apitest.authorize.net/xml/v1/request.api'
|
35
35
|
self.arb_live_url = 'https://api.authorize.net/xml/v1/request.api'
|
36
|
-
|
36
|
+
|
37
37
|
class_attribute :duplicate_window
|
38
38
|
|
39
39
|
APPROVED, DECLINED, ERROR, FRAUD_REVIEW = 1, 2, 3, 4
|
@@ -68,7 +68,7 @@ module ActiveMerchant #:nodoc:
|
|
68
68
|
#
|
69
69
|
# * <tt>:login</tt> -- The Authorize.Net API Login ID (REQUIRED)
|
70
70
|
# * <tt>:password</tt> -- The Authorize.Net Transaction Key. (REQUIRED)
|
71
|
-
# * <tt>:test</tt> -- +true+ or +false+. If true, perform transactions against the test server.
|
71
|
+
# * <tt>:test</tt> -- +true+ or +false+. If true, perform transactions against the test server.
|
72
72
|
# Otherwise, perform transactions against the production server.
|
73
73
|
def initialize(options = {})
|
74
74
|
requires!(options, :login, :password)
|
@@ -150,6 +150,7 @@ module ActiveMerchant #:nodoc:
|
|
150
150
|
# ==== Options
|
151
151
|
#
|
152
152
|
# * <tt>:card_number</tt> -- The credit card number the refund is being issued to. (REQUIRED)
|
153
|
+
# You can either pass the last four digits of the card number or the full card number.
|
153
154
|
# * <tt>:first_name</tt> -- The first name of the account being refunded.
|
154
155
|
# * <tt>:last_name</tt> -- The last name of the account being refunded.
|
155
156
|
# * <tt>:zip</tt> -- The postal code of the account being refunded.
|
@@ -257,7 +258,7 @@ module ActiveMerchant #:nodoc:
|
|
257
258
|
end
|
258
259
|
|
259
260
|
private
|
260
|
-
|
261
|
+
|
261
262
|
def commit(action, money, parameters)
|
262
263
|
parameters[:amount] = amount(money) unless action == 'VOID'
|
263
264
|
|
@@ -278,8 +279,8 @@ module ActiveMerchant #:nodoc:
|
|
278
279
|
# (TESTMODE) Successful Sale
|
279
280
|
test_mode = test? || message =~ /TESTMODE/
|
280
281
|
|
281
|
-
Response.new(success?(response), message, response,
|
282
|
-
:test => test_mode,
|
282
|
+
Response.new(success?(response), message, response,
|
283
|
+
:test => test_mode,
|
283
284
|
:authorization => response[:transaction_id],
|
284
285
|
:fraud_review => fraud_review?(response),
|
285
286
|
:avs_result => { :code => response[:avs_result_code] },
|
@@ -300,7 +301,7 @@ module ActiveMerchant #:nodoc:
|
|
300
301
|
|
301
302
|
results = {
|
302
303
|
:response_code => fields[RESPONSE_CODE].to_i,
|
303
|
-
:response_reason_code => fields[RESPONSE_REASON_CODE],
|
304
|
+
:response_reason_code => fields[RESPONSE_REASON_CODE],
|
304
305
|
:response_reason_text => fields[RESPONSE_REASON_TEXT],
|
305
306
|
:avs_result_code => fields[AVS_RESULT_CODE],
|
306
307
|
:transaction_id => fields[TRANSACTION_ID],
|
@@ -353,7 +354,7 @@ module ActiveMerchant #:nodoc:
|
|
353
354
|
post[:customer_ip] = options[:ip]
|
354
355
|
end
|
355
356
|
end
|
356
|
-
|
357
|
+
|
357
358
|
# x_duplicate_window won't be sent by default, because sending it changes the response.
|
358
359
|
# "If this field is present in the request with or without a value, an enhanced duplicate transaction response will be sent."
|
359
360
|
# (as of 2008-12-30) http://www.authorize.net/support/AIM_guide_SCC.pdf
|
@@ -373,7 +374,7 @@ module ActiveMerchant #:nodoc:
|
|
373
374
|
post[:country] = address[:country].to_s
|
374
375
|
post[:state] = address[:state].blank? ? 'n/a' : address[:state]
|
375
376
|
end
|
376
|
-
|
377
|
+
|
377
378
|
if address = options[:shipping_address]
|
378
379
|
post[:ship_to_first_name] = address[:first_name].to_s
|
379
380
|
post[:ship_to_last_name] = address[:last_name].to_s
|
@@ -398,11 +399,11 @@ module ActiveMerchant #:nodoc:
|
|
398
399
|
end
|
399
400
|
end
|
400
401
|
|
401
|
-
def message_from(results)
|
402
|
+
def message_from(results)
|
402
403
|
if results[:response_code] == DECLINED
|
403
404
|
return CVVResult.messages[ results[:card_code] ] if CARD_CODE_ERRORS.include?(results[:card_code])
|
404
405
|
if AVS_REASON_CODES.include?(results[:response_reason_code]) && AVS_ERRORS.include?(results[:avs_result_code])
|
405
|
-
return AVSResult.messages[ results[:avs_result_code] ]
|
406
|
+
return AVSResult.messages[ results[:avs_result_code] ]
|
406
407
|
end
|
407
408
|
end
|
408
409
|
|
@@ -484,7 +485,7 @@ module ActiveMerchant #:nodoc:
|
|
484
485
|
xml.tag!('name', options[:subscription_name]) if options[:subscription_name]
|
485
486
|
# Contains information about the payment schedule
|
486
487
|
add_arb_payment_schedule(xml, options)
|
487
|
-
# The amount to be billed to the customer
|
488
|
+
# The amount to be billed to the customer
|
488
489
|
# for each payment in the subscription
|
489
490
|
xml.tag!('amount', amount(options[:amount])) if options[:amount]
|
490
491
|
if trial = options[:trial]
|
@@ -523,7 +524,7 @@ module ActiveMerchant #:nodoc:
|
|
523
524
|
def add_arb_duration(xml, options)
|
524
525
|
duration = options[:duration]
|
525
526
|
return unless duration
|
526
|
-
# The date the subscription begins
|
527
|
+
# The date the subscription begins
|
527
528
|
# (also the date the initial billing occurs)
|
528
529
|
xml.tag!('startDate', duration[:start_date]) if duration[:start_date]
|
529
530
|
# Number of billing occurrences or payments for the subscription
|
@@ -569,7 +570,7 @@ module ActiveMerchant #:nodoc:
|
|
569
570
|
end
|
570
571
|
|
571
572
|
# Adds customer’s bank account information
|
572
|
-
# Note: This element should only be included
|
573
|
+
# Note: This element should only be included
|
573
574
|
# when the payment method is bank account.
|
574
575
|
def add_arb_bank_account(xml, options)
|
575
576
|
bank_account = options[:bank_account]
|
@@ -581,10 +582,10 @@ module ActiveMerchant #:nodoc:
|
|
581
582
|
xml.tag!('routingNumber', bank_account[:routing_number])
|
582
583
|
# The bank account number used for payment of the subscription
|
583
584
|
xml.tag!('accountNumber', bank_account[:account_number])
|
584
|
-
# The full name of the individual associated
|
585
|
+
# The full name of the individual associated
|
585
586
|
# with the bank account number
|
586
587
|
xml.tag!('nameOfAccount', bank_account[:name_of_account])
|
587
|
-
# The full name of the individual associated
|
588
|
+
# The full name of the individual associated
|
588
589
|
# with the bank account number (optional)
|
589
590
|
xml.tag!('bankName', bank_account[:bank_name]) if bank_account[:bank_name]
|
590
591
|
# The type of electronic check transaction used for the subscription
|
@@ -655,7 +656,7 @@ module ActiveMerchant #:nodoc:
|
|
655
656
|
def recurring_commit(action, request)
|
656
657
|
url = test? ? arb_test_url : arb_live_url
|
657
658
|
xml = ssl_post(url, request, "Content-Type" => "text/xml")
|
658
|
-
|
659
|
+
|
659
660
|
response = recurring_parse(action, xml)
|
660
661
|
|
661
662
|
message = response[:message] || response[:text]
|