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
|
@@ -92,7 +92,7 @@ module ActiveMerchant #:nodoc:
|
|
|
92
92
|
def recurring_inquiry(profile_id, options = {})
|
|
93
93
|
ActiveMerchant.deprecated RECURRING_DEPRECATION_MESSAGE
|
|
94
94
|
|
|
95
|
-
request = build_recurring_request(:inquiry, nil, options.update(
|
|
95
|
+
request = build_recurring_request(:inquiry, nil, options.update(:profile_id => profile_id))
|
|
96
96
|
commit(request, options.merge(:request_type => :recurring))
|
|
97
97
|
end
|
|
98
98
|
|
|
@@ -143,7 +143,7 @@ module ActiveMerchant #:nodoc:
|
|
|
143
143
|
|
|
144
144
|
billing_address = options[:billing_address] || options[:address]
|
|
145
145
|
add_address(xml, 'BillTo', billing_address, options) if billing_address
|
|
146
|
-
add_address(xml, 'ShipTo', options[:shipping_address],options) if options[:shipping_address]
|
|
146
|
+
add_address(xml, 'ShipTo', options[:shipping_address], options) if options[:shipping_address]
|
|
147
147
|
|
|
148
148
|
xml.tag! 'TotalAmt', amount(money), 'Currency' => options[:currency] || currency(money)
|
|
149
149
|
end
|
|
@@ -289,7 +289,7 @@ module ActiveMerchant #:nodoc:
|
|
|
289
289
|
end
|
|
290
290
|
|
|
291
291
|
if action == :add
|
|
292
|
-
xml.tag! 'Start', format_rp_date(options[:starting_at] || Date.today + 1
|
|
292
|
+
xml.tag! 'Start', format_rp_date(options[:starting_at] || Date.today + 1)
|
|
293
293
|
else
|
|
294
294
|
xml.tag! 'Start', format_rp_date(options[:starting_at]) unless options[:starting_at].nil?
|
|
295
295
|
end
|
|
@@ -308,7 +308,7 @@ module ActiveMerchant #:nodoc:
|
|
|
308
308
|
xml.tag! 'ProfileID', options[:profile_id]
|
|
309
309
|
end
|
|
310
310
|
if action == :inquiry
|
|
311
|
-
xml.tag! 'PaymentHistory', (
|
|
311
|
+
xml.tag! 'PaymentHistory', (options[:history] ? 'Y' : 'N')
|
|
312
312
|
end
|
|
313
313
|
end
|
|
314
314
|
end
|
|
@@ -318,20 +318,20 @@ module ActiveMerchant #:nodoc:
|
|
|
318
318
|
def get_pay_period(options)
|
|
319
319
|
requires!(options, [:periodicity, :bimonthly, :monthly, :biweekly, :weekly, :yearly, :daily, :semimonthly, :quadweekly, :quarterly, :semiyearly])
|
|
320
320
|
case options[:periodicity]
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
321
|
+
when :weekly then 'Weekly'
|
|
322
|
+
when :biweekly then 'Bi-weekly'
|
|
323
|
+
when :semimonthly then 'Semi-monthly'
|
|
324
|
+
when :quadweekly then 'Every four weeks'
|
|
325
|
+
when :monthly then 'Monthly'
|
|
326
|
+
when :quarterly then 'Quarterly'
|
|
327
|
+
when :semiyearly then 'Semi-yearly'
|
|
328
|
+
when :yearly then 'Yearly'
|
|
329
329
|
end
|
|
330
330
|
end
|
|
331
331
|
|
|
332
332
|
def format_rp_date(time)
|
|
333
333
|
case time
|
|
334
|
-
|
|
334
|
+
when Time, Date then time.strftime('%m%d%Y')
|
|
335
335
|
else
|
|
336
336
|
time.to_s
|
|
337
337
|
end
|
|
@@ -178,10 +178,10 @@ module ActiveMerchant #:nodoc:
|
|
|
178
178
|
# down as we do everywhere else. RPPaymentResult elements are not contained
|
|
179
179
|
# in an RPPaymentResults element so we'll come here multiple times
|
|
180
180
|
response[node_name] ||= []
|
|
181
|
-
response[node_name] << (
|
|
182
|
-
node.xpath('.//*').each{ |e| parse_element(payment_result_response, e) }
|
|
181
|
+
response[node_name] << (payment_result_response = {})
|
|
182
|
+
node.xpath('.//*').each { |e| parse_element(payment_result_response, e) }
|
|
183
183
|
when node.xpath('.//*').to_a.any?
|
|
184
|
-
node.xpath('.//*').each{|e| parse_element(response, e) }
|
|
184
|
+
node.xpath('.//*').each { |e| parse_element(response, e) }
|
|
185
185
|
when node_name.to_s =~ /amt$/
|
|
186
186
|
# *Amt elements don't put the value in the #text - instead they use a Currency attribute
|
|
187
187
|
response[node_name] = node.attributes['Currency'].to_s
|
|
@@ -202,7 +202,7 @@ module ActiveMerchant #:nodoc:
|
|
|
202
202
|
'X-VPS-Request-ID' => SecureRandom.hex(16)
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
-
headers
|
|
205
|
+
headers['PAYPAL-NVP'] = 'Y' if self.use_paypal_nvp
|
|
206
206
|
headers
|
|
207
207
|
end
|
|
208
208
|
|
|
@@ -198,7 +198,7 @@ module ActiveMerchant #:nodoc:
|
|
|
198
198
|
xml.tag! 'Token', options[:token] unless options[:token].blank?
|
|
199
199
|
xml.tag! 'NoShipping', options[:no_shipping] ? '1' : '0'
|
|
200
200
|
xml.tag! 'AddressOverride', options[:address_override] ? '1' : '0'
|
|
201
|
-
xml.tag! 'ButtonSource', application_id.to_s.slice(0,32) unless application_id.blank?
|
|
201
|
+
xml.tag! 'ButtonSource', application_id.to_s.slice(0, 32) unless application_id.blank?
|
|
202
202
|
|
|
203
203
|
# Customization of the payment page
|
|
204
204
|
xml.tag! 'PageStyle', options[:page_style] unless options[:page_style].blank?
|
|
@@ -274,9 +274,9 @@ module ActiveMerchant #:nodoc:
|
|
|
274
274
|
xml.add_element('ClientType').text = client_type
|
|
275
275
|
end
|
|
276
276
|
|
|
277
|
-
xml.add_element('TxnData1').text = options[:txn_data1].to_s.slice(0,255) unless options[:txn_data1].blank?
|
|
278
|
-
xml.add_element('TxnData2').text = options[:txn_data2].to_s.slice(0,255) unless options[:txn_data2].blank?
|
|
279
|
-
xml.add_element('TxnData3').text = options[:txn_data3].to_s.slice(0,255) unless options[:txn_data3].blank?
|
|
277
|
+
xml.add_element('TxnData1').text = options[:txn_data1].to_s.slice(0, 255) unless options[:txn_data1].blank?
|
|
278
|
+
xml.add_element('TxnData2').text = options[:txn_data2].to_s.slice(0, 255) unless options[:txn_data2].blank?
|
|
279
|
+
xml.add_element('TxnData3').text = options[:txn_data3].to_s.slice(0, 255) unless options[:txn_data3].blank?
|
|
280
280
|
end
|
|
281
281
|
|
|
282
282
|
def new_transaction
|
|
@@ -340,13 +340,13 @@ module ActiveMerchant #:nodoc:
|
|
|
340
340
|
|
|
341
341
|
def normalized_client_type(client_type_from_options)
|
|
342
342
|
case client_type_from_options.to_s.downcase
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
343
|
+
when 'web' then 'Web'
|
|
344
|
+
when 'ivr' then 'IVR'
|
|
345
|
+
when 'moto' then 'MOTO'
|
|
346
|
+
when 'unattended' then 'Unattended'
|
|
347
|
+
when 'internet' then 'Internet'
|
|
348
|
+
when 'recurring' then 'Recurring'
|
|
349
|
+
else nil
|
|
350
350
|
end
|
|
351
351
|
end
|
|
352
352
|
end
|
|
@@ -134,6 +134,9 @@ module ActiveMerchant #:nodoc:
|
|
|
134
134
|
post[:user][:email] = options[:email]
|
|
135
135
|
post[:user][:ip_address] = options[:ip] if options[:ip]
|
|
136
136
|
post[:user][:fiscal_number] = options[:fiscal_number] if options[:fiscal_number]
|
|
137
|
+
if phone = options[:phone] || options.dig(:billing_address, :phone)
|
|
138
|
+
post[:user][:phone] = phone
|
|
139
|
+
end
|
|
137
140
|
end
|
|
138
141
|
|
|
139
142
|
def add_invoice(post, money, options)
|
|
@@ -82,7 +82,7 @@ module ActiveMerchant #:nodoc:
|
|
|
82
82
|
post['account.verification'] = credit_card.verification_value
|
|
83
83
|
post['account.email'] = (options[:email] || nil)
|
|
84
84
|
post['presentation.amount3D'] = (options[:money] || nil)
|
|
85
|
-
post['presentation.currency3D'] = (options[:currency] || currency(
|
|
85
|
+
post['presentation.currency3D'] = (options[:currency] || currency(options[:money]))
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
def headers
|
|
@@ -128,9 +128,9 @@ module ActiveMerchant #:nodoc:
|
|
|
128
128
|
def action_with_token(action, money, payment_method, options)
|
|
129
129
|
options[:money] = money
|
|
130
130
|
case payment_method
|
|
131
|
-
|
|
131
|
+
when String
|
|
132
132
|
self.send("#{action}_with_token", money, payment_method, options)
|
|
133
|
-
|
|
133
|
+
else
|
|
134
134
|
MultiResponse.run do |r|
|
|
135
135
|
r.process { save_card(payment_method, options) }
|
|
136
136
|
r.process { self.send("#{action}_with_token", money, r.authorization, options) }
|
|
@@ -314,7 +314,7 @@ module ActiveMerchant #:nodoc:
|
|
|
314
314
|
|
|
315
315
|
def response_message(parsed_response)
|
|
316
316
|
return parsed_response['error'] if parsed_response['error']
|
|
317
|
-
return 'Transaction approved.' if
|
|
317
|
+
return 'Transaction approved.' if parsed_response['data'] == []
|
|
318
318
|
|
|
319
319
|
code = parsed_response['data']['response_code'].to_i
|
|
320
320
|
RESPONSE_CODES[code] || code.to_s
|
|
@@ -179,7 +179,7 @@ module ActiveMerchant #:nodoc:
|
|
|
179
179
|
message = message_from(response)
|
|
180
180
|
|
|
181
181
|
PaystationResponse.new(success?(response), message, response,
|
|
182
|
-
:test => (response[:tm]
|
|
182
|
+
:test => (response[:tm]&.casecmp('t')&.zero?),
|
|
183
183
|
:authorization => response[:paystation_transaction_id]
|
|
184
184
|
)
|
|
185
185
|
end
|
|
@@ -32,11 +32,11 @@ module ActiveMerchant #:nodoc:
|
|
|
32
32
|
add_auth(post)
|
|
33
33
|
|
|
34
34
|
MultiResponse.run do |r|
|
|
35
|
-
r.process{commit(url('purchase'), post)}
|
|
35
|
+
r.process { commit(url('purchase'), post) }
|
|
36
36
|
if(r.params['enrolled'].to_s == '0')
|
|
37
|
-
r.process{commit(r.params['post_uri'], r.params['form_post_vars'])}
|
|
37
|
+
r.process { commit(r.params['post_uri'], r.params['form_post_vars']) }
|
|
38
38
|
else
|
|
39
|
-
r.process{handle_3dsecure(r)}
|
|
39
|
+
r.process { handle_3dsecure(r) }
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
end
|
|
@@ -167,7 +167,7 @@ module ActiveMerchant #:nodoc:
|
|
|
167
167
|
address = options[:billing_address]
|
|
168
168
|
payer = {}
|
|
169
169
|
payer[:fullName] = payment_method.name.strip
|
|
170
|
-
payer[:contactPhone] = address[:phone] if
|
|
170
|
+
payer[:contactPhone] = address[:phone] if address && address[:phone]
|
|
171
171
|
payer[:dniNumber] = options[:dni_number] if options[:dni_number]
|
|
172
172
|
payer[:dniType] = options[:dni_type] if options[:dni_type]
|
|
173
173
|
payer[:emailAddress] = options[:email] if options[:email]
|
|
@@ -150,7 +150,7 @@ module ActiveMerchant
|
|
|
150
150
|
post['card.cardHolderName'] = "#{payment_method.first_name} #{payment_method.last_name}"
|
|
151
151
|
post['card.PAN'] = payment_method.number
|
|
152
152
|
post['card.CVN'] = payment_method.verification_value
|
|
153
|
-
post['card.expiryYear'] = payment_method.year.to_s[-2,2]
|
|
153
|
+
post['card.expiryYear'] = payment_method.year.to_s[-2, 2]
|
|
154
154
|
post['card.expiryMonth'] = sprintf('%02d', payment_method.month)
|
|
155
155
|
else
|
|
156
156
|
post['customer.customerReferenceNumber'] = payment_method
|
|
@@ -177,7 +177,7 @@ module ActiveMerchant
|
|
|
177
177
|
# Creates the request and returns the summarized result
|
|
178
178
|
def commit(action, post)
|
|
179
179
|
add_auth(post)
|
|
180
|
-
post
|
|
180
|
+
post['order.type'] = TRANSACTIONS[action]
|
|
181
181
|
|
|
182
182
|
request = post.map { |k, v| "#{k}=#{CGI.escape(v.to_s)}" }.join('&')
|
|
183
183
|
response = ssl_post(self.live_url, request)
|
|
@@ -174,7 +174,7 @@ module ActiveMerchant
|
|
|
174
174
|
private
|
|
175
175
|
|
|
176
176
|
def commit(action, post)
|
|
177
|
-
response = parse(
|
|
177
|
+
response = parse(ssl_post(self.live_url, post_data(action, post)))
|
|
178
178
|
success = SUCCESS_CODES.include?(response[:finalstatus])
|
|
179
179
|
message = success ? 'Success' : message_from(response)
|
|
180
180
|
|
|
@@ -189,7 +189,7 @@ module ActiveMerchant
|
|
|
189
189
|
def parse(body)
|
|
190
190
|
body = CGI.unescape(body)
|
|
191
191
|
results = {}
|
|
192
|
-
body.split('&').collect { |e| e.split('=') }.each do |key,value|
|
|
192
|
+
body.split('&').collect { |e| e.split('=') }.each do |key, value|
|
|
193
193
|
results[key.downcase.to_sym] = normalize(value.to_s.strip)
|
|
194
194
|
end
|
|
195
195
|
|
|
@@ -317,8 +317,8 @@ module ActiveMerchant #:nodoc:
|
|
|
317
317
|
|
|
318
318
|
def underscore(camel_cased_word)
|
|
319
319
|
camel_cased_word.to_s.gsub(/::/, '/').
|
|
320
|
-
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
|
321
|
-
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
|
320
|
+
gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
|
|
321
|
+
gsub(/([a-z\d])([A-Z])/, '\1_\2').
|
|
322
322
|
tr('-', '_').
|
|
323
323
|
downcase
|
|
324
324
|
end
|
|
@@ -168,7 +168,7 @@ module ActiveMerchant #:nodoc:
|
|
|
168
168
|
|
|
169
169
|
if creditcard
|
|
170
170
|
exp_month = sprintf('%.2i', creditcard.month) unless creditcard.month.blank?
|
|
171
|
-
exp_year = creditcard.year.to_s[2,2] unless creditcard.year.blank?
|
|
171
|
+
exp_year = creditcard.year.to_s[2, 2] unless creditcard.year.blank?
|
|
172
172
|
card_id_code = (creditcard.verification_value.blank? ? nil : '1')
|
|
173
173
|
|
|
174
174
|
params.update(
|
|
@@ -183,7 +183,7 @@ module ActiveMerchant
|
|
|
183
183
|
address = options[:billing_address] || options[:address]
|
|
184
184
|
return if address.nil?
|
|
185
185
|
|
|
186
|
-
post[:QAAddress] = [:address1, :address2, :city, :state].collect{|a| address[a]}.reject(&:blank?).join(' ')
|
|
186
|
+
post[:QAAddress] = [:address1, :address2, :city, :state].collect { |a| address[a] }.reject(&:blank?).join(' ')
|
|
187
187
|
post[:QAPostcode] = address[:zip]
|
|
188
188
|
end
|
|
189
189
|
|
|
@@ -242,7 +242,7 @@ module ActiveMerchant
|
|
|
242
242
|
def parse(body)
|
|
243
243
|
fields = {}
|
|
244
244
|
for line in body.split('&')
|
|
245
|
-
key, value = *line.scan(
|
|
245
|
+
key, value = *line.scan(%r{^(\w+)\=(.*)$}).flatten
|
|
246
246
|
fields[key] = CGI.unescape(value)
|
|
247
247
|
end
|
|
248
248
|
fields.symbolize_keys
|
|
@@ -257,7 +257,7 @@ module ActiveMerchant
|
|
|
257
257
|
# - ActiveMerchant::Billing::Response object
|
|
258
258
|
#
|
|
259
259
|
def commit(request)
|
|
260
|
-
response = parse(
|
|
260
|
+
response = parse(ssl_post(self.live_url, post_data(request)))
|
|
261
261
|
|
|
262
262
|
Response.new(response[:ResponseCode] == APPROVED, response[:Message], response,
|
|
263
263
|
:test => test?,
|
|
@@ -101,7 +101,7 @@ module ActiveMerchant #:nodoc:
|
|
|
101
101
|
#
|
|
102
102
|
def credit(money, identification, options = {})
|
|
103
103
|
ActiveMerchant.deprecated CREDIT_DEPRECATION_MESSAGE
|
|
104
|
-
refund(money, identification,
|
|
104
|
+
refund(money, identification, {})
|
|
105
105
|
end
|
|
106
106
|
|
|
107
107
|
def refund(money, identification, options = {})
|
|
@@ -44,7 +44,7 @@ module ActiveMerchant #:nodoc:
|
|
|
44
44
|
#
|
|
45
45
|
def authorize(money, creditcard, options = {})
|
|
46
46
|
setup_address_hash(options)
|
|
47
|
-
commit(build_auth_request(money, creditcard, options), options
|
|
47
|
+
commit(build_auth_request(money, creditcard, options), options)
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
# Capture an authorization that has previously been requested
|
|
@@ -81,7 +81,7 @@ module ActiveMerchant #:nodoc:
|
|
|
81
81
|
|
|
82
82
|
def build_auth_request(money, creditcard, options)
|
|
83
83
|
xml = Builder::XmlMarkup.new
|
|
84
|
-
add_common_credit_card_info(xml,'AUTH_ONLY')
|
|
84
|
+
add_common_credit_card_info(xml, 'AUTH_ONLY')
|
|
85
85
|
add_purchase_data(xml, money)
|
|
86
86
|
add_creditcard(xml, creditcard)
|
|
87
87
|
add_address(xml, creditcard, options[:billing_address], options)
|
|
@@ -94,7 +94,7 @@ module ActiveMerchant #:nodoc:
|
|
|
94
94
|
|
|
95
95
|
def build_capture_request(money, authorization, options)
|
|
96
96
|
xml = Builder::XmlMarkup.new
|
|
97
|
-
add_common_credit_card_info(xml,'PREVIOUS_SALE')
|
|
97
|
+
add_common_credit_card_info(xml, 'PREVIOUS_SALE')
|
|
98
98
|
transaction_id, _ = authorization_parts_from(authorization)
|
|
99
99
|
add_transaction_id(xml, transaction_id)
|
|
100
100
|
xml.target!
|
|
@@ -115,7 +115,7 @@ module ActiveMerchant #:nodoc:
|
|
|
115
115
|
|
|
116
116
|
def build_void_request(authorization, options)
|
|
117
117
|
xml = Builder::XmlMarkup.new
|
|
118
|
-
add_common_credit_card_info(xml,'VOID')
|
|
118
|
+
add_common_credit_card_info(xml, 'VOID')
|
|
119
119
|
transaction_id, _ = authorization_parts_from(authorization)
|
|
120
120
|
add_transaction_id(xml, transaction_id)
|
|
121
121
|
xml.target!
|
|
@@ -123,7 +123,7 @@ module ActiveMerchant #:nodoc:
|
|
|
123
123
|
|
|
124
124
|
def build_credit_request(money, authorization, options)
|
|
125
125
|
xml = Builder::XmlMarkup.new
|
|
126
|
-
add_common_credit_card_info(xml,'RETURN')
|
|
126
|
+
add_common_credit_card_info(xml, 'RETURN')
|
|
127
127
|
add_purchase_data(xml, money)
|
|
128
128
|
transaction_id, cc = authorization_parts_from(authorization)
|
|
129
129
|
add_transaction_id(xml, transaction_id)
|
|
@@ -182,7 +182,7 @@ module ActiveMerchant #:nodoc:
|
|
|
182
182
|
xml.tag! 'CreditCardNumber', creditcard.number
|
|
183
183
|
xml.tag! 'ExpireMonth', format(creditcard.month, :two_digits)
|
|
184
184
|
xml.tag! 'ExpireYear', format(creditcard.year, :four_digits)
|
|
185
|
-
xml.tag!('CVV2', creditcard.verification_value) unless
|
|
185
|
+
xml.tag!('CVV2', creditcard.verification_value) unless @options[:ignore_cvv] || creditcard.verification_value.blank?
|
|
186
186
|
end
|
|
187
187
|
|
|
188
188
|
# Where we actually build the full SOAP request using builder
|
|
@@ -251,7 +251,7 @@ module ActiveMerchant #:nodoc:
|
|
|
251
251
|
|
|
252
252
|
def parse_element(reply, node)
|
|
253
253
|
if node.has_elements?
|
|
254
|
-
node.elements.each{|e| parse_element(reply, e) }
|
|
254
|
+
node.elements.each { |e| parse_element(reply, e) }
|
|
255
255
|
else
|
|
256
256
|
if node.parent.name =~ /item/
|
|
257
257
|
parent = node.parent.name + (node.parent.attributes['id'] ? '_' + node.parent.attributes['id'] : '')
|
|
@@ -48,7 +48,7 @@ module ActiveMerchant #:nodoc:
|
|
|
48
48
|
'PMT-6000' => STANDARD_ERROR_CODE[:processing_error], # A temporary Issue prevented this request from being processed.
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
FRAUD_WARNING_CODES = ['PMT-1000','PMT-1001','PMT-1002','PMT-1003']
|
|
51
|
+
FRAUD_WARNING_CODES = ['PMT-1000', 'PMT-1001', 'PMT-1002', 'PMT-1003']
|
|
52
52
|
|
|
53
53
|
def initialize(options = {})
|
|
54
54
|
requires!(options, :consumer_key, :consumer_secret, :access_token, :token_secret, :realm)
|
|
@@ -224,17 +224,17 @@ module ActiveMerchant #:nodoc:
|
|
|
224
224
|
}
|
|
225
225
|
|
|
226
226
|
# prepare components for signature
|
|
227
|
-
oauth_signature_base_string = [method.to_s.upcase, request_uri.to_s, oauth_parameters.to_param].map{|v| CGI.escape(v) }.join('&')
|
|
228
|
-
oauth_signing_key = [@options[:consumer_secret], @options[:token_secret]].map{|v| CGI.escape(v)}.join('&')
|
|
227
|
+
oauth_signature_base_string = [method.to_s.upcase, request_uri.to_s, oauth_parameters.to_param].map { |v| CGI.escape(v) }.join('&')
|
|
228
|
+
oauth_signing_key = [@options[:consumer_secret], @options[:token_secret]].map { |v| CGI.escape(v) }.join('&')
|
|
229
229
|
hmac_signature = OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha1'), oauth_signing_key, oauth_signature_base_string)
|
|
230
230
|
|
|
231
231
|
# append signature to required OAuth parameters
|
|
232
232
|
oauth_parameters[:oauth_signature] = CGI.escape(Base64.encode64(hmac_signature).chomp.gsub(/\n/, ''))
|
|
233
233
|
|
|
234
234
|
# prepare Authorization header string
|
|
235
|
-
oauth_parameters = Hash[oauth_parameters.sort_by {|k, _| k}]
|
|
235
|
+
oauth_parameters = Hash[oauth_parameters.sort_by { |k, _| k }]
|
|
236
236
|
oauth_headers = ["OAuth realm=\"#{@options[:realm]}\""]
|
|
237
|
-
oauth_headers += oauth_parameters.map {|k, v| "#{k}=\"#{v}\""}
|
|
237
|
+
oauth_headers += oauth_parameters.map { |k, v| "#{k}=\"#{v}\"" }
|
|
238
238
|
|
|
239
239
|
{
|
|
240
240
|
'Content-type' => 'application/json',
|
|
@@ -258,7 +258,7 @@ module ActiveMerchant #:nodoc:
|
|
|
258
258
|
end
|
|
259
259
|
|
|
260
260
|
def message_from(response)
|
|
261
|
-
response['errors'].present? ? response['errors'].map {|error_hash| error_hash['message'] }.join(' ') : response['status']
|
|
261
|
+
response['errors'].present? ? response['errors'].map { |error_hash| error_hash['message'] }.join(' ') : response['status']
|
|
262
262
|
end
|
|
263
263
|
|
|
264
264
|
def errors_from(response)
|
|
@@ -78,7 +78,7 @@ module ActiveMerchant
|
|
|
78
78
|
def store(credit_card, options = {})
|
|
79
79
|
MultiResponse.run do |r|
|
|
80
80
|
r.process { create_store(options) }
|
|
81
|
-
r.process { authorize_store(r.authorization, credit_card, options)}
|
|
81
|
+
r.process { authorize_store(r.authorization, credit_card, options) }
|
|
82
82
|
end
|
|
83
83
|
end
|
|
84
84
|
|
|
@@ -103,7 +103,7 @@ module ActiveMerchant #:nodoc:
|
|
|
103
103
|
|
|
104
104
|
private
|
|
105
105
|
|
|
106
|
-
CURRENCY_CODES = Hash.new{|h,k| raise ArgumentError.new("Unsupported currency: #{k}")}
|
|
106
|
+
CURRENCY_CODES = Hash.new { |h, k| raise ArgumentError.new("Unsupported currency: #{k}") }
|
|
107
107
|
CURRENCY_CODES['AUD'] = 'AUD'
|
|
108
108
|
CURRENCY_CODES['INR'] = 'INR'
|
|
109
109
|
|
|
@@ -197,7 +197,7 @@ module ActiveMerchant #:nodoc:
|
|
|
197
197
|
|
|
198
198
|
def parse_element(response, node)
|
|
199
199
|
if node.has_elements?
|
|
200
|
-
node.elements.each{|element| parse_element(response, element) }
|
|
200
|
+
node.elements.each { |element| parse_element(response, element) }
|
|
201
201
|
else
|
|
202
202
|
response[node.name.underscore.to_sym] = node.text
|
|
203
203
|
end
|
|
@@ -80,6 +80,13 @@ module ActiveMerchant
|
|
|
80
80
|
commit(request)
|
|
81
81
|
end
|
|
82
82
|
|
|
83
|
+
def verify(credit_card, options = {})
|
|
84
|
+
requires!(options, :order_id)
|
|
85
|
+
|
|
86
|
+
request = build_verify_request(credit_card, options)
|
|
87
|
+
commit(request)
|
|
88
|
+
end
|
|
89
|
+
|
|
83
90
|
def supports_scrubbing
|
|
84
91
|
true
|
|
85
92
|
end
|
|
@@ -111,7 +118,7 @@ module ActiveMerchant
|
|
|
111
118
|
|
|
112
119
|
doc = Nokogiri::XML(xml)
|
|
113
120
|
doc.xpath('//response/*').each do |node|
|
|
114
|
-
if
|
|
121
|
+
if node.elements.size == 0
|
|
115
122
|
response[node.name.downcase.to_sym] = normalize(node.text)
|
|
116
123
|
else
|
|
117
124
|
node.elements.each do |childnode|
|
|
@@ -185,6 +192,20 @@ module ActiveMerchant
|
|
|
185
192
|
xml.target!
|
|
186
193
|
end
|
|
187
194
|
|
|
195
|
+
# Verify initiates an OTB (Open To Buy) request
|
|
196
|
+
def build_verify_request(credit_card, options)
|
|
197
|
+
timestamp = new_timestamp
|
|
198
|
+
xml = Builder::XmlMarkup.new :indent => 2
|
|
199
|
+
xml.tag! 'request', 'timestamp' => timestamp, 'type' => 'otb' do
|
|
200
|
+
add_merchant_details(xml, options)
|
|
201
|
+
xml.tag! 'orderid', sanitize_order_id(options[:order_id])
|
|
202
|
+
add_card(xml, credit_card)
|
|
203
|
+
add_comments(xml, options)
|
|
204
|
+
add_signed_digest(xml, timestamp, @options[:login], sanitize_order_id(options[:order_id]), credit_card.number)
|
|
205
|
+
end
|
|
206
|
+
xml.target!
|
|
207
|
+
end
|
|
208
|
+
|
|
188
209
|
def add_address_and_customer_info(xml, options)
|
|
189
210
|
billing_address = options[:billing_address] || options[:address]
|
|
190
211
|
shipping_address = options[:shipping_address]
|
|
@@ -258,14 +279,14 @@ module ActiveMerchant
|
|
|
258
279
|
end
|
|
259
280
|
xml.tag! 'supplementarydata' do
|
|
260
281
|
xml.tag! 'item', 'type' => 'mobile' do
|
|
261
|
-
xml.tag! 'field01', payment.source.to_s.gsub('_','-')
|
|
282
|
+
xml.tag! 'field01', payment.source.to_s.gsub('_', '-')
|
|
262
283
|
end
|
|
263
284
|
end
|
|
264
285
|
end
|
|
265
286
|
|
|
266
287
|
def format_address_code(address)
|
|
267
288
|
code = [address[:zip].to_s, address[:address1].to_s + address[:address2].to_s]
|
|
268
|
-
code.collect{|e| e.gsub(/\D/, '')}.reject(&:empty?).join('|')
|
|
289
|
+
code.collect { |e| e.gsub(/\D/, '') }.reject(&:empty?).join('|')
|
|
269
290
|
end
|
|
270
291
|
|
|
271
292
|
def new_timestamp
|
|
@@ -286,26 +307,25 @@ module ActiveMerchant
|
|
|
286
307
|
end
|
|
287
308
|
|
|
288
309
|
def message_from(response)
|
|
289
|
-
message = nil
|
|
290
310
|
case response[:result]
|
|
291
311
|
when '00'
|
|
292
|
-
|
|
312
|
+
SUCCESS
|
|
293
313
|
when '101'
|
|
294
|
-
|
|
314
|
+
response[:message]
|
|
295
315
|
when '102', '103'
|
|
296
|
-
|
|
316
|
+
DECLINED
|
|
297
317
|
when /^2[0-9][0-9]/
|
|
298
|
-
|
|
318
|
+
BANK_ERROR
|
|
299
319
|
when /^3[0-9][0-9]/
|
|
300
|
-
|
|
320
|
+
REALEX_ERROR
|
|
301
321
|
when /^5[0-9][0-9]/
|
|
302
|
-
|
|
322
|
+
response[:message]
|
|
303
323
|
when '600', '601', '603'
|
|
304
|
-
|
|
324
|
+
ERROR
|
|
305
325
|
when '666'
|
|
306
|
-
|
|
326
|
+
CLIENT_DEACTIVATED
|
|
307
327
|
else
|
|
308
|
-
|
|
328
|
+
DECLINED
|
|
309
329
|
end
|
|
310
330
|
end
|
|
311
331
|
|