activemerchant 1.86.0 → 1.87.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.
- checksums.yaml +5 -5
- data/CHANGELOG +22 -0
- data/lib/active_merchant/billing/avs_result.rb +0 -1
- data/lib/active_merchant/billing/check.rb +1 -1
- data/lib/active_merchant/billing/compatibility.rb +3 -3
- data/lib/active_merchant/billing/credit_card.rb +1 -1
- data/lib/active_merchant/billing/credit_card_formatting.rb +3 -3
- data/lib/active_merchant/billing/credit_card_methods.rb +6 -4
- data/lib/active_merchant/billing/gateway.rb +9 -9
- data/lib/active_merchant/billing/gateways/adyen.rb +48 -7
- data/lib/active_merchant/billing/gateways/allied_wallet.rb +1 -1
- data/lib/active_merchant/billing/gateways/authorize_net.rb +8 -8
- data/lib/active_merchant/billing/gateways/authorize_net_arb.rb +1 -1
- data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +15 -15
- data/lib/active_merchant/billing/gateways/axcessms.rb +2 -2
- data/lib/active_merchant/billing/gateways/balanced.rb +11 -11
- data/lib/active_merchant/billing/gateways/bank_frick.rb +1 -1
- data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +5 -5
- data/lib/active_merchant/billing/gateways/beanstream.rb +3 -2
- data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +5 -5
- data/lib/active_merchant/billing/gateways/blue_pay.rb +5 -5
- data/lib/active_merchant/billing/gateways/blue_snap.rb +5 -5
- data/lib/active_merchant/billing/gateways/bogus.rb +3 -3
- data/lib/active_merchant/billing/gateways/borgun.rb +5 -6
- data/lib/active_merchant/billing/gateways/braintree_blue.rb +18 -12
- data/lib/active_merchant/billing/gateways/bridge_pay.rb +1 -1
- data/lib/active_merchant/billing/gateways/cams.rb +12 -12
- data/lib/active_merchant/billing/gateways/card_stream.rb +9 -9
- data/lib/active_merchant/billing/gateways/cardknox.rb +4 -4
- data/lib/active_merchant/billing/gateways/cardprocess.rb +1 -1
- data/lib/active_merchant/billing/gateways/cashnet.rb +2 -2
- data/lib/active_merchant/billing/gateways/cc5.rb +2 -2
- data/lib/active_merchant/billing/gateways/cenpos.rb +2 -2
- data/lib/active_merchant/billing/gateways/checkout.rb +1 -1
- data/lib/active_merchant/billing/gateways/clearhaus.rb +12 -12
- data/lib/active_merchant/billing/gateways/commercegate.rb +3 -3
- data/lib/active_merchant/billing/gateways/creditcall.rb +2 -2
- data/lib/active_merchant/billing/gateways/credorax.rb +13 -3
- data/lib/active_merchant/billing/gateways/ct_payment.rb +6 -6
- data/lib/active_merchant/billing/gateways/culqi.rb +1 -1
- data/lib/active_merchant/billing/gateways/cyber_source.rb +8 -8
- data/lib/active_merchant/billing/gateways/data_cash.rb +2 -2
- data/lib/active_merchant/billing/gateways/dibs.rb +2 -2
- data/lib/active_merchant/billing/gateways/digitzs.rb +5 -5
- data/lib/active_merchant/billing/gateways/ebanx.rb +1 -1
- data/lib/active_merchant/billing/gateways/efsnet.rb +4 -4
- data/lib/active_merchant/billing/gateways/elavon.rb +3 -3
- data/lib/active_merchant/billing/gateways/element.rb +4 -4
- data/lib/active_merchant/billing/gateways/epay.rb +1 -1
- data/lib/active_merchant/billing/gateways/eway.rb +2 -2
- data/lib/active_merchant/billing/gateways/eway_managed.rb +5 -5
- data/lib/active_merchant/billing/gateways/eway_rapid.rb +1 -1
- data/lib/active_merchant/billing/gateways/exact.rb +1 -1
- data/lib/active_merchant/billing/gateways/federated_canada.rb +1 -1
- data/lib/active_merchant/billing/gateways/first_giving.rb +1 -1
- data/lib/active_merchant/billing/gateways/firstdata_e4.rb +7 -7
- data/lib/active_merchant/billing/gateways/flo2cash.rb +2 -2
- data/lib/active_merchant/billing/gateways/forte.rb +11 -7
- data/lib/active_merchant/billing/gateways/garanti.rb +5 -5
- data/lib/active_merchant/billing/gateways/global_collect.rb +2 -3
- data/lib/active_merchant/billing/gateways/hdfc.rb +2 -2
- data/lib/active_merchant/billing/gateways/hps.rb +3 -3
- data/lib/active_merchant/billing/gateways/inspire.rb +7 -7
- data/lib/active_merchant/billing/gateways/iridium.rb +14 -14
- data/lib/active_merchant/billing/gateways/itransact.rb +4 -4
- data/lib/active_merchant/billing/gateways/iveri.rb +3 -3
- data/lib/active_merchant/billing/gateways/jetpay.rb +2 -2
- data/lib/active_merchant/billing/gateways/jetpay_v2.rb +2 -2
- data/lib/active_merchant/billing/gateways/latitude19.rb +1 -1
- data/lib/active_merchant/billing/gateways/linkpoint.rb +3 -3
- data/lib/active_merchant/billing/gateways/litle.rb +2 -2
- data/lib/active_merchant/billing/gateways/maxipago.rb +1 -1
- data/lib/active_merchant/billing/gateways/mercado_pago.rb +7 -13
- data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +3 -3
- data/lib/active_merchant/billing/gateways/merchant_one.rb +4 -4
- data/lib/active_merchant/billing/gateways/merchant_partners.rb +1 -1
- data/lib/active_merchant/billing/gateways/merchant_warrior.rb +3 -3
- data/lib/active_merchant/billing/gateways/mercury.rb +2 -2
- data/lib/active_merchant/billing/gateways/metrics_global.rb +2 -2
- data/lib/active_merchant/billing/gateways/micropayment.rb +1 -1
- data/lib/active_merchant/billing/gateways/migs.rb +4 -6
- data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +2 -2
- data/lib/active_merchant/billing/gateways/moneris.rb +85 -56
- data/lib/active_merchant/billing/gateways/moneris_us.rb +9 -9
- data/lib/active_merchant/billing/gateways/money_movers.rb +1 -1
- data/lib/active_merchant/billing/gateways/mundipagg.rb +1 -1
- data/lib/active_merchant/billing/gateways/nab_transact.rb +1 -1
- data/lib/active_merchant/billing/gateways/net_registry.rb +2 -2
- data/lib/active_merchant/billing/gateways/netaxept.rb +6 -6
- data/lib/active_merchant/billing/gateways/netbanx.rb +36 -36
- data/lib/active_merchant/billing/gateways/netbilling.rb +2 -2
- data/lib/active_merchant/billing/gateways/netpay.rb +1 -1
- data/lib/active_merchant/billing/gateways/nmi.rb +2 -2
- data/lib/active_merchant/billing/gateways/ogone.rb +7 -7
- data/lib/active_merchant/billing/gateways/omise.rb +6 -6
- data/lib/active_merchant/billing/gateways/opp.rb +1 -1
- data/lib/active_merchant/billing/gateways/optimal_payment.rb +5 -0
- data/lib/active_merchant/billing/gateways/orbital.rb +9 -7
- data/lib/active_merchant/billing/gateways/pac_net_raven.rb +6 -6
- data/lib/active_merchant/billing/gateways/pagarme.rb +1 -1
- data/lib/active_merchant/billing/gateways/pay_conex.rb +1 -1
- data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +8 -5
- data/lib/active_merchant/billing/gateways/pay_hub.rb +2 -2
- data/lib/active_merchant/billing/gateways/pay_junction.rb +2 -2
- data/lib/active_merchant/billing/gateways/pay_junction_v2.rb +2 -2
- data/lib/active_merchant/billing/gateways/pay_secure.rb +3 -3
- data/lib/active_merchant/billing/gateways/paybox_direct.rb +8 -8
- data/lib/active_merchant/billing/gateways/payeezy.rb +1 -1
- data/lib/active_merchant/billing/gateways/payex.rb +8 -8
- data/lib/active_merchant/billing/gateways/payflow.rb +13 -13
- data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +4 -4
- data/lib/active_merchant/billing/gateways/payflow_express.rb +1 -1
- data/lib/active_merchant/billing/gateways/payment_express.rb +10 -10
- data/lib/active_merchant/billing/gateways/paymentez.rb +3 -0
- data/lib/active_merchant/billing/gateways/paymill.rb +4 -4
- data/lib/active_merchant/billing/gateways/payscout.rb +1 -1
- data/lib/active_merchant/billing/gateways/paystation.rb +1 -1
- data/lib/active_merchant/billing/gateways/payu_in.rb +3 -3
- data/lib/active_merchant/billing/gateways/payu_latam.rb +1 -1
- data/lib/active_merchant/billing/gateways/payway.rb +2 -2
- data/lib/active_merchant/billing/gateways/plugnpay.rb +2 -2
- data/lib/active_merchant/billing/gateways/pro_pay.rb +2 -2
- data/lib/active_merchant/billing/gateways/psigate.rb +1 -1
- data/lib/active_merchant/billing/gateways/psl_card.rb +3 -3
- data/lib/active_merchant/billing/gateways/qbms.rb +1 -1
- data/lib/active_merchant/billing/gateways/quantum.rb +7 -7
- data/lib/active_merchant/billing/gateways/quickbooks.rb +6 -6
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_v10.rb +1 -1
- data/lib/active_merchant/billing/gateways/qvalent.rb +2 -2
- data/lib/active_merchant/billing/gateways/realex.rb +33 -13
- data/lib/active_merchant/billing/gateways/redsys.rb +2 -2
- data/lib/active_merchant/billing/gateways/safe_charge.rb +2 -2
- data/lib/active_merchant/billing/gateways/sage.rb +6 -6
- data/lib/active_merchant/billing/gateways/sage_pay.rb +7 -7
- data/lib/active_merchant/billing/gateways/secure_net.rb +1 -1
- data/lib/active_merchant/billing/gateways/secure_pay.rb +2 -2
- data/lib/active_merchant/billing/gateways/secure_pay_au.rb +1 -1
- data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +1 -1
- data/lib/active_merchant/billing/gateways/skip_jack.rb +5 -6
- data/lib/active_merchant/billing/gateways/smart_ps.rb +7 -7
- data/lib/active_merchant/billing/gateways/so_easy_pay.rb +1 -1
- data/lib/active_merchant/billing/gateways/stripe.rb +5 -5
- data/lib/active_merchant/billing/gateways/swipe_checkout.rb +2 -2
- data/lib/active_merchant/billing/gateways/telr.rb +1 -1
- data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +2 -2
- data/lib/active_merchant/billing/gateways/transact_pro.rb +5 -5
- data/lib/active_merchant/billing/gateways/transax.rb +1 -1
- data/lib/active_merchant/billing/gateways/trust_commerce.rb +7 -7
- data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +17 -16
- data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +2 -2
- data/lib/active_merchant/billing/gateways/vanco.rb +2 -2
- data/lib/active_merchant/billing/gateways/verifi.rb +1 -1
- data/lib/active_merchant/billing/gateways/viaklix.rb +4 -4
- data/lib/active_merchant/billing/gateways/visanet_peru.rb +4 -4
- data/lib/active_merchant/billing/gateways/wirecard.rb +2 -2
- data/lib/active_merchant/billing/gateways/worldpay.rb +24 -13
- data/lib/active_merchant/billing/gateways/worldpay_online_payments.rb +2 -2
- data/lib/active_merchant/billing/response.rb +7 -7
- data/lib/active_merchant/country.rb +4 -4
- data/lib/active_merchant/network_connection_retries.rb +7 -9
- data/lib/active_merchant/version.rb +1 -1
- data/lib/support/gateway_support.rb +3 -3
- data/lib/support/ssl_verify.rb +1 -1
- metadata +3 -3
|
@@ -140,7 +140,7 @@ module ActiveMerchant #:nodoc:
|
|
|
140
140
|
end
|
|
141
141
|
|
|
142
142
|
def post_data(action, params)
|
|
143
|
-
params.map {|k, v| "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}"}.join('&')
|
|
143
|
+
params.map { |k, v| "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}" }.join('&')
|
|
144
144
|
end
|
|
145
145
|
|
|
146
146
|
def url(action)
|
|
@@ -17,7 +17,7 @@ module ActiveMerchant #:nodoc:
|
|
|
17
17
|
# MiGS is supported throughout Asia Pacific, Middle East and Africa
|
|
18
18
|
# MiGS is used in Australia (AU) by ANZ (eGate), CBA (CommWeb) and more
|
|
19
19
|
# Source of Country List: http://www.scribd.com/doc/17811923
|
|
20
|
-
self.supported_countries = %w(AU AE BD BN EG HK ID
|
|
20
|
+
self.supported_countries = %w(AU AE BD BN EG HK ID JO KW LB LK MU MV MY NZ OM PH QA SA SG TT VN)
|
|
21
21
|
|
|
22
22
|
# The card types supported by the payment gateway
|
|
23
23
|
self.supported_cardtypes = [:visa, :master, :american_express, :diners_club, :jcb]
|
|
@@ -169,10 +169,8 @@ module ActiveMerchant #:nodoc:
|
|
|
169
169
|
add_invoice(post, options)
|
|
170
170
|
add_creditcard_type(post, options[:card_type]) if options[:card_type]
|
|
171
171
|
|
|
172
|
-
post
|
|
173
|
-
|
|
174
|
-
:ReturnURL => options[:return_url]
|
|
175
|
-
)
|
|
172
|
+
post[:Locale] = options[:locale] || 'en'
|
|
173
|
+
post[:ReturnURL] = options[:return_url]
|
|
176
174
|
|
|
177
175
|
add_standard_parameters('pay', post, options[:unique_id])
|
|
178
176
|
|
|
@@ -251,7 +249,7 @@ module ActiveMerchant #:nodoc:
|
|
|
251
249
|
|
|
252
250
|
def add_creditcard_type(post, card_type)
|
|
253
251
|
post[:Gateway] = 'ssl'
|
|
254
|
-
post[:card] = CARD_TYPES.detect{|ct| ct.am_code == card_type}.migs_long_code
|
|
252
|
+
post[:card] = CARD_TYPES.detect { |ct| ct.am_code == card_type }.migs_long_code
|
|
255
253
|
end
|
|
256
254
|
|
|
257
255
|
def parse(body)
|
|
@@ -122,7 +122,7 @@ module ActiveMerchant #:nodoc:
|
|
|
122
122
|
xml.tag! action, { 'xmlns' => xmlns(action) } do
|
|
123
123
|
xml.tag! 'clientId', @options[:login]
|
|
124
124
|
xml.tag! 'clientCode', @options[:password]
|
|
125
|
-
params.each {|key, value| xml.tag! key, value }
|
|
125
|
+
params.each { |key, value| xml.tag! key, value }
|
|
126
126
|
end
|
|
127
127
|
end
|
|
128
128
|
end
|
|
@@ -207,7 +207,7 @@ module ActiveMerchant #:nodoc:
|
|
|
207
207
|
|
|
208
208
|
def parse_element(response, node)
|
|
209
209
|
if node.has_elements?
|
|
210
|
-
node.elements.each{|e| parse_element(response, e) }
|
|
210
|
+
node.elements.each { |e| parse_element(response, e) }
|
|
211
211
|
else
|
|
212
212
|
response[node.name.underscore.to_sym] = node.text.to_s.strip
|
|
213
213
|
end
|
|
@@ -33,7 +33,8 @@ module ActiveMerchant #:nodoc:
|
|
|
33
33
|
requires!(options, :login, :password)
|
|
34
34
|
@cvv_enabled = options[:cvv_enabled]
|
|
35
35
|
@avs_enabled = options[:avs_enabled]
|
|
36
|
-
|
|
36
|
+
@cof_enabled = options[:cof_enabled]
|
|
37
|
+
options[:crypt_type] = 7 unless options.has_key?(:crypt_type)
|
|
37
38
|
super
|
|
38
39
|
end
|
|
39
40
|
|
|
@@ -46,17 +47,18 @@ module ActiveMerchant #:nodoc:
|
|
|
46
47
|
requires!(options, :order_id)
|
|
47
48
|
post = {}
|
|
48
49
|
add_payment_source(post, creditcard_or_datakey, options)
|
|
49
|
-
post[:amount]
|
|
50
|
-
post[:order_id]
|
|
51
|
-
post[:address]
|
|
50
|
+
post[:amount] = amount(money)
|
|
51
|
+
post[:order_id] = options[:order_id]
|
|
52
|
+
post[:address] = options[:billing_address] || options[:address]
|
|
52
53
|
post[:crypt_type] = options[:crypt_type] || @options[:crypt_type]
|
|
54
|
+
add_cof(post, options) if @cof_enabled
|
|
53
55
|
action = if post[:cavv]
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
'cavv_preauth'
|
|
57
|
+
elsif post[:data_key].blank?
|
|
58
|
+
'preauth'
|
|
59
|
+
else
|
|
60
|
+
'res_preauth_cc'
|
|
61
|
+
end
|
|
60
62
|
commit(action, post)
|
|
61
63
|
end
|
|
62
64
|
|
|
@@ -68,17 +70,18 @@ module ActiveMerchant #:nodoc:
|
|
|
68
70
|
requires!(options, :order_id)
|
|
69
71
|
post = {}
|
|
70
72
|
add_payment_source(post, creditcard_or_datakey, options)
|
|
71
|
-
post[:amount]
|
|
72
|
-
post[:order_id]
|
|
73
|
-
post[:address]
|
|
73
|
+
post[:amount] = amount(money)
|
|
74
|
+
post[:order_id] = options[:order_id]
|
|
75
|
+
post[:address] = options[:billing_address] || options[:address]
|
|
74
76
|
post[:crypt_type] = options[:crypt_type] || @options[:crypt_type]
|
|
77
|
+
add_cof(post, options) if @cof_enabled
|
|
75
78
|
action = if post[:cavv]
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
79
|
+
'cavv_purchase'
|
|
80
|
+
elsif post[:data_key].blank?
|
|
81
|
+
'purchase'
|
|
82
|
+
else
|
|
83
|
+
'res_purchase_cc'
|
|
84
|
+
end
|
|
82
85
|
commit(action, post)
|
|
83
86
|
end
|
|
84
87
|
|
|
@@ -182,16 +185,16 @@ module ActiveMerchant #:nodoc:
|
|
|
182
185
|
|
|
183
186
|
def add_payment_source(post, payment_method, options)
|
|
184
187
|
if payment_method.is_a?(String)
|
|
185
|
-
post[:data_key]
|
|
186
|
-
post[:cust_id]
|
|
188
|
+
post[:data_key] = payment_method
|
|
189
|
+
post[:cust_id] = options[:customer]
|
|
187
190
|
else
|
|
188
191
|
if payment_method.respond_to?(:track_data) && payment_method.track_data.present?
|
|
189
|
-
post[:pos_code]
|
|
190
|
-
post[:track2]
|
|
192
|
+
post[:pos_code] = '00'
|
|
193
|
+
post[:track2] = payment_method.track_data
|
|
191
194
|
else
|
|
192
|
-
post[:pan]
|
|
193
|
-
post[:expdate]
|
|
194
|
-
post[:cvd_value]
|
|
195
|
+
post[:pan] = payment_method.number
|
|
196
|
+
post[:expdate] = expdate(payment_method)
|
|
197
|
+
post[:cvd_value] = payment_method.verification_value if payment_method.verification_value?
|
|
195
198
|
post[:cavv] = payment_method.payment_cryptogram if payment_method.is_a?(NetworkTokenizationCreditCard)
|
|
196
199
|
post[:wallet_indicator] = wallet_indicator(payment_method.source.to_s) if payment_method.is_a?(NetworkTokenizationCreditCard)
|
|
197
200
|
post[:crypt_type] = (payment_method.eci || 7) if payment_method.is_a?(NetworkTokenizationCreditCard)
|
|
@@ -200,6 +203,12 @@ module ActiveMerchant #:nodoc:
|
|
|
200
203
|
end
|
|
201
204
|
end
|
|
202
205
|
|
|
206
|
+
def add_cof(post, options)
|
|
207
|
+
post[:issuer_id] = options[:issuer_id] if options[:issuer_id]
|
|
208
|
+
post[:payment_indicator] = options[:payment_indicator] if options[:payment_indicator]
|
|
209
|
+
post[:payment_information] = options[:payment_information] if options[:payment_information]
|
|
210
|
+
end
|
|
211
|
+
|
|
203
212
|
# Common params used amongst the +credit+, +void+ and +capture+ methods
|
|
204
213
|
def crediting_params(authorization, options = {})
|
|
205
214
|
{
|
|
@@ -225,12 +234,14 @@ module ActiveMerchant #:nodoc:
|
|
|
225
234
|
raw = ssl_post(url, data)
|
|
226
235
|
response = parse(raw)
|
|
227
236
|
|
|
228
|
-
Response.new(
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
:
|
|
233
|
-
|
|
237
|
+
Response.new(
|
|
238
|
+
successful?(response),
|
|
239
|
+
message_from(response[:message]),
|
|
240
|
+
response,
|
|
241
|
+
:test => test?,
|
|
242
|
+
:avs_result => {:code => response[:avs_result_code]},
|
|
243
|
+
:cvv_result => response[:cvd_result_code] && response[:cvd_result_code][-1, 1],
|
|
244
|
+
:authorization => authorization_from(response))
|
|
234
245
|
end
|
|
235
246
|
|
|
236
247
|
# Generates a Moneris authorization string of the form 'trans_id;receipt_id'.
|
|
@@ -244,7 +255,7 @@ module ActiveMerchant #:nodoc:
|
|
|
244
255
|
def successful?(response)
|
|
245
256
|
response[:response_code] &&
|
|
246
257
|
response[:complete] &&
|
|
247
|
-
(0..49).
|
|
258
|
+
(0..49).cover?(response[:response_code].to_i)
|
|
248
259
|
end
|
|
249
260
|
|
|
250
261
|
def parse(xml)
|
|
@@ -262,9 +273,9 @@ module ActiveMerchant #:nodoc:
|
|
|
262
273
|
end
|
|
263
274
|
|
|
264
275
|
def post_data(action, parameters = {})
|
|
265
|
-
xml
|
|
266
|
-
root
|
|
267
|
-
root.add_element('store_id').text
|
|
276
|
+
xml = REXML::Document.new
|
|
277
|
+
root = xml.add_element('request')
|
|
278
|
+
root.add_element('store_id').text = options[:login]
|
|
268
279
|
root.add_element('api_token').text = options[:password]
|
|
269
280
|
root.add_element(transaction_element(action, parameters))
|
|
270
281
|
|
|
@@ -281,6 +292,8 @@ module ActiveMerchant #:nodoc:
|
|
|
281
292
|
transaction.add_element(avs_element(parameters[:address])) if @avs_enabled && parameters[:address]
|
|
282
293
|
when :cvd_info
|
|
283
294
|
transaction.add_element(cvd_element(parameters[:cvd_value])) if @cvv_enabled
|
|
295
|
+
when :cof_info
|
|
296
|
+
transaction.add_element(credential_on_file(parameters)) if @cof_enabled && cof_details_present?(parameters)
|
|
284
297
|
else
|
|
285
298
|
transaction.add_element(key.to_s).text = parameters[key] unless parameters[key].blank?
|
|
286
299
|
end
|
|
@@ -294,8 +307,8 @@ module ActiveMerchant #:nodoc:
|
|
|
294
307
|
tokens = full_address.split(/\s+/)
|
|
295
308
|
|
|
296
309
|
element = REXML::Element.new('avs_info')
|
|
297
|
-
element.add_element('avs_street_number').text = tokens.select{|x| x =~ /\d/}.join(' ')
|
|
298
|
-
element.add_element('avs_street_name').text = tokens.reject{|x| x =~ /\d/}.join(' ')
|
|
310
|
+
element.add_element('avs_street_number').text = tokens.select { |x| x =~ /\d/ }.join(' ')
|
|
311
|
+
element.add_element('avs_street_name').text = tokens.reject { |x| x =~ /\d/ }.join(' ')
|
|
299
312
|
element.add_element('avs_zipcode').text = address[:zip]
|
|
300
313
|
element
|
|
301
314
|
end
|
|
@@ -311,6 +324,22 @@ module ActiveMerchant #:nodoc:
|
|
|
311
324
|
element
|
|
312
325
|
end
|
|
313
326
|
|
|
327
|
+
def cof_details_present?(parameters)
|
|
328
|
+
parameters[:issuer_id] && parameters[:payment_indicator] && parameters[:payment_information]
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
def credential_on_file(parameters)
|
|
332
|
+
issuer_id = parameters[:issuer_id]
|
|
333
|
+
payment_indicator = parameters[:payment_indicator]
|
|
334
|
+
payment_information = parameters[:payment_information]
|
|
335
|
+
|
|
336
|
+
cof_info = REXML::Element.new('cof_info')
|
|
337
|
+
cof_info.add_element('issuer_id').text = issuer_id
|
|
338
|
+
cof_info.add_element('payment_indicator').text = payment_indicator
|
|
339
|
+
cof_info.add_element('payment_information').text = payment_information
|
|
340
|
+
cof_info
|
|
341
|
+
end
|
|
342
|
+
|
|
314
343
|
def wallet_indicator(token_source)
|
|
315
344
|
return 'APP' if token_source == 'apple_pay'
|
|
316
345
|
return 'ANP' if token_source == 'android_pay'
|
|
@@ -324,24 +353,24 @@ module ActiveMerchant #:nodoc:
|
|
|
324
353
|
|
|
325
354
|
def actions
|
|
326
355
|
{
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
356
|
+
'purchase' => [:order_id, :cust_id, :amount, :pan, :expdate, :crypt_type, :avs_info, :cvd_info, :track2, :pos_code, :cof_info],
|
|
357
|
+
'preauth' => [:order_id, :cust_id, :amount, :pan, :expdate, :crypt_type, :avs_info, :cvd_info, :track2, :pos_code, :cof_info],
|
|
358
|
+
'command' => [:order_id],
|
|
359
|
+
'refund' => [:order_id, :amount, :txn_number, :crypt_type],
|
|
360
|
+
'indrefund' => [:order_id, :cust_id, :amount, :pan, :expdate, :crypt_type],
|
|
361
|
+
'completion' => [:order_id, :comp_amount, :txn_number, :crypt_type],
|
|
362
|
+
'purchasecorrection' => [:order_id, :txn_number, :crypt_type],
|
|
363
|
+
'cavv_preauth' => [:order_id, :cust_id, :amount, :pan, :expdate, :cavv, :crypt_type, :wallet_indicator],
|
|
364
|
+
'cavv_purchase' => [:order_id, :cust_id, :amount, :pan, :expdate, :cavv, :crypt_type, :wallet_indicator],
|
|
365
|
+
'transact' => [:order_id, :cust_id, :amount, :pan, :expdate, :crypt_type],
|
|
366
|
+
'Batchcloseall' => [],
|
|
367
|
+
'opentotals' => [:ecr_number],
|
|
368
|
+
'batchclose' => [:ecr_number],
|
|
369
|
+
'res_add_cc' => [:pan, :expdate, :crypt_type, :cof_info],
|
|
370
|
+
'res_delete' => [:data_key],
|
|
371
|
+
'res_update_cc' => [:data_key, :pan, :expdate, :crypt_type],
|
|
372
|
+
'res_purchase_cc' => [:data_key, :order_id, :cust_id, :amount, :crypt_type, :cof_info],
|
|
373
|
+
'res_preauth_cc' => [:data_key, :order_id, :cust_id, :amount, :crypt_type, :cof_info]
|
|
345
374
|
}
|
|
346
375
|
end
|
|
347
376
|
end
|
|
@@ -74,11 +74,11 @@ module ActiveMerchant #:nodoc:
|
|
|
74
74
|
add_address(post, creditcard_or_datakey, options)
|
|
75
75
|
post[:crypt_type] = options[:crypt_type] || @options[:crypt_type]
|
|
76
76
|
action = if creditcard_or_datakey.is_a?(String)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
77
|
+
'us_res_purchase_cc'
|
|
78
|
+
elsif card_brand(creditcard_or_datakey) == 'check'
|
|
79
|
+
'us_ach_debit'
|
|
80
|
+
elsif post[:data_key].blank?
|
|
81
|
+
'us_purchase'
|
|
82
82
|
end
|
|
83
83
|
commit(action, post)
|
|
84
84
|
end
|
|
@@ -223,7 +223,7 @@ module ActiveMerchant #:nodoc:
|
|
|
223
223
|
Response.new(successful?(response), message_from(response[:message]), response,
|
|
224
224
|
:test => test?,
|
|
225
225
|
:avs_result => { :code => response[:avs_result_code] },
|
|
226
|
-
:cvv_result => response[:cvd_result_code] && response[:cvd_result_code][-1,1],
|
|
226
|
+
:cvv_result => response[:cvd_result_code] && response[:cvd_result_code][-1, 1],
|
|
227
227
|
:authorization => authorization_from(response)
|
|
228
228
|
)
|
|
229
229
|
end
|
|
@@ -239,7 +239,7 @@ module ActiveMerchant #:nodoc:
|
|
|
239
239
|
def successful?(response)
|
|
240
240
|
response[:response_code] &&
|
|
241
241
|
response[:complete] &&
|
|
242
|
-
(0..49).
|
|
242
|
+
(0..49).cover?(response[:response_code].to_i)
|
|
243
243
|
end
|
|
244
244
|
|
|
245
245
|
def parse(xml)
|
|
@@ -291,8 +291,8 @@ module ActiveMerchant #:nodoc:
|
|
|
291
291
|
tokens = full_address.split(/\s+/)
|
|
292
292
|
|
|
293
293
|
element = REXML::Element.new('avs_info')
|
|
294
|
-
element.add_element('avs_street_number').text = tokens.select{|x| x =~ /\d/}.join(' ')
|
|
295
|
-
element.add_element('avs_street_name').text = tokens.reject{|x| x =~ /\d/}.join(' ')
|
|
294
|
+
element.add_element('avs_street_number').text = tokens.select { |x| x =~ /\d/ }.join(' ')
|
|
295
|
+
element.add_element('avs_street_name').text = tokens.reject { |x| x =~ /\d/ }.join(' ')
|
|
296
296
|
element.add_element('avs_zipcode').text = address[:zip]
|
|
297
297
|
element
|
|
298
298
|
end
|
|
@@ -144,7 +144,7 @@ module ActiveMerchant #:nodoc:
|
|
|
144
144
|
parameters[:type] = action
|
|
145
145
|
parameters[:username] = @options[:login]
|
|
146
146
|
parameters[:password] = @options[:password]
|
|
147
|
-
parameters.map{|k, v| "#{k}=#{CGI.escape(v.to_s)}"}.join('&')
|
|
147
|
+
parameters.map { |k, v| "#{k}=#{CGI.escape(v.to_s)}" }.join('&')
|
|
148
148
|
end
|
|
149
149
|
end
|
|
150
150
|
end
|
|
@@ -177,7 +177,7 @@ module ActiveMerchant #:nodoc:
|
|
|
177
177
|
post[:payment][:credit_card][:card][:exp_year] = payment.year
|
|
178
178
|
post[:payment][:credit_card][:card][:cvv] = payment.verification_value
|
|
179
179
|
post[:payment][:credit_card][:card][:holder_document] = options[:holder_document] if options[:holder_document]
|
|
180
|
-
add_billing_address(post,'credit_card', options)
|
|
180
|
+
add_billing_address(post, 'credit_card', options)
|
|
181
181
|
end
|
|
182
182
|
end
|
|
183
183
|
|
|
@@ -280,7 +280,7 @@ module ActiveMerchant #:nodoc:
|
|
|
280
280
|
|
|
281
281
|
def parse_element(response, node)
|
|
282
282
|
if node.has_elements?
|
|
283
|
-
node.elements.each{|element| parse_element(response, element) }
|
|
283
|
+
node.elements.each { |element| parse_element(response, element) }
|
|
284
284
|
else
|
|
285
285
|
response[node.name.underscore.to_sym] = node.text
|
|
286
286
|
end
|
|
@@ -142,7 +142,7 @@ module ActiveMerchant
|
|
|
142
142
|
# omitted if nil.
|
|
143
143
|
def commit(action, params)
|
|
144
144
|
# get gateway response
|
|
145
|
-
response = parse(
|
|
145
|
+
response = parse(ssl_post(self.live_url, post_data(action, params)))
|
|
146
146
|
|
|
147
147
|
Response.new(response['status'] == 'approved', message_from(response), response,
|
|
148
148
|
:authorization => authorization_from(response, action)
|
|
@@ -152,7 +152,7 @@ module ActiveMerchant
|
|
|
152
152
|
def post_data(action, params)
|
|
153
153
|
params['COMMAND'] = TRANSACTIONS[action]
|
|
154
154
|
params['LOGIN'] = "#{@options[:login]}/#{@options[:password]}"
|
|
155
|
-
escape_uri(params.map{|k,v| "#{k}=#{v}"}.join('&'))
|
|
155
|
+
escape_uri(params.map { |k, v| "#{k}=#{v}" }.join('&'))
|
|
156
156
|
end
|
|
157
157
|
|
|
158
158
|
# The upstream is picky and so we can't use CGI.escape like we want to
|
|
@@ -31,8 +31,8 @@ module ActiveMerchant #:nodoc:
|
|
|
31
31
|
requires!(options, :order_id)
|
|
32
32
|
|
|
33
33
|
MultiResponse.run do |r|
|
|
34
|
-
r.process{authorize(money, creditcard, options)}
|
|
35
|
-
r.process{capture(money, r.authorization, options)}
|
|
34
|
+
r.process { authorize(money, creditcard, options) }
|
|
35
|
+
r.process { capture(money, r.authorization, options) }
|
|
36
36
|
end
|
|
37
37
|
end
|
|
38
38
|
|
|
@@ -40,9 +40,9 @@ module ActiveMerchant #:nodoc:
|
|
|
40
40
|
requires!(options, :order_id)
|
|
41
41
|
|
|
42
42
|
MultiResponse.run do |r|
|
|
43
|
-
r.process{setup_transaction(money, options)}
|
|
44
|
-
r.process{add_and_auth_credit_card(r.authorization, creditcard, options)}
|
|
45
|
-
r.process{query_transaction(r.authorization, options)}
|
|
43
|
+
r.process { setup_transaction(money, options) }
|
|
44
|
+
r.process { add_and_auth_credit_card(r.authorization, creditcard, options) }
|
|
45
|
+
r.process { query_transaction(r.authorization, options) }
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
|
|
@@ -173,7 +173,7 @@ module ActiveMerchant #:nodoc:
|
|
|
173
173
|
end
|
|
174
174
|
|
|
175
175
|
def encode(hash)
|
|
176
|
-
hash.collect{|(k,v)| "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}"}.join('&')
|
|
176
|
+
hash.collect { |(k, v)| "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}" }.join('&')
|
|
177
177
|
end
|
|
178
178
|
end
|
|
179
179
|
end
|
|
@@ -170,7 +170,7 @@ module ActiveMerchant #:nodoc:
|
|
|
170
170
|
:zip => address[:zip],
|
|
171
171
|
:state => address[:state],
|
|
172
172
|
}
|
|
173
|
-
mapped
|
|
173
|
+
mapped[:country] = country.code(:alpha2).value unless country.blank?
|
|
174
174
|
|
|
175
175
|
mapped
|
|
176
176
|
end
|
|
@@ -247,41 +247,41 @@ module ActiveMerchant #:nodoc:
|
|
|
247
247
|
def error_code_from(response)
|
|
248
248
|
unless success_from(response)
|
|
249
249
|
case response['errorCode']
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
250
|
+
when '3002' then STANDARD_ERROR_CODE[:invalid_number] # You submitted an invalid card number or brand or combination of card number and brand with your request.
|
|
251
|
+
when '3004' then STANDARD_ERROR_CODE[:incorrect_zip] # The zip/postal code must be provided for an AVS check request.
|
|
252
|
+
when '3005' then STANDARD_ERROR_CODE[:incorrect_cvc] # You submitted an incorrect CVC value with your request.
|
|
253
|
+
when '3006' then STANDARD_ERROR_CODE[:expired_card] # You submitted an expired credit card number with your request.
|
|
254
|
+
when '3009' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined by the issuing bank.
|
|
255
|
+
when '3011' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined by the issuing bank because the card used is a restricted card. Contact the cardholder's credit card company for further investigation.
|
|
256
|
+
when '3012' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined by the issuing bank because the credit card expiry date submitted is invalid.
|
|
257
|
+
when '3013' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined by the issuing bank due to problems with the credit card account.
|
|
258
|
+
when '3014' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined - the issuing bank has returned an unknown response. Contact the card holder's credit card company for further investigation.
|
|
259
|
+
when '3015' then STANDARD_ERROR_CODE[:card_declined] # The bank has requested that you process the transaction manually by calling the cardholder's credit card company.
|
|
260
|
+
when '3016' then STANDARD_ERROR_CODE[:card_declined] # The bank has requested that you retrieve the card from the cardholder – it may be a lost or stolen card.
|
|
261
|
+
when '3017' then STANDARD_ERROR_CODE[:invalid_number] # You submitted an invalid credit card number with your request.
|
|
262
|
+
when '3022' then STANDARD_ERROR_CODE[:card_declined] # The card has been declined due to insufficient funds.
|
|
263
|
+
when '3023' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined by the issuing bank due to its proprietary card activity regulations.
|
|
264
|
+
when '3024' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined because the issuing bank does not permit the transaction for this card.
|
|
265
|
+
when '3032' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined by the issuing bank or external gateway because the card is probably in one of their negative databases.
|
|
266
|
+
when '3035' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined due to exceeded PIN attempts.
|
|
267
|
+
when '3036' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined due to an invalid issuer.
|
|
268
|
+
when '3037' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined because it is invalid.
|
|
269
|
+
when '3038' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined due to customer cancellation.
|
|
270
|
+
when '3039' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined due to an invalid authentication value.
|
|
271
|
+
when '3040' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined because the request type is not permitted on the card.
|
|
272
|
+
when '3041' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined due to a timeout.
|
|
273
|
+
when '3042' then STANDARD_ERROR_CODE[:card_declined] # Your request has been declined due to a cryptographic error.
|
|
274
|
+
when '3045' then STANDARD_ERROR_CODE[:invalid_expiry_date] # You submitted an invalid date format for this request.
|
|
275
|
+
when '3046' then STANDARD_ERROR_CODE[:card_declined] # The transaction was declined because the amount was set to zero.
|
|
276
|
+
when '3047' then STANDARD_ERROR_CODE[:card_declined] # The transaction was declined because the amount exceeds the floor limit.
|
|
277
|
+
when '3048' then STANDARD_ERROR_CODE[:card_declined] # The transaction was declined because the amount is less than the floor limit.
|
|
278
|
+
when '3049' then STANDARD_ERROR_CODE[:card_declined] # The bank has requested that you retrieve the card from the cardholder – the credit card has expired.
|
|
279
|
+
when '3050' then STANDARD_ERROR_CODE[:card_declined] # The bank has requested that you retrieve the card from the cardholder – fraudulent activity is suspected.
|
|
280
|
+
when '3051' then STANDARD_ERROR_CODE[:card_declined] # The bank has requested that you retrieve the card from the cardholder – contact the acquirer for more information.
|
|
281
|
+
when '3052' then STANDARD_ERROR_CODE[:card_declined] # The bank has requested that you retrieve the card from the cardholder – the credit card is restricted.
|
|
282
|
+
when '3053' then STANDARD_ERROR_CODE[:card_declined] # The bank has requested that you retrieve the card from the cardholder – please call the acquirer.
|
|
283
|
+
when '3054' then STANDARD_ERROR_CODE[:card_declined] # The transaction was declined due to suspected fraud.
|
|
284
|
+
else STANDARD_ERROR_CODE[:processing_error]
|
|
285
285
|
end
|
|
286
286
|
end
|
|
287
287
|
end
|