activemerchant 1.28.0 → 1.29.0
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +3 -3
- data/CHANGELOG +36 -0
- data/CONTRIBUTORS +8 -0
- data/README.md +5 -0
- data/lib/active_merchant/billing/gateway.rb +2 -1
- data/lib/active_merchant/billing/gateways.rb +6 -7
- data/lib/active_merchant/billing/gateways/authorize_net.rb +3 -2
- data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +77 -78
- data/lib/active_merchant/billing/gateways/balanced.rb +0 -1
- data/lib/active_merchant/billing/gateways/banwire.rb +1 -2
- data/lib/active_merchant/billing/gateways/barclays_epdq.rb +19 -20
- data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +35 -36
- data/lib/active_merchant/billing/gateways/blue_pay.rb +135 -140
- data/lib/active_merchant/billing/gateways/braintree_blue.rb +12 -4
- data/lib/active_merchant/billing/gateways/card_stream.rb +54 -59
- data/lib/active_merchant/billing/gateways/certo_direct.rb +0 -1
- data/lib/active_merchant/billing/gateways/cyber_source.rb +19 -14
- data/lib/active_merchant/billing/gateways/data_cash.rb +106 -112
- data/lib/active_merchant/billing/gateways/efsnet.rb +29 -34
- data/lib/active_merchant/billing/gateways/elavon.rb +7 -1
- data/lib/active_merchant/billing/gateways/epay.rb +0 -1
- data/lib/active_merchant/billing/gateways/eway.rb +88 -93
- data/lib/active_merchant/billing/gateways/eway_managed.rb +47 -51
- data/lib/active_merchant/billing/gateways/exact.rb +45 -54
- data/lib/active_merchant/billing/gateways/federated_canada.rb +3 -4
- data/lib/active_merchant/billing/gateways/first_pay.rb +37 -38
- data/lib/active_merchant/billing/gateways/garanti.rb +1 -2
- data/lib/active_merchant/billing/gateways/hdfc.rb +207 -0
- data/lib/active_merchant/billing/gateways/ideal/ideal_base.rb +5 -8
- data/lib/active_merchant/billing/gateways/inspire.rb +52 -52
- data/lib/active_merchant/billing/gateways/instapay.rb +10 -11
- data/lib/active_merchant/billing/gateways/iridium.rb +38 -39
- data/lib/active_merchant/billing/gateways/itransact.rb +7 -9
- data/lib/active_merchant/billing/gateways/jetpay.rb +45 -46
- data/lib/active_merchant/billing/gateways/linkpoint.rb +104 -108
- data/lib/active_merchant/billing/gateways/litle.rb +1 -5
- data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +153 -155
- data/lib/active_merchant/billing/gateways/merchant_ware.rb +49 -50
- data/lib/active_merchant/billing/gateways/mercury.rb +272 -0
- data/lib/active_merchant/billing/gateways/metrics_global.rb +9 -10
- data/lib/active_merchant/billing/gateways/migs.rb +5 -3
- data/lib/active_merchant/billing/gateways/modern_payments.rb +6 -7
- data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +40 -41
- data/lib/active_merchant/billing/gateways/moneris.rb +46 -50
- data/lib/active_merchant/billing/gateways/moneris_us.rb +52 -55
- data/lib/active_merchant/billing/gateways/nab_transact.rb +0 -5
- data/lib/active_merchant/billing/gateways/net_registry.rb +20 -21
- data/lib/active_merchant/billing/gateways/netaxept.rb +30 -36
- data/lib/active_merchant/billing/gateways/netbilling.rb +2 -2
- data/lib/active_merchant/billing/gateways/ogone.rb +0 -5
- data/lib/active_merchant/billing/gateways/optimal_payment.rb +1 -6
- data/lib/active_merchant/billing/gateways/orbital.rb +25 -21
- data/lib/active_merchant/billing/gateways/orbital/avs_result.rb +93 -0
- data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +1 -6
- data/lib/active_merchant/billing/gateways/pay_junction.rb +62 -63
- data/lib/active_merchant/billing/gateways/pay_secure.rb +29 -30
- data/lib/active_merchant/billing/gateways/paybox_direct.rb +0 -5
- data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +33 -38
- data/lib/active_merchant/billing/gateways/payment_express.rb +48 -51
- data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +7 -11
- data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +7 -0
- data/lib/active_merchant/billing/gateways/paypal/paypal_recurring_api.rb +3 -0
- data/lib/active_merchant/billing/gateways/paystation.rb +62 -64
- data/lib/active_merchant/billing/gateways/payway.rb +2 -9
- data/lib/active_merchant/billing/gateways/plugnpay.rb +0 -1
- data/lib/active_merchant/billing/gateways/psigate.rb +102 -94
- data/lib/active_merchant/billing/gateways/psl_card.rb +66 -67
- data/lib/active_merchant/billing/gateways/qbms.rb +0 -6
- data/lib/active_merchant/billing/gateways/quantum.rb +2 -8
- data/lib/active_merchant/billing/gateways/quickpay.rb +2 -3
- data/lib/active_merchant/billing/gateways/realex.rb +6 -16
- data/lib/active_merchant/billing/gateways/redsys.rb +394 -0
- data/lib/active_merchant/billing/gateways/sage.rb +15 -16
- data/lib/active_merchant/billing/gateways/sage/sage_core.rb +25 -26
- data/lib/active_merchant/billing/gateways/sage_pay.rb +51 -56
- data/lib/active_merchant/billing/gateways/sallie_mae.rb +1 -2
- data/lib/active_merchant/billing/gateways/samurai.rb +1 -4
- data/lib/active_merchant/billing/gateways/secure_net.rb +0 -1
- data/lib/active_merchant/billing/gateways/secure_pay.rb +5 -8
- data/lib/active_merchant/billing/gateways/secure_pay_au.rb +0 -5
- data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +17 -18
- data/lib/active_merchant/billing/gateways/skip_jack.rb +29 -34
- data/lib/active_merchant/billing/gateways/smart_ps.rb +55 -56
- data/lib/active_merchant/billing/gateways/stripe.rb +8 -3
- data/lib/active_merchant/billing/gateways/trans_first.rb +28 -29
- data/lib/active_merchant/billing/gateways/trust_commerce.rb +85 -87
- data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +27 -28
- data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +0 -5
- data/lib/active_merchant/billing/gateways/verifi.rb +86 -87
- data/lib/active_merchant/billing/gateways/viaklix.rb +42 -47
- data/lib/active_merchant/billing/gateways/vindicia.rb +30 -28
- data/lib/active_merchant/billing/gateways/webpay.rb +45 -0
- data/lib/active_merchant/billing/gateways/wirecard.rb +0 -6
- data/lib/active_merchant/billing/gateways/worldpay.rb +4 -9
- data/lib/active_merchant/billing/integrations/a1agregator.rb +26 -0
- data/lib/active_merchant/billing/integrations/a1agregator/helper.rb +31 -0
- data/lib/active_merchant/billing/integrations/a1agregator/notification.rb +186 -0
- data/lib/active_merchant/billing/integrations/a1agregator/status.rb +38 -0
- data/lib/active_merchant/billing/integrations/liqpay.rb +30 -0
- data/lib/active_merchant/billing/integrations/liqpay/helper.rb +43 -0
- data/lib/active_merchant/billing/integrations/liqpay/notification.rb +89 -0
- data/lib/active_merchant/billing/integrations/liqpay/return.rb +83 -0
- data/lib/active_merchant/billing/integrations/moneybookers/helper.rb +17 -1
- data/lib/active_merchant/billing/integrations/notification.rb +4 -0
- data/lib/active_merchant/billing/integrations/pay_fast.rb +70 -0
- data/lib/active_merchant/billing/integrations/pay_fast/common.rb +42 -0
- data/lib/active_merchant/billing/integrations/pay_fast/helper.rb +50 -0
- data/lib/active_merchant/billing/integrations/pay_fast/notification.rb +134 -0
- data/lib/active_merchant/billing/integrations/pay_fast/return.rb +10 -0
- data/lib/active_merchant/billing/integrations/paypal/notification.rb +64 -0
- data/lib/active_merchant/billing/integrations/sage_pay_form/helper.rb +10 -7
- data/lib/active_merchant/billing/integrations/webmoney/notification.rb +12 -0
- data/lib/active_merchant/billing/response.rb +19 -4
- data/lib/active_merchant/version.rb +1 -1
- metadata +45 -27
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
�L
|
2
|
-
|
3
|
-
|
1
|
+
�(L��+��~>�}�(,V> P�p �fH;���E?R�]$�7�
|
2
|
+
�,*jl] ^F��p<�9�Z}/��z}k���vfN�1�M_1d�F��"�����j2r:65�K
|
3
|
+
h��iPƯh�@Q=�t�^ZV(Ƹ��Y�`���`��b��y���jj���;����I�f����$�d��^q��2�/f�\�*1�Nr�4l��,�߱���N��e�u�p�^�,P��!c�>�q����f��A|���=
|
data/CHANGELOG
CHANGED
@@ -1,5 +1,41 @@
|
|
1
1
|
= ActiveMerchant CHANGELOG
|
2
2
|
|
3
|
+
== Version 1.29.0 (November 30, 2012)
|
4
|
+
|
5
|
+
* Authorize.Net gateway: Support description and order_id for capture [ntalbott]
|
6
|
+
* Add Mercury gateway [adr1anx, opendining]
|
7
|
+
* Webmoney integration: Add gross, item_id, and amount accessors to notification [fr33z3]
|
8
|
+
* Fix running tests under ActiveSupport 2.3.14 [ntalbott]
|
9
|
+
* SagePay Form integration: Remove dependency on ActiveSupport's String#truncate [ntalbott]
|
10
|
+
* Elavon gateway: Add support for the sales tax parameter [stevestmartin]
|
11
|
+
* Add WebPay gateway [keikubo]
|
12
|
+
* iTransact gateway: make void API consistent [frobcode]
|
13
|
+
* Stripe gateway: Pass city in add_address [npverni]
|
14
|
+
* Paypal gateway: Add option to change the outstanding balance of a recurring billing profile [mattwhite]
|
15
|
+
* Mercury gateway: Fix authorizations API [ntalbott]
|
16
|
+
* Mercury gateway: Support refund properly [ntalbott]
|
17
|
+
* Braintree Blue gateway: Add support for the recurring flag [ntalbott]
|
18
|
+
* Add HDFC gateway [ntalbott]
|
19
|
+
* HDFC gateway: Add more supported currencies [ntalbott]
|
20
|
+
* HDFC gateway: Add support for passing ECI value [ntalbott]
|
21
|
+
* HDFC gateway: Allow setting test mode via options [ntalbott]
|
22
|
+
* HDFC gateway: Pass phone number in UDF3 [ntalbott]
|
23
|
+
* HDFC gateway: Fix unescaped '&' entity in XML [ntalbott]
|
24
|
+
* HDFC gateway: More robust entity fixing [ntalbott]
|
25
|
+
* Add A1Agregator integration [england]
|
26
|
+
* Refactored handling of #test? and @options [ntalbott]
|
27
|
+
* Realex gateway: Realex gateway: Fix billing address format [ntalbott]
|
28
|
+
* Orbital gateway: handle custom AVS response codes [jonm-okc]
|
29
|
+
* Orbital gateway: Fix infinite connection retry [jonm-okc, ntalbott]
|
30
|
+
* PayPal integration: Add support for MassPay IPN notifications [damonmorgan]
|
31
|
+
* Orbital gateway: Fix status of void result [jonm-okc]
|
32
|
+
* Add Redsys gateway [samlown]
|
33
|
+
* Cybersource gateway: Add support for subscription credit [fabiokr]
|
34
|
+
* Use Thor for generators [ntalbott]
|
35
|
+
* Psigate gateway: Add void support [samuelreh]
|
36
|
+
* Add Liqpay integration [beorc]
|
37
|
+
* Paypal Express gateway: Add shipping accessor to response [v-fedorov]
|
38
|
+
|
3
39
|
== Version 1.28.0 (August 10, 2012)
|
4
40
|
|
5
41
|
* PayPal Express: support non standard locale codes [Soleone]
|
data/CONTRIBUTORS
CHANGED
data/README.md
CHANGED
@@ -105,6 +105,7 @@ The [ActiveMerchant Wiki](http://github.com/Shopify/active_merchant/wikis) conta
|
|
105
105
|
* [Federated Canada](http://www.federatedcanada.com/) - CA
|
106
106
|
* [FirstPay](http://www.first-pay.com) - US
|
107
107
|
* [Garanti Sanal POS](https://ccpos.garanti.com.tr/ccRaporlar/garanti/ccReports) - US, TR
|
108
|
+
* [HDFC](http://www.hdfcbank.com/sme/sme-details/merchant-services/guzh6m0i) - IN
|
108
109
|
* [Inspire](http://www.inspiregateway.com) - US
|
109
110
|
* [InstaPay](http://www.instapayllc.com) - US
|
110
111
|
* [Iridium](http://www.iridiumcorp.co.uk/) - UK, ES
|
@@ -114,6 +115,7 @@ The [ActiveMerchant Wiki](http://github.com/Shopify/active_merchant/wikis) conta
|
|
114
115
|
* [Litle](http://www.litle.com/) - US
|
115
116
|
* [Merchant e-Solutions](http://merchante-solutions.com/) - US
|
116
117
|
* [MerchantWare](http://merchantwarehouse.com/merchantware) - US
|
118
|
+
* [Mercury](http://www.mercurypay.com) - US
|
117
119
|
* [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
|
118
120
|
* [Modern Payments](http://www.modpay.com) - US
|
119
121
|
* [Moneris](http://www.moneris.com/) - CA
|
@@ -147,6 +149,7 @@ The [ActiveMerchant Wiki](http://github.com/Shopify/active_merchant/wikis) conta
|
|
147
149
|
* [Quickpay](http://quickpay.dk/) - DK, SE
|
148
150
|
* [Rabobank Nederland](http://www.rabobank.nl/) - NL
|
149
151
|
* [Realex](http://www.realexpayments.com/) - IE, UK
|
152
|
+
* [Redsys](http://www.redsys.es) - ES
|
150
153
|
* [SagePay](http://www.sagepay.com) - UK
|
151
154
|
* [Sage Payment Solutions](http://www.sagepayments.com) - US, CA
|
152
155
|
* [Sallie Mae](http://www.salliemae.com) - US
|
@@ -162,12 +165,14 @@ The [ActiveMerchant Wiki](http://github.com/Shopify/active_merchant/wikis) conta
|
|
162
165
|
* [Verifi](http://www.verifi.com/) - US
|
163
166
|
* [ViaKLIX](http://viaklix.com) - US
|
164
167
|
* [Vindica](http://www.vindicia.com/) - US, CA, UK, AU, MX, BR, DE, KR, CN, HK
|
168
|
+
* [WebPay](https://webpay.jp/) - JP
|
165
169
|
* [Wirecard](http://www.wirecard.com) - DE
|
166
170
|
* [WorldPay](http://www.worldpay.com) - AU, HK, UK, US
|
167
171
|
|
168
172
|
## Supported Offsite Payment Gateways
|
169
173
|
|
170
174
|
* [2 Checkout](http://www.2checkout.com)
|
175
|
+
* [A1Agregator](http://a1agregator.ru/) - RU
|
171
176
|
* [Authorize.Net SIM](http://developer.authorize.net/api/sim/) - US
|
172
177
|
* [Banca Sella GestPay](https://www.sella.it/banca/ecommerce/gestpay/gestpay.jsp)
|
173
178
|
* [Chronopay](http://www.chronopay.com)
|
@@ -125,11 +125,12 @@ module ActiveMerchant #:nodoc:
|
|
125
125
|
# See the documentation for the gateway you will be using to make sure there are no other
|
126
126
|
# required options.
|
127
127
|
def initialize(options = {})
|
128
|
+
@options = options
|
128
129
|
end
|
129
130
|
|
130
131
|
# Are we running in test mode?
|
131
132
|
def test?
|
132
|
-
Base.
|
133
|
+
(@options[:test] || Base.test?)
|
133
134
|
end
|
134
135
|
|
135
136
|
private # :nodoc: all
|
@@ -1,18 +1,17 @@
|
|
1
1
|
module ActiveMerchant
|
2
2
|
module Billing
|
3
3
|
autoload :Gateway, 'active_merchant/billing/gateway'
|
4
|
-
|
5
|
-
Dir[File.dirname(__FILE__) + '/gateways/**/*.rb'].each do |f|
|
6
|
-
|
7
|
-
# Get camelized class name
|
4
|
+
|
5
|
+
Dir[File.dirname(__FILE__) + '/gateways/**/*.rb'].each do |f|
|
6
|
+
# Get camelized class name
|
8
7
|
filename = File.basename(f, '.rb')
|
9
8
|
# Add _gateway suffix
|
10
9
|
gateway_name = filename + '_gateway'
|
11
10
|
# Camelize the string to get the class name
|
12
|
-
gateway_class = gateway_name.camelize
|
13
|
-
|
11
|
+
gateway_class = gateway_name.camelize
|
12
|
+
|
14
13
|
# Register for autoloading
|
15
|
-
autoload gateway_class, f
|
14
|
+
autoload gateway_class, f
|
16
15
|
end
|
17
16
|
end
|
18
17
|
end
|
@@ -72,7 +72,6 @@ module ActiveMerchant #:nodoc:
|
|
72
72
|
# Otherwise, perform transactions against the production server.
|
73
73
|
def initialize(options = {})
|
74
74
|
requires!(options, :login, :password)
|
75
|
-
@options = options
|
76
75
|
super
|
77
76
|
end
|
78
77
|
|
@@ -122,6 +121,7 @@ module ActiveMerchant #:nodoc:
|
|
122
121
|
def capture(money, authorization, options = {})
|
123
122
|
post = {:trans_id => authorization}
|
124
123
|
add_customer_data(post, options)
|
124
|
+
add_invoice(post, options)
|
125
125
|
commit('PRIOR_AUTH_CAPTURE', money, post)
|
126
126
|
end
|
127
127
|
|
@@ -268,7 +268,8 @@ module ActiveMerchant #:nodoc:
|
|
268
268
|
url = test? ? self.test_url : self.live_url
|
269
269
|
data = ssl_post url, post_data(action, parameters)
|
270
270
|
|
271
|
-
response
|
271
|
+
response = parse(data)
|
272
|
+
response[:action] = action
|
272
273
|
|
273
274
|
message = message_from(response)
|
274
275
|
|
@@ -2,23 +2,23 @@
|
|
2
2
|
module ActiveMerchant #:nodoc:
|
3
3
|
module Billing #:nodoc:
|
4
4
|
# ==== Customer Information Manager (CIM)
|
5
|
-
#
|
5
|
+
#
|
6
6
|
# The Authorize.Net Customer Information Manager (CIM) is an optional additional service that allows you to store sensitive payment information on
|
7
|
-
# Authorize.Net's servers, simplifying payments for returning customers and recurring transactions. It can also help with Payment Card Industry (PCI)
|
7
|
+
# Authorize.Net's servers, simplifying payments for returning customers and recurring transactions. It can also help with Payment Card Industry (PCI)
|
8
8
|
# Data Security Standard compliance, since customer data is no longer stored locally.
|
9
|
-
#
|
9
|
+
#
|
10
10
|
# To use the AuthorizeNetCimGateway CIM must be enabled for your account.
|
11
|
-
#
|
11
|
+
#
|
12
12
|
# Information about CIM is available on the {Authorize.Net website}[http://www.authorize.net/solutions/merchantsolutions/merchantservices/cim/].
|
13
13
|
# Information about the CIM API is available at the {Authorize.Net Integration Center}[http://developer.authorize.net/]
|
14
|
-
#
|
14
|
+
#
|
15
15
|
# ==== Login and Password
|
16
|
-
#
|
17
|
-
# The login and password are not the username and password you use to
|
18
|
-
# login to the Authorize.Net Merchant Interface. Instead, you will
|
19
|
-
# use the API Login ID as the login and Transaction Key as the
|
16
|
+
#
|
17
|
+
# The login and password are not the username and password you use to
|
18
|
+
# login to the Authorize.Net Merchant Interface. Instead, you will
|
19
|
+
# use the API Login ID as the login and Transaction Key as the
|
20
20
|
# password.
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# ==== How to Get Your API Login ID and Transaction Key
|
23
23
|
#
|
24
24
|
# 1. Log into the Merchant Interface
|
@@ -29,7 +29,7 @@ module ActiveMerchant #:nodoc:
|
|
29
29
|
class AuthorizeNetCimGateway < Gateway
|
30
30
|
self.test_url = 'https://apitest.authorize.net/xml/v1/request.api'
|
31
31
|
self.live_url = 'https://api.authorize.net/xml/v1/request.api'
|
32
|
-
|
32
|
+
|
33
33
|
AUTHORIZE_NET_CIM_NAMESPACE = 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'
|
34
34
|
|
35
35
|
CIM_ACTIONS = {
|
@@ -49,7 +49,7 @@ module ActiveMerchant #:nodoc:
|
|
49
49
|
:create_customer_profile_transaction => 'createCustomerProfileTransaction',
|
50
50
|
:validate_customer_payment_profile => 'validateCustomerPaymentProfile'
|
51
51
|
}
|
52
|
-
|
52
|
+
|
53
53
|
CIM_TRANSACTION_TYPES = {
|
54
54
|
:auth_capture => 'profileTransAuthCapture',
|
55
55
|
:auth_only => 'profileTransAuthOnly',
|
@@ -65,24 +65,24 @@ module ActiveMerchant #:nodoc:
|
|
65
65
|
:live => 'liveMode',
|
66
66
|
:old => 'oldLiveMode'
|
67
67
|
}
|
68
|
-
|
68
|
+
|
69
69
|
BANK_ACCOUNT_TYPES = {
|
70
70
|
:checking => 'checking',
|
71
71
|
:savings => 'savings',
|
72
72
|
:business_checking => 'businessChecking'
|
73
73
|
}
|
74
|
-
|
74
|
+
|
75
75
|
ECHECK_TYPES = {
|
76
76
|
:ccd => 'CCD',
|
77
77
|
:ppd => 'PPD',
|
78
78
|
:web => 'WEB'
|
79
79
|
}
|
80
|
-
|
80
|
+
|
81
81
|
self.homepage_url = 'http://www.authorize.net/'
|
82
82
|
self.display_name = 'Authorize.Net CIM'
|
83
83
|
self.supported_countries = ['US']
|
84
84
|
self.supported_cardtypes = [:visa, :master, :american_express, :discover]
|
85
|
-
|
85
|
+
|
86
86
|
# Creates a new AuthorizeNetCimGateway
|
87
87
|
#
|
88
88
|
# The gateway requires that a valid API Login ID and Transaction Key be passed
|
@@ -92,26 +92,25 @@ module ActiveMerchant #:nodoc:
|
|
92
92
|
#
|
93
93
|
# * <tt>:login</tt> -- The Authorize.Net API Login ID (REQUIRED)
|
94
94
|
# * <tt>:password</tt> -- The Authorize.Net Transaction Key. (REQUIRED)
|
95
|
-
# * <tt>:test</tt> -- +true+ or +false+. If true, perform transactions against the test server.
|
95
|
+
# * <tt>:test</tt> -- +true+ or +false+. If true, perform transactions against the test server.
|
96
96
|
# * <tt>:delimiter</tt> -- The delimiter used in the direct response. Default is ',' (comma).
|
97
97
|
# Otherwise, perform transactions against the production server.
|
98
98
|
def initialize(options = {})
|
99
99
|
requires!(options, :login, :password)
|
100
|
-
@options = options
|
101
100
|
super
|
102
101
|
end
|
103
102
|
|
104
103
|
# Creates a new customer profile along with any customer payment profiles and customer shipping addresses
|
105
104
|
# for the customer profile.
|
106
|
-
#
|
107
|
-
# Returns a Response with the Customer Profile ID of the new customer profile in the authorization field.
|
108
|
-
# It is *CRITICAL* that you save this ID. There is no way to retrieve this through the API. You will not
|
105
|
+
#
|
106
|
+
# Returns a Response with the Customer Profile ID of the new customer profile in the authorization field.
|
107
|
+
# It is *CRITICAL* that you save this ID. There is no way to retrieve this through the API. You will not
|
109
108
|
# be able to create another Customer Profile with the same information.
|
110
109
|
#
|
111
|
-
#
|
110
|
+
#
|
112
111
|
#
|
113
112
|
# ==== Options
|
114
|
-
#
|
113
|
+
#
|
115
114
|
# * <tt>:profile</tt> -- A hash containing at least one of the CONDITIONAL profile options below (REQUIRED)
|
116
115
|
#
|
117
116
|
# ==== Profile
|
@@ -129,7 +128,7 @@ module ActiveMerchant #:nodoc:
|
|
129
128
|
requires!(options[:profile], :email) unless options[:profile][:merchant_customer_id] || options[:profile][:description]
|
130
129
|
requires!(options[:profile], :description) unless options[:profile][:email] || options[:profile][:merchant_customer_id]
|
131
130
|
requires!(options[:profile], :merchant_customer_id) unless options[:profile][:description] || options[:profile][:email]
|
132
|
-
|
131
|
+
|
133
132
|
request = build_request(:create_customer_profile, options)
|
134
133
|
commit(:create_customer_profile, request)
|
135
134
|
end
|
@@ -148,7 +147,7 @@ module ActiveMerchant #:nodoc:
|
|
148
147
|
requires!(options, :customer_profile_id)
|
149
148
|
requires!(options, :payment_profile)
|
150
149
|
requires!(options[:payment_profile], :payment)
|
151
|
-
|
150
|
+
|
152
151
|
request = build_request(:create_customer_payment_profile, options)
|
153
152
|
commit(:create_customer_payment_profile, request)
|
154
153
|
end
|
@@ -162,7 +161,7 @@ module ActiveMerchant #:nodoc:
|
|
162
161
|
def create_customer_shipping_address(options)
|
163
162
|
requires!(options, :customer_profile_id)
|
164
163
|
requires!(options, :address)
|
165
|
-
|
164
|
+
|
166
165
|
request = build_request(:create_customer_shipping_address, options)
|
167
166
|
commit(:create_customer_shipping_address, request)
|
168
167
|
end
|
@@ -228,9 +227,9 @@ module ActiveMerchant #:nodoc:
|
|
228
227
|
|
229
228
|
# Retrieve a customer payment profile for an existing customer profile.
|
230
229
|
#
|
231
|
-
# Returns a Response whose params hash contains all the payment profile information. Sensitive information such as credit card
|
230
|
+
# Returns a Response whose params hash contains all the payment profile information. Sensitive information such as credit card
|
232
231
|
# numbers will be masked.
|
233
|
-
#
|
232
|
+
#
|
234
233
|
# ==== Options
|
235
234
|
#
|
236
235
|
# * <tt>:customer_profile_id</tt> -- The Customer Profile ID of the customer with the payment profile to be retrieved. (REQUIRED)
|
@@ -245,8 +244,8 @@ module ActiveMerchant #:nodoc:
|
|
245
244
|
|
246
245
|
# Retrieve a customer shipping address for an existing customer profile.
|
247
246
|
#
|
248
|
-
# Returns a Response whose params hash contains all the shipping address information.
|
249
|
-
#
|
247
|
+
# Returns a Response whose params hash contains all the shipping address information.
|
248
|
+
#
|
250
249
|
# ==== Options
|
251
250
|
#
|
252
251
|
# * <tt>:customer_profile_id</tt> -- The Customer Profile ID of the customer with the payment profile to be retrieved. (REQUIRED)
|
@@ -259,16 +258,16 @@ module ActiveMerchant #:nodoc:
|
|
259
258
|
commit(:get_customer_shipping_address, request)
|
260
259
|
end
|
261
260
|
|
262
|
-
# Updates an existing customer profile.
|
263
|
-
#
|
264
|
-
# Warning: if you do not provide a parameter in the <tt>:payment_profile</tt> hash, it is automatically set to nil at
|
265
|
-
# Authorize.Net. You will most likely want to first get the profile hash using get_customer_profile and then only change the
|
261
|
+
# Updates an existing customer profile.
|
262
|
+
#
|
263
|
+
# Warning: if you do not provide a parameter in the <tt>:payment_profile</tt> hash, it is automatically set to nil at
|
264
|
+
# Authorize.Net. You will most likely want to first get the profile hash using get_customer_profile and then only change the
|
266
265
|
# elements you wish to change.
|
267
266
|
#
|
268
267
|
# ==== Options
|
269
268
|
#
|
270
269
|
# * <tt>:profile</tt> -- A hash containing the values the Customer Profile should be updated to. (REQUIRED)
|
271
|
-
#
|
270
|
+
#
|
272
271
|
# ==== Profile
|
273
272
|
#
|
274
273
|
# * <tt>:customer_profile_id</tt> -- The Customer Profile ID of the customer profile to update. (REQUIRED)
|
@@ -281,8 +280,8 @@ module ActiveMerchant #:nodoc:
|
|
281
280
|
end
|
282
281
|
|
283
282
|
# Updates a customer payment profile for an existing customer profile.
|
284
|
-
#
|
285
|
-
# Warning: if you do not provide a parameter in the <tt>:payment_profile</tt> hash, it is automatically set to nil at
|
283
|
+
#
|
284
|
+
# Warning: if you do not provide a parameter in the <tt>:payment_profile</tt> hash, it is automatically set to nil at
|
286
285
|
# Authorize.Net. You will most likely want to first get the profile hash using get_customer_payment_profile and then only
|
287
286
|
# change the elements you wish to change.
|
288
287
|
#
|
@@ -290,7 +289,7 @@ module ActiveMerchant #:nodoc:
|
|
290
289
|
#
|
291
290
|
# * <tt>:customer_profile_id</tt> -- The Customer Profile ID of the customer with the payment profile to be updated. (REQUIRED)
|
292
291
|
# * <tt>:payment_profile</tt> -- A hash containing the values the Customer Payment Profile should be updated to. (REQUIRED)
|
293
|
-
#
|
292
|
+
#
|
294
293
|
# ==== Payment Profile
|
295
294
|
#
|
296
295
|
# * <tt>:customer_payment_profile_id</tt> -- The Customer Payment Profile ID of the Customer Payment Profile to update. (REQUIRED)
|
@@ -303,8 +302,8 @@ module ActiveMerchant #:nodoc:
|
|
303
302
|
end
|
304
303
|
|
305
304
|
# Updates a customer shipping address for an existing customer profile.
|
306
|
-
#
|
307
|
-
# Warning: if you do not provide a parameter in the <tt>:address</tt> hash, it is automatically set to nil at
|
305
|
+
#
|
306
|
+
# Warning: if you do not provide a parameter in the <tt>:address</tt> hash, it is automatically set to nil at
|
308
307
|
# Authorize.Net. You will most likely want to first get the profile hash using get_customer_shipping_address and then only
|
309
308
|
# change the elements you wish to change.
|
310
309
|
#
|
@@ -312,7 +311,7 @@ module ActiveMerchant #:nodoc:
|
|
312
311
|
#
|
313
312
|
# * <tt>:customer_profile_id</tt> -- The Customer Profile ID of the customer with the payment profile to be updated. (REQUIRED)
|
314
313
|
# * <tt>:address</tt> -- A hash containing the values the Customer Shipping Address should be updated to. (REQUIRED)
|
315
|
-
#
|
314
|
+
#
|
316
315
|
# ==== Address
|
317
316
|
#
|
318
317
|
# * <tt>:customer_address_id</tt> -- The Customer Address ID of the Customer Payment Profile to update. (REQUIRED)
|
@@ -327,7 +326,7 @@ module ActiveMerchant #:nodoc:
|
|
327
326
|
# Creates a new payment transaction from an existing customer profile
|
328
327
|
#
|
329
328
|
# This is what is used to charge a customer whose information you have stored in a Customer Profile.
|
330
|
-
#
|
329
|
+
#
|
331
330
|
# Returns a Response object that contains the result of the transaction in <tt>params['direct_response']</tt>
|
332
331
|
#
|
333
332
|
# ==== Options
|
@@ -471,7 +470,7 @@ module ActiveMerchant #:nodoc:
|
|
471
470
|
def expdate(credit_card)
|
472
471
|
sprintf('%04d-%02d', credit_card.year, credit_card.month)
|
473
472
|
end
|
474
|
-
|
473
|
+
|
475
474
|
def build_request(action, options = {})
|
476
475
|
unless CIM_ACTIONS.include?(action)
|
477
476
|
raise StandardError, "Invalid Customer Information Manager Action: #{action}"
|
@@ -496,7 +495,7 @@ module ActiveMerchant #:nodoc:
|
|
496
495
|
xml.tag!('transactionKey', @options[:password])
|
497
496
|
end
|
498
497
|
end
|
499
|
-
|
498
|
+
|
500
499
|
def build_create_customer_profile_request(xml, options)
|
501
500
|
add_profile(xml, options[:profile])
|
502
501
|
|
@@ -507,29 +506,29 @@ module ActiveMerchant #:nodoc:
|
|
507
506
|
add_payment_profile(xml, options[:payment_profile])
|
508
507
|
end
|
509
508
|
end
|
510
|
-
|
509
|
+
|
511
510
|
xml.target!
|
512
511
|
end
|
513
512
|
|
514
513
|
def build_create_customer_payment_profile_request(xml, options)
|
515
514
|
xml.tag!('customerProfileId', options[:customer_profile_id])
|
516
|
-
|
515
|
+
|
517
516
|
xml.tag!('paymentProfile') do
|
518
517
|
add_payment_profile(xml, options[:payment_profile])
|
519
518
|
end
|
520
|
-
|
519
|
+
|
521
520
|
xml.tag!('validationMode', CIM_VALIDATION_MODES[options[:validation_mode]]) if options[:validation_mode]
|
522
521
|
|
523
522
|
xml.target!
|
524
523
|
end
|
525
|
-
|
524
|
+
|
526
525
|
def build_create_customer_shipping_address_request(xml, options)
|
527
526
|
xml.tag!('customerProfileId', options[:customer_profile_id])
|
528
|
-
|
527
|
+
|
529
528
|
xml.tag!('address') do
|
530
529
|
add_address(xml, options[:address])
|
531
530
|
end
|
532
|
-
|
531
|
+
|
533
532
|
xml.target!
|
534
533
|
end
|
535
534
|
|
@@ -572,8 +571,8 @@ module ActiveMerchant #:nodoc:
|
|
572
571
|
end
|
573
572
|
|
574
573
|
def build_update_customer_profile_request(xml, options)
|
575
|
-
add_profile(xml, options[:profile], true)
|
576
|
-
|
574
|
+
add_profile(xml, options[:profile], true)
|
575
|
+
|
577
576
|
xml.target!
|
578
577
|
end
|
579
578
|
|
@@ -581,11 +580,11 @@ module ActiveMerchant #:nodoc:
|
|
581
580
|
xml.tag!('customerProfileId', options[:customer_profile_id])
|
582
581
|
|
583
582
|
xml.tag!('paymentProfile') do
|
584
|
-
add_payment_profile(xml, options[:payment_profile])
|
583
|
+
add_payment_profile(xml, options[:payment_profile])
|
585
584
|
end
|
586
585
|
|
587
586
|
xml.tag!('validationMode', CIM_VALIDATION_MODES[options[:validation_mode]]) if options[:validation_mode]
|
588
|
-
|
587
|
+
|
589
588
|
xml.target!
|
590
589
|
end
|
591
590
|
|
@@ -593,7 +592,7 @@ module ActiveMerchant #:nodoc:
|
|
593
592
|
xml.tag!('customerProfileId', options[:customer_profile_id])
|
594
593
|
|
595
594
|
xml.tag!('address') do
|
596
|
-
add_address(xml, options[:address])
|
595
|
+
add_address(xml, options[:address])
|
597
596
|
end
|
598
597
|
|
599
598
|
xml.target!
|
@@ -602,10 +601,10 @@ module ActiveMerchant #:nodoc:
|
|
602
601
|
def build_create_customer_profile_transaction_request(xml, options)
|
603
602
|
add_transaction(xml, options[:transaction])
|
604
603
|
xml.tag!('extraOptions', "x_test_request=TRUE") if @options[:test]
|
605
|
-
|
604
|
+
|
606
605
|
xml.target!
|
607
606
|
end
|
608
|
-
|
607
|
+
|
609
608
|
def build_validate_customer_payment_profile_request(xml, options)
|
610
609
|
xml.tag!('customerProfileId', options[:customer_profile_id])
|
611
610
|
xml.tag!('customerPaymentProfileId', options[:customer_payment_profile_id])
|
@@ -637,12 +636,12 @@ module ActiveMerchant #:nodoc:
|
|
637
636
|
end
|
638
637
|
end
|
639
638
|
end
|
640
|
-
|
639
|
+
|
641
640
|
def add_transaction(xml, transaction)
|
642
641
|
unless CIM_TRANSACTION_TYPES.include?(transaction[:type])
|
643
642
|
raise StandardError, "Invalid Customer Information Manager Transaction Type: #{transaction[:type]}"
|
644
643
|
end
|
645
|
-
|
644
|
+
|
646
645
|
xml.tag!('transaction') do
|
647
646
|
xml.tag!(CIM_TRANSACTION_TYPES[transaction[:type]]) do
|
648
647
|
# The amount to be billed to the customer
|
@@ -653,7 +652,7 @@ module ActiveMerchant #:nodoc:
|
|
653
652
|
tag_unless_blank(xml,'customerShippingAddressId', transaction[:customer_shipping_address_id])
|
654
653
|
xml.tag!('transId', transaction[:trans_id])
|
655
654
|
when :refund
|
656
|
-
#TODO - add lineItems and extraOptions fields
|
655
|
+
#TODO - add lineItems and extraOptions fields
|
657
656
|
xml.tag!('amount', transaction[:amount])
|
658
657
|
tag_unless_blank(xml, 'customerProfileId', transaction[:customer_profile_id])
|
659
658
|
tag_unless_blank(xml, 'customerPaymentProfileId', transaction[:customer_payment_profile_id])
|
@@ -697,7 +696,7 @@ module ActiveMerchant #:nodoc:
|
|
697
696
|
xml.tag!('description', duty[:description]) if duty[:description]
|
698
697
|
end
|
699
698
|
end
|
700
|
-
|
699
|
+
|
701
700
|
def add_shipping(xml, shipping)
|
702
701
|
xml.tag!('shipping') do
|
703
702
|
xml.tag!('amount', shipping[:amount]) if shipping[:amount]
|
@@ -713,7 +712,7 @@ module ActiveMerchant #:nodoc:
|
|
713
712
|
xml.tag!('purchaseOrderNumber', order[:purchase_order_number]) if order[:purchase_order_number]
|
714
713
|
end
|
715
714
|
end
|
716
|
-
|
715
|
+
|
717
716
|
def add_payment_profiles(xml, payment_profiles)
|
718
717
|
xml.tag!('paymentProfiles') do
|
719
718
|
add_payment_profile(xml, payment_profiles)
|
@@ -732,7 +731,7 @@ module ActiveMerchant #:nodoc:
|
|
732
731
|
add_address(xml, payment_profile[:bill_to])
|
733
732
|
end
|
734
733
|
end
|
735
|
-
|
734
|
+
|
736
735
|
if payment_profile[:payment]
|
737
736
|
xml.tag!('payment') do
|
738
737
|
add_credit_card(xml, payment_profile[:payment][:credit_card]) if payment_profile[:payment].has_key?(:credit_card)
|
@@ -743,7 +742,7 @@ module ActiveMerchant #:nodoc:
|
|
743
742
|
xml.tag!('taxId', payment_profile[:payment]) if payment_profile[:payment].has_key?(:tax_id)
|
744
743
|
end
|
745
744
|
end
|
746
|
-
|
745
|
+
|
747
746
|
xml.tag!('customerPaymentProfileId', payment_profile[:customer_payment_profile_id]) if payment_profile[:customer_payment_profile_id]
|
748
747
|
end
|
749
748
|
|
@@ -765,7 +764,7 @@ module ActiveMerchant #:nodoc:
|
|
765
764
|
xml.tag!('country', address[:country])
|
766
765
|
xml.tag!('phoneNumber', address[:phone_number]) if address[:phone_number]
|
767
766
|
xml.tag!('faxNumber', address[:fax_number]) if address[:fax_number]
|
768
|
-
|
767
|
+
|
769
768
|
xml.tag!('customerAddressId', address[:customer_address_id]) if address[:customer_address_id]
|
770
769
|
end
|
771
770
|
|
@@ -786,14 +785,14 @@ module ActiveMerchant #:nodoc:
|
|
786
785
|
xml.tag!('cardCode', credit_card.verification_value) if credit_card.verification_value?
|
787
786
|
end
|
788
787
|
end
|
789
|
-
|
788
|
+
|
790
789
|
# Adds customer’s bank account information
|
791
|
-
# Note: This element should only be included
|
790
|
+
# Note: This element should only be included
|
792
791
|
# when the payment method is bank account.
|
793
792
|
def add_bank_account(xml, bank_account)
|
794
793
|
raise StandardError, "Invalid Bank Account Type: #{bank_account[:account_type]}" unless BANK_ACCOUNT_TYPES.include?(bank_account[:account_type])
|
795
794
|
raise StandardError, "Invalid eCheck Type: #{bank_account[:echeck_type]}" unless ECHECK_TYPES.include?(bank_account[:echeck_type])
|
796
|
-
|
795
|
+
|
797
796
|
xml.tag!('bankAccount') do
|
798
797
|
# The type of bank account
|
799
798
|
xml.tag!('accountType', BANK_ACCOUNT_TYPES[bank_account[:account_type]])
|
@@ -801,19 +800,19 @@ module ActiveMerchant #:nodoc:
|
|
801
800
|
xml.tag!('routingNumber', bank_account[:routing_number])
|
802
801
|
# The bank account number
|
803
802
|
xml.tag!('accountNumber', bank_account[:account_number])
|
804
|
-
# The full name of the individual associated
|
803
|
+
# The full name of the individual associated
|
805
804
|
# with the bank account number
|
806
805
|
xml.tag!('nameOnAccount', bank_account[:name_on_account])
|
807
806
|
# The type of electronic check transaction
|
808
807
|
xml.tag!('echeckType', ECHECK_TYPES[bank_account[:echeck_type]])
|
809
|
-
# The full name of the individual associated
|
808
|
+
# The full name of the individual associated
|
810
809
|
# with the bank account number (optional)
|
811
810
|
xml.tag!('bankName', bank_account[:bank_name]) if bank_account[:bank_name]
|
812
811
|
end
|
813
812
|
end
|
814
|
-
|
813
|
+
|
815
814
|
# Adds customer’s driver's license information
|
816
|
-
# Note: This element is only required for
|
815
|
+
# Note: This element is only required for
|
817
816
|
# Wells Fargo SecureSource eCheck.Net merchants
|
818
817
|
def add_drivers_license(xml, drivers_license)
|
819
818
|
xml.tag!('driversLicense') do
|
@@ -827,11 +826,11 @@ module ActiveMerchant #:nodoc:
|
|
827
826
|
xml.tag!('dateOfBirth', drivers_license[:date_of_birth])
|
828
827
|
end
|
829
828
|
end
|
830
|
-
|
829
|
+
|
831
830
|
def commit(action, request)
|
832
831
|
url = test? ? test_url : live_url
|
833
832
|
xml = ssl_post(url, request, "Content-Type" => "text/xml")
|
834
|
-
|
833
|
+
|
835
834
|
response_params = parse(action, xml)
|
836
835
|
|
837
836
|
message = response_params['messages']['message']['text']
|
@@ -845,7 +844,7 @@ module ActiveMerchant #:nodoc:
|
|
845
844
|
:authorization => transaction_id || response_params['customer_profile_id'] || (response_params['profile'] ? response_params['profile']['customer_profile_id'] : nil)
|
846
845
|
)
|
847
846
|
end
|
848
|
-
|
847
|
+
|
849
848
|
def tag_unless_blank(xml, tag_name, data)
|
850
849
|
xml.tag!(tag_name, data) unless data.blank? || data.nil?
|
851
850
|
end
|
@@ -906,7 +905,7 @@ module ActiveMerchant #:nodoc:
|
|
906
905
|
}
|
907
906
|
)
|
908
907
|
end
|
909
|
-
|
908
|
+
|
910
909
|
def parse(action, xml)
|
911
910
|
xml = REXML::Document.new(xml)
|
912
911
|
root = REXML::XPath.first(xml, "//#{CIM_ACTIONS[action]}Response") ||
|
@@ -931,8 +930,8 @@ module ActiveMerchant #:nodoc:
|
|
931
930
|
response[key] = [response[key], value]
|
932
931
|
end
|
933
932
|
else
|
934
|
-
response[key] = parse_element(e)
|
935
|
-
end
|
933
|
+
response[key] = parse_element(e)
|
934
|
+
end
|
936
935
|
}
|
937
936
|
else
|
938
937
|
response = node.text
|