activemerchant 1.29.3 → 1.30.0
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/CHANGELOG +39 -0
- data/CONTRIBUTORS +19 -0
- data/README.md +43 -41
- data/lib/active_merchant/billing/check.rb +15 -11
- data/lib/active_merchant/billing/credit_card.rb +5 -1
- data/lib/active_merchant/billing/credit_card_formatting.rb +8 -8
- data/lib/active_merchant/billing/gateway.rb +1 -1
- data/lib/active_merchant/billing/gateways/authorize_net.rb +9 -1
- data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +15 -4
- data/lib/active_merchant/billing/gateways/balanced.rb +9 -3
- data/lib/active_merchant/billing/gateways/banwire.rb +15 -1
- data/lib/active_merchant/billing/gateways/beanstream.rb +26 -24
- data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +6 -2
- data/lib/active_merchant/billing/gateways/braintree_blue.rb +5 -2
- data/lib/active_merchant/billing/gateways/cyber_source.rb +55 -22
- data/lib/active_merchant/billing/gateways/eway.rb +114 -171
- data/lib/active_merchant/billing/gateways/eway_managed.rb +52 -22
- data/lib/active_merchant/billing/gateways/firstdata_e4.rb +222 -0
- data/lib/active_merchant/billing/gateways/ideal_rabobank.rb +13 -2
- data/lib/active_merchant/billing/gateways/litle.rb +50 -19
- data/lib/active_merchant/billing/gateways/merchant_ware.rb +44 -9
- data/lib/active_merchant/billing/gateways/merchant_warrior.rb +190 -0
- data/lib/active_merchant/billing/gateways/moneris.rb +2 -4
- data/lib/active_merchant/billing/gateways/nab_transact.rb +20 -3
- data/lib/active_merchant/billing/gateways/netbilling.rb +1 -0
- data/lib/active_merchant/billing/gateways/netpay.rb +223 -0
- data/lib/active_merchant/billing/gateways/optimal_payment.rb +18 -3
- data/lib/active_merchant/billing/gateways/orbital.rb +9 -5
- data/lib/active_merchant/billing/gateways/payment_express.rb +62 -1
- data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +1 -1
- data/lib/active_merchant/billing/gateways/paypal_express.rb +2 -0
- data/lib/active_merchant/billing/gateways/pin.rb +157 -0
- data/lib/active_merchant/billing/gateways/qbms.rb +3 -2
- data/lib/active_merchant/billing/gateways/quickpay.rb +66 -28
- data/lib/active_merchant/billing/gateways/sage_pay.rb +6 -0
- data/lib/active_merchant/billing/gateways/smart_ps.rb +1 -1
- data/lib/active_merchant/billing/gateways/spreedly_core.rb +235 -0
- data/lib/active_merchant/billing/gateways/stripe.rb +1 -0
- data/lib/active_merchant/billing/gateways/wirecard.rb +15 -9
- data/lib/active_merchant/billing/integrations/payflow_link/helper.rb +4 -1
- data/lib/active_merchant/billing/integrations/paypal/notification.rb +39 -31
- data/lib/active_merchant/billing/integrations/quickpay/helper.rb +13 -10
- data/lib/active_merchant/billing/integrations/quickpay/notification.rb +14 -14
- data/lib/active_merchant/version.rb +1 -1
- metadata +109 -49
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGELOG
CHANGED
@@ -1,7 +1,46 @@
|
|
1
1
|
= ActiveMerchant CHANGELOG
|
2
2
|
|
3
|
+
== Version 1.30.0 (February 13, 2013)
|
4
|
+
|
5
|
+
* Add FirstData Global Gateway e4 [frobcode]
|
6
|
+
* PaymentExpress: Add support for optional fields: ClientType and TxnData [moklett]
|
7
|
+
* PaymentExpress: Limit MerchantReference/description to 64 chars [moklett]
|
8
|
+
* Wirecard: description must be no more than 32 characters [moklett]
|
9
|
+
* Litle: Add support for passing a token to the authorize and purchase methods [forest]
|
10
|
+
* PayPal Common: Allow searching for transactions by ProfileID [aq1018]
|
11
|
+
* Add Spreedly Core gateway [duff]
|
12
|
+
* eWay Gateway: Return proper value for authorization [duff]
|
13
|
+
* eWay Gateway: Add support for refunds [duff]
|
14
|
+
* Quickpay: Add support for protocols 5 & 6 [twarberg]
|
15
|
+
* Banwire gateway: Handle JSON::ParserError [duff]
|
16
|
+
* Balanced gateway: Fix unspecified marketplace [duff]
|
17
|
+
* QBMS gateway: Allow partial addresses [duff]
|
18
|
+
* Authorize.Net CIM: Allow omitting card expiration date [shanebonham]
|
19
|
+
* Authorize.Net CIM: Add support for extraOptions to createCustomerProfileTransaction [tpiekos]
|
20
|
+
* Add NETPAY gateway [samlown]
|
21
|
+
* Balanced gateway: Add amount to the refund method signature [ntalbott]
|
22
|
+
* Orbital gateway: Fix void method signature [aprofeit, ntalbott]
|
23
|
+
* Eway Managed: Add 'query_customer' API as #retrieve [cdaloisio]
|
24
|
+
* NetPay: Fix the signature for void [duff]
|
25
|
+
* Cybersource: Add check support [bowmande]
|
26
|
+
* Moneris: Use a capture of $0 for void [ntalbott]
|
27
|
+
* PayPal Express integration: Fix received_at time zone [ntalbott]
|
28
|
+
* NAB Transact: Add refund capability [nagash]
|
29
|
+
* Stripe: Add support for application_fee [duff]
|
30
|
+
* SagePay: Add support for GiftAidPayment [duff]
|
31
|
+
* Wirecard: Add support for partial captures [richardblair]
|
32
|
+
* Add Pin gateway [madpilot]
|
33
|
+
* Balanced: Added support for on_behalf_of_uri to capture [cwise]
|
34
|
+
* Litle: Add support for passing an order_source [forest]
|
35
|
+
* Add Merchant Warrior gateway [pronix, Fodoj, ntalbott]
|
36
|
+
* Use v4 of the MerchantWare API for voiding transactions [melari]
|
37
|
+
* Add support for Authorize.net in CA and GB [melari]
|
38
|
+
* Send customer's IP to Beanstream for fraud review [melari]
|
39
|
+
|
3
40
|
== Version 1.29.3 (December 7, 2012)
|
4
41
|
|
42
|
+
* Braintree Blue: Better wiredump_device support [ntalbott]
|
43
|
+
* Braintree: Store sets vault id as authorization [ntalbott]
|
5
44
|
* WorldPay: Fix currencies without fractions like JPY and HUF by rounding down amount [Soleone]
|
6
45
|
|
7
46
|
== Version 1.29.2 (December 7, 2012)
|
data/CONTRIBUTORS
CHANGED
@@ -357,3 +357,22 @@ Liqpay integration (November 2012)
|
|
357
357
|
eWay Rapid 3.0 gateway (December 2012)
|
358
358
|
|
359
359
|
* Nathaniel Talbott (ntalbott)
|
360
|
+
|
361
|
+
FirstData Global Gateway e4 (December 2012)
|
362
|
+
|
363
|
+
* Chris Sheppard (frobcode)
|
364
|
+
|
365
|
+
Spreedly Core gateway (December 2012)
|
366
|
+
|
367
|
+
* Duff OMelia (duff)
|
368
|
+
|
369
|
+
Pin gateway (February 2013)
|
370
|
+
|
371
|
+
* Myles Eftos (madpilot)
|
372
|
+
|
373
|
+
Merchant Warrior
|
374
|
+
|
375
|
+
* Ben Bruscella (benbruscella)
|
376
|
+
* Дмитрий Василец (pronix)
|
377
|
+
* Kirill Shirinkin (Fodoj)
|
378
|
+
* Nathaniel Talbott (ntalbott)
|
data/README.md
CHANGED
@@ -4,11 +4,13 @@ Active Merchant is an extraction from the e-commerce system [Shopify](http://www
|
|
4
4
|
Shopify's requirements for a simple and unified API to access dozens of different payment
|
5
5
|
gateways with very different internal APIs was the chief principle in designing the library.
|
6
6
|
|
7
|
-
Active Merchant has been in production use since June 2006 and is now used in most modern
|
8
|
-
Ruby applications which deal with financial transactions.
|
9
|
-
|
10
7
|
It was developed for usage in Ruby on Rails web applications and integrates seamlessly
|
11
|
-
as a plugin but it also works excellently as a stand alone library.
|
8
|
+
as a Rails plugin, but it also works excellently as a stand alone Ruby library.
|
9
|
+
|
10
|
+
Active Merchant has been in production use since June 2006 and is now used in most modern
|
11
|
+
Ruby applications which deal with financial transactions. It is maintained by the
|
12
|
+
[Shopify](http://www.shopify.com) and [Spreedly](https://spreedly.com) teams, with much help
|
13
|
+
from an ever-growing set of contributors.
|
12
14
|
|
13
15
|
See {file:GettingStarted.md} if you want to learn more about using Active Merchant in your
|
14
16
|
applications.
|
@@ -21,61 +23,54 @@ You can check out the latest source from git:
|
|
21
23
|
|
22
24
|
git clone git://github.com/Shopify/active_merchant.git
|
23
25
|
|
24
|
-
### As a Rails plugin
|
25
|
-
|
26
|
-
ActiveMerchant includes an init.rb file. This means that Rails will automatically load ActiveMerchant on startup. Run
|
27
|
-
the following command from the root directory of your Rails project to install ActiveMerchant as a Rails plugin:
|
28
|
-
|
29
|
-
script/plugin install git://github.com/Shopify/active_merchant.git
|
30
|
-
|
31
26
|
### From RubyGems
|
32
27
|
|
33
|
-
Installation from RubyGems
|
28
|
+
Installation from RubyGems:
|
34
29
|
|
35
30
|
gem install activemerchant
|
36
31
|
|
37
|
-
|
32
|
+
Or, if you're using Bundler, just add the following to your Gemfile:
|
38
33
|
|
39
|
-
gem 'activemerchant'
|
34
|
+
gem 'activemerchant'
|
40
35
|
|
41
36
|
## Usage
|
42
37
|
|
43
38
|
This simple example demonstrates how a purchase can be made using a person's
|
44
39
|
credit card details.
|
45
40
|
|
46
|
-
|
47
|
-
|
41
|
+
require 'rubygems'
|
42
|
+
require 'active_merchant'
|
48
43
|
|
49
|
-
|
50
|
-
|
44
|
+
# Use the TrustCommerce test servers
|
45
|
+
ActiveMerchant::Billing::Base.mode = :test
|
51
46
|
|
52
|
-
|
53
|
-
|
54
|
-
|
47
|
+
gateway = ActiveMerchant::Billing::TrustCommerceGateway.new(
|
48
|
+
:login => 'TestMerchant',
|
49
|
+
:password => 'password')
|
55
50
|
|
56
|
-
|
57
|
-
|
51
|
+
# ActiveMerchant accepts all amounts as Integer values in cents
|
52
|
+
amount = 1000 # $10.00
|
58
53
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
54
|
+
# The card verification value is also known as CVV2, CVC2, or CID
|
55
|
+
credit_card = ActiveMerchant::Billing::CreditCard.new(
|
56
|
+
:first_name => 'Bob',
|
57
|
+
:last_name => 'Bobsen',
|
58
|
+
:number => '4242424242424242',
|
59
|
+
:month => '8',
|
60
|
+
:year => Time.now.year+1,
|
61
|
+
:verification_value => '000')
|
67
62
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
63
|
+
# Validating the card automatically detects the card type
|
64
|
+
if credit_card.valid?
|
65
|
+
# Capture $10 from the credit card
|
66
|
+
response = gateway.purchase(amount, credit_card)
|
72
67
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
68
|
+
if response.success?
|
69
|
+
puts "Successfully charged $#{sprintf("%.2f", amount / 100)} to the credit card #{credit_card.display_number}"
|
70
|
+
else
|
71
|
+
raise StandardError, response.message
|
72
|
+
end
|
73
|
+
end
|
79
74
|
|
80
75
|
For more in-depth documentation and tutorials, see {file:GettingStarted.md} and the
|
81
76
|
[API documentation](http://rubydoc.info/github/Shopify/active_merchant/master/file/README.md).
|
@@ -104,6 +99,7 @@ The [ActiveMerchant Wiki](http://github.com/Shopify/active_merchant/wikis) conta
|
|
104
99
|
* [E-xact](http://www.e-xact.com) - CA, US
|
105
100
|
* [Fat Zebra](https://www.fatzebra.com.au) - AU
|
106
101
|
* [Federated Canada](http://www.federatedcanada.com/) - CA
|
102
|
+
* [FirstData Global Gateway e4](http://www.firstdata.com) - CA, US
|
107
103
|
* [FirstPay](http://www.first-pay.com) - US
|
108
104
|
* [Garanti Sanal POS](https://ccpos.garanti.com.tr/ccRaporlar/garanti/ccReports) - US, TR
|
109
105
|
* [HDFC](http://www.hdfcbank.com/sme/sme-details/merchant-services/guzh6m0i) - IN
|
@@ -116,6 +112,7 @@ The [ActiveMerchant Wiki](http://github.com/Shopify/active_merchant/wikis) conta
|
|
116
112
|
* [Litle](http://www.litle.com/) - US
|
117
113
|
* [Merchant e-Solutions](http://merchante-solutions.com/) - US
|
118
114
|
* [MerchantWare](http://merchantwarehouse.com/merchantware) - US
|
115
|
+
* [Merchant Warrior] (http://merchantwarrior.com) - AU
|
119
116
|
* [Mercury](http://www.mercurypay.com) - US
|
120
117
|
* [MasterCard Internet Gateway Service (MiGS)](http://mastercard.com/mastercardsps) - AU, AE, BD, BN, EG, HK, ID, IN, JO, KW, LB, LK, MU, MV, MY, NZ, OM, PH, QA, SA, SG, TT, VN
|
121
118
|
* [Modern Payments](http://www.modpay.com) - US
|
@@ -125,6 +122,7 @@ The [ActiveMerchant Wiki](http://github.com/Shopify/active_merchant/wikis) conta
|
|
125
122
|
* [NELiX TransaX Gateway](http://www.nelixtransax.com) - US
|
126
123
|
* [Netaxept](http://www.betalingsterminal.no/Netthandel-forside) - NO, DK, SE, FI
|
127
124
|
* [NETbilling](http://www.netbilling.com) - US
|
125
|
+
* [NetPay](http://www.netpay.com.mx) - MX
|
128
126
|
* [NetRegistry](http://www.netregistry.com.au) - AU
|
129
127
|
* [NMI](http://nmi.com/) - US
|
130
128
|
* [Ogone DirectLink](http://www.ogone.com) - BE, DE, FR, NL, AT, CH
|
@@ -142,6 +140,7 @@ The [ActiveMerchant Wiki](http://github.com/Shopify/active_merchant/wikis) conta
|
|
142
140
|
* [PayPal Website Payments Pro (US)](https://www.paypal.com/cgi-bin/webscr?cmd=_wp-pro-overview-outside) - US
|
143
141
|
* [PaySecure](http://www.commsecure.com.au/paysecure.shtml) - AU
|
144
142
|
* [PayWay](https://www.payway.com.au) - AU
|
143
|
+
* [Pin](http://www.pin.net.au/) - AU
|
145
144
|
* [Plug'n Pay](http://www.plugnpay.com/) - US
|
146
145
|
* [Psigate](http://www.psigate.com/) - CA
|
147
146
|
* [PSL Payment Solutions](http://www.paymentsolutionsltd.com/) - UK
|
@@ -159,6 +158,7 @@ The [ActiveMerchant Wiki](http://github.com/Shopify/active_merchant/wikis) conta
|
|
159
158
|
* [SecurePay](http://www.securepay.com/) - US
|
160
159
|
* [SecurePayTech](http://www.securepaytech.com/) - NZ
|
161
160
|
* [SkipJack](http://www.skipjack.com/) - US, CA
|
161
|
+
* [Spreedly Core](https://spreedlycore.com/) - AD, AE, AT, AU, BD, BE, BG, BN, CA, CH, CY, CZ, DE, DK, EE, EG, ES, FI, FR, GB, GI, GR, HK, HU, ID, IE, IL, IM, IN, IS, IT, JO, KW, LB, LI, LK, LT, LU, LV, MC, MT, MU, MV, MX, MY, NL, NO, NZ, OM, PH, PL, PT, QA, RO, SA, SE, SG, SI, SK, SM, TR, TT, UM, US, VA, VN, ZA
|
162
162
|
* [Stripe](https://stripe.com/) - US
|
163
163
|
* [TransFirst](http://www.transfirst.com/) - US
|
164
164
|
* [TrustCommerce](http://www.trustcommerce.com/) - US
|
@@ -211,3 +211,5 @@ Please don't touch the CHANGELOG in your pull requests, we'll add the appropriat
|
|
211
211
|
at release time.
|
212
212
|
|
213
213
|
[![Build Status](https://secure.travis-ci.org/Shopify/active_merchant.png)](http://travis-ci.org/Shopify/active_merchant)
|
214
|
+
|
215
|
+
[![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/Shopify/active_merchant)
|
@@ -3,21 +3,21 @@ module ActiveMerchant #:nodoc:
|
|
3
3
|
# The Check object is a plain old Ruby object, similar to CreditCard. It supports validation
|
4
4
|
# of necessary attributes such as checkholder's name, routing and account numbers, but it is
|
5
5
|
# not backed by any database.
|
6
|
-
#
|
6
|
+
#
|
7
7
|
# You may use Check in place of CreditCard with any gateway that supports it. Currently, only
|
8
8
|
# +BraintreeGateway+ supports the Check object.
|
9
9
|
class Check
|
10
10
|
include Validateable
|
11
|
-
|
11
|
+
|
12
12
|
attr_accessor :first_name, :last_name, :routing_number, :account_number, :account_holder_type, :account_type, :number
|
13
|
-
|
13
|
+
|
14
14
|
# Used for Canadian bank accounts
|
15
15
|
attr_accessor :institution_number, :transit_number
|
16
|
-
|
16
|
+
|
17
17
|
def name
|
18
18
|
@name ||= "#{@first_name} #{@last_name}".strip
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
def name=(value)
|
22
22
|
return if value.blank?
|
23
23
|
|
@@ -26,25 +26,29 @@ module ActiveMerchant #:nodoc:
|
|
26
26
|
@last_name = segments.pop
|
27
27
|
@first_name = segments.join(' ')
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
def validate
|
31
31
|
[:name, :routing_number, :account_number].each do |attr|
|
32
32
|
errors.add(attr, "cannot be empty") if self.send(attr).blank?
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
errors.add(:routing_number, "is invalid") unless valid_routing_number?
|
36
|
-
|
36
|
+
|
37
37
|
errors.add(:account_holder_type, "must be personal or business") if
|
38
38
|
!account_holder_type.blank? && !%w[business personal].include?(account_holder_type.to_s)
|
39
|
-
|
39
|
+
|
40
40
|
errors.add(:account_type, "must be checking or savings") if
|
41
41
|
!account_type.blank? && !%w[checking savings].include?(account_type.to_s)
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
def type
|
45
45
|
'check'
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
|
+
def check?
|
49
|
+
true
|
50
|
+
end
|
51
|
+
|
48
52
|
# Routing numbers may be validated by calculating a checksum and dividing it by 10. The
|
49
53
|
# formula is:
|
50
54
|
# (3(d1 + d4 + d7) + 7(d2 + d5 + d8) + 1(d3 + d6 + d9))mod 10 = 0
|
@@ -181,7 +181,7 @@ module ActiveMerchant #:nodoc:
|
|
181
181
|
def display_number
|
182
182
|
self.class.mask(number)
|
183
183
|
end
|
184
|
-
|
184
|
+
|
185
185
|
def first_digits
|
186
186
|
self.class.first_digits(number)
|
187
187
|
end
|
@@ -209,6 +209,10 @@ module ActiveMerchant #:nodoc:
|
|
209
209
|
require_verification_value
|
210
210
|
end
|
211
211
|
|
212
|
+
def check?
|
213
|
+
false
|
214
|
+
end
|
215
|
+
|
212
216
|
private
|
213
217
|
|
214
218
|
def before_validate #:nodoc:
|
@@ -1,21 +1,21 @@
|
|
1
1
|
module ActiveMerchant #:nodoc:
|
2
2
|
module Billing #:nodoc:
|
3
3
|
module CreditCardFormatting
|
4
|
-
|
5
|
-
# This method is used to format numerical information pertaining to credit cards.
|
6
|
-
#
|
4
|
+
|
5
|
+
# This method is used to format numerical information pertaining to credit cards.
|
6
|
+
#
|
7
7
|
# format(2005, :two_digits) # => "05"
|
8
8
|
# format(05, :four_digits) # => "0005"
|
9
9
|
def format(number, option)
|
10
10
|
return '' if number.blank?
|
11
|
-
|
11
|
+
|
12
12
|
case option
|
13
|
-
when :two_digits ; sprintf("%.2i", number)[-2..-1]
|
14
|
-
when :four_digits ; sprintf("%.4i", number)[-4..-1]
|
13
|
+
when :two_digits ; sprintf("%.2i", number.to_i)[-2..-1]
|
14
|
+
when :four_digits ; sprintf("%.4i", number.to_i)[-4..-1]
|
15
15
|
else number
|
16
16
|
end
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
end
|
20
20
|
end
|
21
|
-
end
|
21
|
+
end
|
@@ -62,7 +62,7 @@ module ActiveMerchant #:nodoc:
|
|
62
62
|
include Utils
|
63
63
|
|
64
64
|
DEBIT_CARDS = [ :switch, :solo ]
|
65
|
-
CURRENCIES_WITHOUT_FRACTIONS = [ 'JPY', 'HUF' ]
|
65
|
+
CURRENCIES_WITHOUT_FRACTIONS = [ 'JPY', 'HUF', 'TWD' ]
|
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
|
@@ -41,7 +41,9 @@ module ActiveMerchant #:nodoc:
|
|
41
41
|
RESPONSE_CODE, RESPONSE_REASON_CODE, RESPONSE_REASON_TEXT = 0, 2, 3
|
42
42
|
AVS_RESULT_CODE, TRANSACTION_ID, CARD_CODE_RESPONSE_CODE = 5, 6, 38
|
43
43
|
|
44
|
-
self.
|
44
|
+
self.default_currency = 'USD'
|
45
|
+
|
46
|
+
self.supported_countries = ['US', 'CA', 'GB']
|
45
47
|
self.supported_cardtypes = [:visa, :master, :american_express, :discover, :diners_club, :jcb]
|
46
48
|
self.homepage_url = 'http://www.authorize.net/'
|
47
49
|
self.display_name = 'Authorize.Net'
|
@@ -85,6 +87,7 @@ module ActiveMerchant #:nodoc:
|
|
85
87
|
# * <tt>options</tt> -- A hash of optional parameters.
|
86
88
|
def authorize(money, creditcard, options = {})
|
87
89
|
post = {}
|
90
|
+
add_currency_code(post, money, options)
|
88
91
|
add_invoice(post, options)
|
89
92
|
add_creditcard(post, creditcard)
|
90
93
|
add_address(post, options)
|
@@ -103,6 +106,7 @@ module ActiveMerchant #:nodoc:
|
|
103
106
|
# * <tt>options</tt> -- A hash of optional parameters.
|
104
107
|
def purchase(money, creditcard, options = {})
|
105
108
|
post = {}
|
109
|
+
add_currency_code(post, money, options)
|
106
110
|
add_invoice(post, options)
|
107
111
|
add_creditcard(post, creditcard)
|
108
112
|
add_address(post, options)
|
@@ -328,6 +332,10 @@ module ActiveMerchant #:nodoc:
|
|
328
332
|
request
|
329
333
|
end
|
330
334
|
|
335
|
+
def add_currency_code(post, money, options)
|
336
|
+
post[:currency_code] = options[:currency] || currency(money)
|
337
|
+
end
|
338
|
+
|
331
339
|
def add_invoice(post, options)
|
332
340
|
post[:invoice_num] = options[:order_id]
|
333
341
|
post[:description] = options[:description]
|
@@ -93,8 +93,8 @@ module ActiveMerchant #:nodoc:
|
|
93
93
|
# * <tt>:login</tt> -- The Authorize.Net API Login ID (REQUIRED)
|
94
94
|
# * <tt>:password</tt> -- The Authorize.Net Transaction Key. (REQUIRED)
|
95
95
|
# * <tt>:test</tt> -- +true+ or +false+. If true, perform transactions against the test server.
|
96
|
-
# * <tt>:delimiter</tt> -- The delimiter used in the direct response. Default is ',' (comma).
|
97
96
|
# Otherwise, perform transactions against the production server.
|
97
|
+
# * <tt>:delimiter</tt> -- The delimiter used in the direct response. Default is ',' (comma).
|
98
98
|
def initialize(options = {})
|
99
99
|
requires!(options, :login, :password)
|
100
100
|
super
|
@@ -468,7 +468,11 @@ module ActiveMerchant #:nodoc:
|
|
468
468
|
private
|
469
469
|
|
470
470
|
def expdate(credit_card)
|
471
|
-
|
471
|
+
if credit_card.year.present? && credit_card.month.present?
|
472
|
+
sprintf('%04d-%02d', credit_card.year, credit_card.month)
|
473
|
+
else
|
474
|
+
'XXXX'
|
475
|
+
end
|
472
476
|
end
|
473
477
|
|
474
478
|
def build_request(action, options = {})
|
@@ -599,8 +603,11 @@ module ActiveMerchant #:nodoc:
|
|
599
603
|
end
|
600
604
|
|
601
605
|
def build_create_customer_profile_transaction_request(xml, options)
|
606
|
+
options[:extra_options] ||= {}
|
607
|
+
options[:extra_options].merge!('x_test_request' => 'TRUE') if @options[:test]
|
608
|
+
|
602
609
|
add_transaction(xml, options[:transaction])
|
603
|
-
xml
|
610
|
+
tag_unless_blank(xml, 'extraOptions', format_extra_options(options[:extra_options]))
|
604
611
|
|
605
612
|
xml.target!
|
606
613
|
end
|
@@ -652,7 +659,7 @@ module ActiveMerchant #:nodoc:
|
|
652
659
|
tag_unless_blank(xml,'customerShippingAddressId', transaction[:customer_shipping_address_id])
|
653
660
|
xml.tag!('transId', transaction[:trans_id])
|
654
661
|
when :refund
|
655
|
-
#TODO - add lineItems
|
662
|
+
#TODO - add lineItems field
|
656
663
|
xml.tag!('amount', transaction[:amount])
|
657
664
|
tag_unless_blank(xml, 'customerProfileId', transaction[:customer_profile_id])
|
658
665
|
tag_unless_blank(xml, 'customerPaymentProfileId', transaction[:customer_payment_profile_id])
|
@@ -849,6 +856,10 @@ module ActiveMerchant #:nodoc:
|
|
849
856
|
xml.tag!(tag_name, data) unless data.blank? || data.nil?
|
850
857
|
end
|
851
858
|
|
859
|
+
def format_extra_options(options)
|
860
|
+
options.map{ |k, v| "#{k}=#{v}" }.join(',') unless options.nil?
|
861
|
+
end
|
862
|
+
|
852
863
|
def parse_direct_response(params)
|
853
864
|
delimiter = @options[:delimiter] || ','
|
854
865
|
direct_response = {'raw' => params}
|
@@ -91,8 +91,8 @@ module ActiveMerchant #:nodoc:
|
|
91
91
|
# * <tt>:login</tt> -- The Balanced API Secret (REQUIRED)
|
92
92
|
def initialize(options = {})
|
93
93
|
requires!(options, :login)
|
94
|
-
initialize_marketplace(options[:marketplace] || load_marketplace)
|
95
94
|
super
|
95
|
+
initialize_marketplace(options[:marketplace] || load_marketplace)
|
96
96
|
end
|
97
97
|
|
98
98
|
# Performs an authorization (Hold in Balanced nonclementure), which
|
@@ -197,6 +197,7 @@ module ActiveMerchant #:nodoc:
|
|
197
197
|
post[:hold_uri] = authorization
|
198
198
|
post[:amount] = money if money
|
199
199
|
post[:description] = options[:description] if options[:description]
|
200
|
+
post[:on_behalf_of_uri] = options[:on_behalf_of_uri] if options[:on_behalf_of_uri]
|
200
201
|
|
201
202
|
create_transaction(:post, @debits_uri, post)
|
202
203
|
rescue Error => ex
|
@@ -234,11 +235,16 @@ module ActiveMerchant #:nodoc:
|
|
234
235
|
# * <tt>`:amount`<tt> -- specify an amount if you want to perform a
|
235
236
|
# partial refund. This value will default to the total amount of the
|
236
237
|
# debit that has not been refunded so far.
|
237
|
-
def refund(debit_uri, options = {})
|
238
|
+
def refund(amount, debit_uri = "deprecated", options = {})
|
239
|
+
if(debit_uri == "deprecated" || debit_uri.kind_of?(Hash))
|
240
|
+
deprecated "Calling the refund method without an amount parameter is deprecated and will be removed in a future version."
|
241
|
+
return refund(options[:amount], amount, options)
|
242
|
+
end
|
243
|
+
|
238
244
|
requires!(debit_uri)
|
239
245
|
post = {}
|
240
246
|
post[:debit_uri] = debit_uri
|
241
|
-
post[:amount] =
|
247
|
+
post[:amount] = amount
|
242
248
|
post[:description] = options[:description]
|
243
249
|
create_transaction(:post, @refunds_uri, post)
|
244
250
|
rescue Error => ex
|