activemerchant 1.86.0 → 1.87.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -432,7 +432,7 @@ module ActiveMerchant #:nodoc:
|
|
432
432
|
def validate_signature(data)
|
433
433
|
if sha256_authentication?
|
434
434
|
sig = Base64.strict_encode64(mac256(get_key(data[:ds_order].to_s), xml_signed_fields(data)))
|
435
|
-
sig.
|
435
|
+
sig.casecmp(data[:ds_signature].to_s).zero?
|
436
436
|
else
|
437
437
|
str = data[:ds_amount] +
|
438
438
|
data[:ds_order].to_s +
|
@@ -523,7 +523,7 @@ module ActiveMerchant #:nodoc:
|
|
523
523
|
xml_signed_fields += data[:ds_cardnumber]
|
524
524
|
end
|
525
525
|
|
526
|
-
xml_signed_fields
|
526
|
+
xml_signed_fields + data[:ds_transactiontype] + data[:ds_securepayment]
|
527
527
|
end
|
528
528
|
|
529
529
|
def get_key(order_id)
|
@@ -252,8 +252,8 @@ module ActiveMerchant #:nodoc:
|
|
252
252
|
|
253
253
|
def underscore(camel_cased_word)
|
254
254
|
camel_cased_word.to_s.gsub(/::/, '/').
|
255
|
-
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
256
|
-
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
255
|
+
gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
|
256
|
+
gsub(/([a-z\d])([A-Z])/, '\1_\2').
|
257
257
|
tr('-', '_').
|
258
258
|
downcase
|
259
259
|
end
|
@@ -179,9 +179,9 @@ module ActiveMerchant #:nodoc:
|
|
179
179
|
|
180
180
|
def parse_check(data)
|
181
181
|
response = {}
|
182
|
-
response[:success] = data[1,1]
|
183
|
-
response[:code] = data[2,6].strip
|
184
|
-
response[:message] = data[8,32].strip
|
182
|
+
response[:success] = data[1, 1]
|
183
|
+
response[:code] = data[2, 6].strip
|
184
|
+
response[:message] = data[8, 32].strip
|
185
185
|
response[:risk] = data[40, 2]
|
186
186
|
response[:reference] = data[42, 10]
|
187
187
|
|
@@ -194,9 +194,9 @@ module ActiveMerchant #:nodoc:
|
|
194
194
|
|
195
195
|
def parse_credit_card(data)
|
196
196
|
response = {}
|
197
|
-
response[:success] = data[1,1]
|
198
|
-
response[:code] = data[2,6]
|
199
|
-
response[:message] = data[8,32].strip
|
197
|
+
response[:success] = data[1, 1]
|
198
|
+
response[:code] = data[2, 6]
|
199
|
+
response[:message] = data[8, 32].strip
|
200
200
|
response[:front_end] = data[40, 2]
|
201
201
|
response[:cvv_result] = data[42, 1]
|
202
202
|
response[:avs_result] = data[43, 1].strip
|
@@ -343,16 +343,16 @@ module ActiveMerchant #:nodoc:
|
|
343
343
|
end
|
344
344
|
|
345
345
|
def commit(action, parameters)
|
346
|
-
response = parse(
|
346
|
+
response = parse(ssl_post(url_for(action), post_data(action, parameters)))
|
347
347
|
|
348
348
|
Response.new(response['Status'] == APPROVED, message_from(response), response,
|
349
349
|
:test => test?,
|
350
350
|
:authorization => authorization_from(response, parameters, action),
|
351
351
|
:avs_result => {
|
352
|
-
:street_match => AVS_CODE[
|
353
|
-
:postal_match => AVS_CODE[
|
352
|
+
:street_match => AVS_CODE[response['AddressResult']],
|
353
|
+
:postal_match => AVS_CODE[response['PostCodeResult']],
|
354
354
|
},
|
355
|
-
:cvv_result => CVV_CODE[
|
355
|
+
:cvv_result => CVV_CODE[response['CV2Result']]
|
356
356
|
)
|
357
357
|
end
|
358
358
|
|
@@ -380,9 +380,9 @@ module ActiveMerchant #:nodoc:
|
|
380
380
|
|
381
381
|
def build_url(action)
|
382
382
|
endpoint = case action
|
383
|
-
|
384
|
-
|
385
|
-
|
383
|
+
when :purchase, :authorization then 'vspdirect-register'
|
384
|
+
when :store then 'directtoken'
|
385
|
+
else TRANSACTIONS[action].downcase
|
386
386
|
end
|
387
387
|
"#{test? ? self.test_url : self.live_url}/#{endpoint}.vsp"
|
388
388
|
end
|
@@ -247,7 +247,7 @@ module ActiveMerchant #:nodoc:
|
|
247
247
|
|
248
248
|
def recurring_parse_element(response, node)
|
249
249
|
if node.has_elements?
|
250
|
-
node.elements.each{|e| recurring_parse_element(response, e) }
|
250
|
+
node.elements.each { |e| recurring_parse_element(response, e) }
|
251
251
|
else
|
252
252
|
response[node.name.underscore.to_sym] = node.text
|
253
253
|
end
|
@@ -183,9 +183,9 @@ module ActiveMerchant #:nodoc:
|
|
183
183
|
|
184
184
|
def message_from(results)
|
185
185
|
if results[:response_code] == DECLINED
|
186
|
-
return CVVResult.messages[
|
186
|
+
return CVVResult.messages[results[:card_code]] if CARD_CODE_ERRORS.include?(results[:card_code])
|
187
187
|
if AVS_REASON_CODES.include?(results[:response_reason_code]) && AVS_ERRORS.include?(results[:avs_result_code])
|
188
|
-
return AVSResult.messages[
|
188
|
+
return AVSResult.messages[results[:avs_result_code]]
|
189
189
|
end
|
190
190
|
end
|
191
191
|
|
@@ -276,7 +276,7 @@ module ActiveMerchant #:nodoc:
|
|
276
276
|
|
277
277
|
def parse_element(response, node)
|
278
278
|
if node.has_elements?
|
279
|
-
node.elements.each{|element| parse_element(response, element) }
|
279
|
+
node.elements.each { |element| parse_element(response, element) }
|
280
280
|
else
|
281
281
|
response[node.name.underscore.to_sym] = node.text
|
282
282
|
end
|
@@ -82,7 +82,7 @@ module ActiveMerchant #:nodoc:
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def commit(action, post)
|
85
|
-
response = parse(
|
85
|
+
response = parse(ssl_post(self.live_url, post_data(action, post)))
|
86
86
|
|
87
87
|
Response.new(response[:result_code] == 1, message_from(response), response,
|
88
88
|
:test => test?,
|
@@ -1,4 +1,3 @@
|
|
1
|
-
#!ruby19
|
2
1
|
# encoding: utf-8
|
3
2
|
|
4
3
|
module ActiveMerchant #:nodoc:
|
@@ -261,7 +260,7 @@ module ActiveMerchant #:nodoc:
|
|
261
260
|
end
|
262
261
|
|
263
262
|
def commit(action, money, parameters)
|
264
|
-
response = parse(
|
263
|
+
response = parse(ssl_post(url_for(action), post_data(action, money, parameters)), action)
|
265
264
|
|
266
265
|
# Pass along the original transaction id in the case an update transaction
|
267
266
|
Response.new(response[:success], message_from(response, action), response,
|
@@ -275,7 +274,7 @@ module ActiveMerchant #:nodoc:
|
|
275
274
|
def url_for(action)
|
276
275
|
result = test? ? self.test_url : self.live_url
|
277
276
|
result += advanced? && action == :authorization ? ADVANCED_PATH : BASIC_PATH
|
278
|
-
result
|
277
|
+
result + "?#{ACTIONS[action]}"
|
279
278
|
end
|
280
279
|
|
281
280
|
def add_credentials(params, action)
|
@@ -354,8 +353,8 @@ module ActiveMerchant #:nodoc:
|
|
354
353
|
def post_data(action, money, params = {})
|
355
354
|
add_credentials(params, action)
|
356
355
|
add_amount(params, action, money)
|
357
|
-
sorted_params = params.to_a.
|
358
|
-
sorted_params.collect { |key, value| "#{key
|
356
|
+
sorted_params = params.to_a.sort_by(&:to_s).reverse
|
357
|
+
sorted_params.collect { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join('&')
|
359
358
|
end
|
360
359
|
|
361
360
|
def add_transaction_id(post, transaction_id)
|
@@ -369,7 +368,7 @@ module ActiveMerchant #:nodoc:
|
|
369
368
|
post[:OrderDescription] = options[:description]
|
370
369
|
|
371
370
|
if order_items = options[:items]
|
372
|
-
post[:OrderString] = order_items.collect { |item| "#{item[:sku]}~#{item[:description].tr('~','-')}~#{item[:declared_value]}~#{item[:quantity]}~#{item[:taxable]}~~~~~~~~#{item[:tax_rate]}~||"}.join
|
371
|
+
post[:OrderString] = order_items.collect { |item| "#{item[:sku]}~#{item[:description].tr('~', '-')}~#{item[:declared_value]}~#{item[:quantity]}~#{item[:taxable]}~~~~~~~~#{item[:tax_rate]}~||" }.join
|
373
372
|
else
|
374
373
|
post[:OrderString] = '1~None~0.00~0~N~||'
|
375
374
|
end
|
@@ -23,7 +23,7 @@ module ActiveMerchant #:nodoc:
|
|
23
23
|
def authorize(money, creditcard, options = {})
|
24
24
|
post = {}
|
25
25
|
add_invoice(post, options)
|
26
|
-
add_payment_source(post, creditcard,options)
|
26
|
+
add_payment_source(post, creditcard, options)
|
27
27
|
add_address(post, options[:billing_address] || options[:address])
|
28
28
|
add_address(post, options[:shipping_address], 'shipping')
|
29
29
|
add_customer_data(post, options)
|
@@ -65,7 +65,7 @@ module ActiveMerchant #:nodoc:
|
|
65
65
|
add_payment_source(post, payment_source, options)
|
66
66
|
add_address(post, options[:billing_address] || options[:address])
|
67
67
|
add_customer_data(post, options)
|
68
|
-
add_sku(post,options)
|
68
|
+
add_sku(post, options)
|
69
69
|
add_currency(post, money, options)
|
70
70
|
add_processor(post, options)
|
71
71
|
commit('credit', money, post)
|
@@ -138,7 +138,7 @@ module ActiveMerchant #:nodoc:
|
|
138
138
|
end
|
139
139
|
end
|
140
140
|
|
141
|
-
def add_address(post, address,prefix='')
|
141
|
+
def add_address(post, address, prefix='')
|
142
142
|
prefix +='_' unless prefix.blank?
|
143
143
|
unless address.blank? or address.values.blank?
|
144
144
|
post[prefix+'address1'] = address[:address1].to_s
|
@@ -206,7 +206,7 @@ module ActiveMerchant #:nodoc:
|
|
206
206
|
post[:account_type] = check.account_type # The customer's type of ACH account
|
207
207
|
end
|
208
208
|
|
209
|
-
def add_sku(post,options)
|
209
|
+
def add_sku(post, options)
|
210
210
|
post['product_sku_#'] = options[:sku] || options['product_sku_#']
|
211
211
|
end
|
212
212
|
|
@@ -221,7 +221,7 @@ module ActiveMerchant #:nodoc:
|
|
221
221
|
def parse(body)
|
222
222
|
results = {}
|
223
223
|
body.split(/&/).each do |pair|
|
224
|
-
key,val = pair.split(/=/)
|
224
|
+
key, val = pair.split(/=/)
|
225
225
|
results[key] = val
|
226
226
|
end
|
227
227
|
|
@@ -230,7 +230,7 @@ module ActiveMerchant #:nodoc:
|
|
230
230
|
|
231
231
|
def commit(action, money, parameters)
|
232
232
|
parameters[:amount] = localized_amount(money, parameters[:currency] || default_currency) if money
|
233
|
-
response = parse(
|
233
|
+
response = parse(ssl_post(self.live_url, post_data(action, parameters)))
|
234
234
|
Response.new(response['response'] == '1', message_from(response), response,
|
235
235
|
:authorization => (response['transactionid'] || response['customer_vault_id']),
|
236
236
|
:test => test?,
|
@@ -263,7 +263,7 @@ module ActiveMerchant #:nodoc:
|
|
263
263
|
post[:password] = @options[:password]
|
264
264
|
post[:type] = action if action
|
265
265
|
|
266
|
-
request = post.merge(parameters).map {|key,value| "#{key}=#{CGI.escape(value.to_s)}"}.join('&')
|
266
|
+
request = post.merge(parameters).map { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join('&')
|
267
267
|
request
|
268
268
|
end
|
269
269
|
|
@@ -114,7 +114,7 @@ module ActiveMerchant #:nodoc:
|
|
114
114
|
def fill_cardholder(soap, card, options)
|
115
115
|
ch_info = options[:billing_address] || options[:address]
|
116
116
|
|
117
|
-
soap.tag!('customerIP',options[:ip].to_s)
|
117
|
+
soap.tag!('customerIP', options[:ip].to_s)
|
118
118
|
name = card.name || ch_info[:name]
|
119
119
|
soap.tag!('cardHolderName', name.to_s)
|
120
120
|
address = ch_info[:address1] || ''
|
@@ -177,7 +177,7 @@ module ActiveMerchant #:nodoc:
|
|
177
177
|
|
178
178
|
post = {}
|
179
179
|
add_amount(post, money, options)
|
180
|
-
options
|
180
|
+
options[:key] = @fee_refund_api_key if @fee_refund_api_key
|
181
181
|
options.delete(:stripe_account)
|
182
182
|
|
183
183
|
refund_fee = commit(:post, "application_fees/#{CGI.escape(identification)}/refunds", post, options)
|
@@ -474,7 +474,7 @@ module ActiveMerchant #:nodoc:
|
|
474
474
|
|
475
475
|
def add_flags(post, options)
|
476
476
|
post[:uncaptured] = true if options[:uncaptured]
|
477
|
-
post[:recurring] = true if
|
477
|
+
post[:recurring] = true if options[:eci] == 'recurring' || options[:recurring]
|
478
478
|
end
|
479
479
|
|
480
480
|
def add_metadata(post, options = {})
|
@@ -491,7 +491,7 @@ module ActiveMerchant #:nodoc:
|
|
491
491
|
end
|
492
492
|
|
493
493
|
def fetch_application_fee(identification, options = {})
|
494
|
-
options
|
494
|
+
options[:key] = @fee_refund_api_key
|
495
495
|
|
496
496
|
fetch_charge = commit(:get, "charges/#{CGI.escape(identification)}", nil, options)
|
497
497
|
application_fee_response!(fetch_charge, "Application fee id could not be retrieved: #{fetch_charge.message}")
|
@@ -549,8 +549,8 @@ module ActiveMerchant #:nodoc:
|
|
549
549
|
'X-Stripe-Client-User-Agent' => stripe_client_user_agent(options),
|
550
550
|
'X-Stripe-Client-User-Metadata' => {:ip => options[:ip]}.to_json
|
551
551
|
}
|
552
|
-
headers
|
553
|
-
headers
|
552
|
+
headers['Idempotency-Key'] = idempotency_key if idempotency_key
|
553
|
+
headers['Stripe-Account'] = options[:stripe_account] if options[:stripe_account]
|
554
554
|
headers
|
555
555
|
end
|
556
556
|
|
@@ -117,8 +117,8 @@ module ActiveMerchant #:nodoc:
|
|
117
117
|
rescue ResponseError => e
|
118
118
|
build_error_response("ssl_post() with url #{url} raised ResponseError: #{e}")
|
119
119
|
rescue JSON::ParserError => e
|
120
|
-
msg = 'Invalid response received from the Swipe Checkout API. '
|
121
|
-
'Please contact support@optimizerhq.com if you continue to receive this message.'
|
120
|
+
msg = 'Invalid response received from the Swipe Checkout API. ' \
|
121
|
+
'Please contact support@optimizerhq.com if you continue to receive this message.' \
|
122
122
|
" (Full error message: #{e})"
|
123
123
|
build_error_response(msg)
|
124
124
|
end
|
@@ -215,7 +215,7 @@ module ActiveMerchant #:nodoc:
|
|
215
215
|
|
216
216
|
doc = Nokogiri::XML(xml)
|
217
217
|
doc.root&.xpath('*')&.each do |node|
|
218
|
-
if
|
218
|
+
if node.elements.size == 0
|
219
219
|
response[node.name.downcase.to_sym] = node.text
|
220
220
|
else
|
221
221
|
node.elements.each do |childnode|
|
@@ -321,7 +321,7 @@ module ActiveMerchant #:nodoc:
|
|
321
321
|
|
322
322
|
private
|
323
323
|
|
324
|
-
CURRENCY_CODES = Hash.new{|h,k| raise ArgumentError.new("Unsupported currency: #{k}")}
|
324
|
+
CURRENCY_CODES = Hash.new { |h, k| raise ArgumentError.new("Unsupported currency: #{k}") }
|
325
325
|
CURRENCY_CODES['USD'] = '840'
|
326
326
|
|
327
327
|
def headers
|
@@ -539,7 +539,7 @@ module ActiveMerchant #:nodoc:
|
|
539
539
|
if (billing_address = options[:billing_address])
|
540
540
|
if billing_address[:phone]
|
541
541
|
doc['v1'].phone do
|
542
|
-
doc['v1'].type
|
542
|
+
doc['v1'].type(options[:phone_number_type] || '4')
|
543
543
|
doc['v1'].nr billing_address[:phone].gsub(/\D/, '')
|
544
544
|
end
|
545
545
|
end
|
@@ -32,7 +32,7 @@ module ActiveMerchant #:nodoc:
|
|
32
32
|
post[:rs] = @options[:terminal]
|
33
33
|
|
34
34
|
MultiResponse.run do |r|
|
35
|
-
r.process{commit('init', post)}
|
35
|
+
r.process { commit('init', post) }
|
36
36
|
r.process do
|
37
37
|
post = PostData.new
|
38
38
|
post[:init_transaction_id] = r.authorization
|
@@ -54,7 +54,7 @@ module ActiveMerchant #:nodoc:
|
|
54
54
|
post[:rs] = @options[:terminal]
|
55
55
|
|
56
56
|
MultiResponse.run do |r|
|
57
|
-
r.process{commit('init_dms', post)}
|
57
|
+
r.process { commit('init_dms', post) }
|
58
58
|
r.process do
|
59
59
|
post = PostData.new
|
60
60
|
post[:init_transaction_id] = r.authorization
|
@@ -165,7 +165,7 @@ module ActiveMerchant #:nodoc:
|
|
165
165
|
|
166
166
|
def parse(body)
|
167
167
|
if body =~ /^ID:/
|
168
|
-
body.split('~').reduce(Hash.new) { |h,v|
|
168
|
+
body.split('~').reduce(Hash.new) { |h, v|
|
169
169
|
m = v.match('(.*?):(.*)')
|
170
170
|
h.merge!(m[1].underscore.to_sym => m[2])
|
171
171
|
}
|
@@ -174,13 +174,13 @@ module ActiveMerchant #:nodoc:
|
|
174
174
|
{ status: 'success', id: m[2] } :
|
175
175
|
{ status: 'failure', message: m[2] }
|
176
176
|
else
|
177
|
-
Hash[
|
177
|
+
Hash[status: body]
|
178
178
|
end
|
179
179
|
end
|
180
180
|
|
181
181
|
def commit(action, parameters, amount=nil)
|
182
182
|
url = (test? ? test_url : live_url)
|
183
|
-
response = parse(ssl_post(url, post_data(action,parameters)))
|
183
|
+
response = parse(ssl_post(url, post_data(action, parameters)))
|
184
184
|
|
185
185
|
Response.new(
|
186
186
|
success_from(response),
|
@@ -237,7 +237,7 @@ module ActiveMerchant #:nodoc:
|
|
237
237
|
def recurring(money, creditcard, options = {})
|
238
238
|
ActiveMerchant.deprecated RECURRING_DEPRECATION_MESSAGE
|
239
239
|
|
240
|
-
requires!(options, [:periodicity, :bimonthly, :monthly, :biweekly, :weekly, :yearly, :daily]
|
240
|
+
requires!(options, [:periodicity, :bimonthly, :monthly, :biweekly, :weekly, :yearly, :daily])
|
241
241
|
|
242
242
|
cycle = case options[:periodicity]
|
243
243
|
when :monthly
|
@@ -362,7 +362,7 @@ module ActiveMerchant #:nodoc:
|
|
362
362
|
# TCLink wants us to send a hash with string keys, and activemerchant pushes everything around with
|
363
363
|
# symbol keys. Before sending our input to TCLink, we convert all our keys to strings and dump the symbol keys.
|
364
364
|
# We also remove any pairs with nil values, as these confuse TCLink.
|
365
|
-
parameters.keys.
|
365
|
+
parameters.keys.reverse_each do |key|
|
366
366
|
if parameters[key]
|
367
367
|
parameters[key.to_s] = parameters[key]
|
368
368
|
end
|
@@ -371,7 +371,7 @@ module ActiveMerchant #:nodoc:
|
|
371
371
|
end
|
372
372
|
|
373
373
|
def post_data(parameters)
|
374
|
-
parameters.collect { |key, value| "#{key}=#{
|
374
|
+
parameters.collect { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join('&')
|
375
375
|
end
|
376
376
|
|
377
377
|
def commit(action, parameters)
|
@@ -383,9 +383,9 @@ module ActiveMerchant #:nodoc:
|
|
383
383
|
clean_and_stringify_params(parameters)
|
384
384
|
|
385
385
|
data = if tclink?
|
386
|
-
|
387
|
-
|
388
|
-
|
386
|
+
TCLink.send(parameters)
|
387
|
+
else
|
388
|
+
parse(ssl_post(self.live_url, post_data(parameters)))
|
389
389
|
end
|
390
390
|
|
391
391
|
# to be considered successful, transaction status must be either "approved" or "accepted"
|
@@ -403,7 +403,7 @@ module ActiveMerchant #:nodoc:
|
|
403
403
|
results = {}
|
404
404
|
|
405
405
|
body.split(/\n/).each do |pair|
|
406
|
-
key,val = pair.split(/=/)
|
406
|
+
key, val = pair.split(/=/)
|
407
407
|
results[key] = val
|
408
408
|
end
|
409
409
|
|
@@ -272,8 +272,8 @@ module ActiveMerchant #:nodoc:
|
|
272
272
|
requires!(options, :login, :password)
|
273
273
|
|
274
274
|
if options[:software_id]
|
275
|
-
self.live_url = "#{LIVE_URL_BASE}#{options[:software_id]
|
276
|
-
self.test_url = "#{TEST_URL_BASE}#{options[:software_id]
|
275
|
+
self.live_url = "#{LIVE_URL_BASE}#{options[:software_id]}"
|
276
|
+
self.test_url = "#{TEST_URL_BASE}#{options[:software_id]}"
|
277
277
|
else
|
278
278
|
self.live_url = options[:live_url].to_s
|
279
279
|
self.test_url = options[:test_url].to_s if options[:test_url]
|
@@ -1297,7 +1297,7 @@ module ActiveMerchant #:nodoc:
|
|
1297
1297
|
|
1298
1298
|
def build_customer_data(soap, options)
|
1299
1299
|
soap.CustomerData 'xsi:type' => 'ns1:CustomerObject' do
|
1300
|
-
CUSTOMER_OPTIONS.each do |k,v|
|
1300
|
+
CUSTOMER_OPTIONS.each do |k, v|
|
1301
1301
|
build_tag soap, v[0], v[1], options[k]
|
1302
1302
|
end
|
1303
1303
|
build_billing_address soap, options
|
@@ -1370,7 +1370,7 @@ module ActiveMerchant #:nodoc:
|
|
1370
1370
|
def build_customer_transaction(soap, options)
|
1371
1371
|
soap.Parameters 'xsi:type' => 'ns1:CustomerTransactionRequest' do
|
1372
1372
|
build_transaction_detail soap, options
|
1373
|
-
CUSTOMER_TRANSACTION_REQUEST_OPTIONS.each do |k,v|
|
1373
|
+
CUSTOMER_TRANSACTION_REQUEST_OPTIONS.each do |k, v|
|
1374
1374
|
build_tag soap, v[0], v[1], options[k]
|
1375
1375
|
end
|
1376
1376
|
build_custom_fields soap, options
|
@@ -1382,11 +1382,12 @@ module ActiveMerchant #:nodoc:
|
|
1382
1382
|
|
1383
1383
|
def build_transaction_request_object(soap, options, name='Params')
|
1384
1384
|
soap.tag! name, 'xsi:type' => 'ns1:TransactionRequestObject' do
|
1385
|
-
TRANSACTION_REQUEST_OBJECT_OPTIONS.each do |k,v|
|
1385
|
+
TRANSACTION_REQUEST_OBJECT_OPTIONS.each do |k, v|
|
1386
1386
|
build_tag soap, v[0], v[1], options[k]
|
1387
1387
|
end
|
1388
1388
|
case
|
1389
|
-
when options[:payment_method]
|
1389
|
+
when options[:payment_method].nil?
|
1390
|
+
nil
|
1390
1391
|
when options[:payment_method].kind_of?(ActiveMerchant::Billing::CreditCard)
|
1391
1392
|
build_credit_card_data soap, options
|
1392
1393
|
when options[:payment_method].kind_of?(ActiveMerchant::Billing::Check)
|
@@ -1405,10 +1406,10 @@ module ActiveMerchant #:nodoc:
|
|
1405
1406
|
|
1406
1407
|
def build_transaction_detail(soap, options)
|
1407
1408
|
soap.Details 'xsi:type' => 'ns1:TransactionDetail' do
|
1408
|
-
TRANSACTION_DETAIL_OPTIONS.each do |k,v|
|
1409
|
+
TRANSACTION_DETAIL_OPTIONS.each do |k, v|
|
1409
1410
|
build_tag soap, v[0], v[1], options[k]
|
1410
1411
|
end
|
1411
|
-
TRANSACTION_DETAIL_MONEY_OPTIONS.each do |k,v|
|
1412
|
+
TRANSACTION_DETAIL_MONEY_OPTIONS.each do |k, v|
|
1412
1413
|
build_tag soap, v[0], v[1], amount(options[k])
|
1413
1414
|
end
|
1414
1415
|
end
|
@@ -1424,7 +1425,7 @@ module ActiveMerchant #:nodoc:
|
|
1424
1425
|
end
|
1425
1426
|
build_tag soap, :string, 'CardCode', options[:payment_method].verification_value
|
1426
1427
|
build_tag soap, :boolean, 'CardPresent', options[:card_present] || false
|
1427
|
-
CREDIT_CARD_DATA_OPTIONS.each do |k,v|
|
1428
|
+
CREDIT_CARD_DATA_OPTIONS.each do |k, v|
|
1428
1429
|
build_tag soap, v[0], v[1], options[k]
|
1429
1430
|
end
|
1430
1431
|
end
|
@@ -1444,7 +1445,7 @@ module ActiveMerchant #:nodoc:
|
|
1444
1445
|
build_tag soap, :string, 'Account', options[:payment_method].account_number
|
1445
1446
|
build_tag soap, :string, 'Routing', options[:payment_method].routing_number
|
1446
1447
|
build_tag soap, :string, 'AccountType', options[:payment_method].account_type.capitalize
|
1447
|
-
CHECK_DATA_OPTIONS.each do |k,v|
|
1448
|
+
CHECK_DATA_OPTIONS.each do |k, v|
|
1448
1449
|
build_tag soap, v[0], v[1], options[k]
|
1449
1450
|
end
|
1450
1451
|
end
|
@@ -1456,7 +1457,7 @@ module ActiveMerchant #:nodoc:
|
|
1456
1457
|
build_tag soap, :double, 'Amount', amount(options[:recurring][:amount])
|
1457
1458
|
build_tag soap, :string, 'Next', options[:recurring][:next].strftime('%Y-%m-%d') if options[:recurring][:next]
|
1458
1459
|
build_tag soap, :string, 'Expire', options[:recurring][:expire].strftime('%Y-%m-%d') if options[:recurring][:expire]
|
1459
|
-
RECURRING_BILLING_OPTIONS.each do |k,v|
|
1460
|
+
RECURRING_BILLING_OPTIONS.each do |k, v|
|
1460
1461
|
build_tag soap, v[0], v[1], options[:recurring][k]
|
1461
1462
|
end
|
1462
1463
|
end
|
@@ -1479,7 +1480,7 @@ module ActiveMerchant #:nodoc:
|
|
1479
1480
|
options[:billing_address][:first_name], options[:billing_address][:last_name] = split_names(options[:billing_address][:name])
|
1480
1481
|
end
|
1481
1482
|
soap.BillingAddress 'xsi:type' => 'ns1:Address' do
|
1482
|
-
ADDRESS_OPTIONS.each do |k,v|
|
1483
|
+
ADDRESS_OPTIONS.each do |k, v|
|
1483
1484
|
build_tag soap, v[0], v[1], options[:billing_address][k]
|
1484
1485
|
end
|
1485
1486
|
end
|
@@ -1492,7 +1493,7 @@ module ActiveMerchant #:nodoc:
|
|
1492
1493
|
options[:shipping_address][:first_name], options[:shipping_address][:last_name] = split_names(options[:shipping_address][:name])
|
1493
1494
|
end
|
1494
1495
|
soap.ShippingAddress 'xsi:type' => 'ns1:Address' do
|
1495
|
-
ADDRESS_OPTIONS.each do |k,v|
|
1496
|
+
ADDRESS_OPTIONS.each do |k, v|
|
1496
1497
|
build_tag soap, v[0], v[1], options[:shipping_address][k]
|
1497
1498
|
end
|
1498
1499
|
end
|
@@ -1502,7 +1503,7 @@ module ActiveMerchant #:nodoc:
|
|
1502
1503
|
def build_field_value_array(soap, tag_name, type, custom_data, fields)
|
1503
1504
|
soap.tag! tag_name, 'SOAP-ENC:arryType' => "xsd:#{type}[#{options.length}]", 'xsi:type' => "ns1:#{type}Array" do
|
1504
1505
|
custom_data.each do |k, v|
|
1505
|
-
build_field_value soap, fields[k][1], v, fields[k][0] if fields.
|
1506
|
+
build_field_value soap, fields[k][1], v, fields[k][0] if fields.key?(k)
|
1506
1507
|
end
|
1507
1508
|
end
|
1508
1509
|
end
|
@@ -1537,7 +1538,7 @@ module ActiveMerchant #:nodoc:
|
|
1537
1538
|
def build_response(action, soap)
|
1538
1539
|
response_params, success, message, authorization, avs, cvv = parse(action, soap)
|
1539
1540
|
|
1540
|
-
response_params
|
1541
|
+
response_params['soap_response'] = soap if @options[:soap_response]
|
1541
1542
|
|
1542
1543
|
Response.new(
|
1543
1544
|
success,
|
@@ -1552,7 +1553,7 @@ module ActiveMerchant #:nodoc:
|
|
1552
1553
|
|
1553
1554
|
def avs_from(avs)
|
1554
1555
|
avs_params = { :code => avs }
|
1555
|
-
avs_params
|
1556
|
+
avs_params[:message] = AVS_CUSTOM_MESSAGES[avs] if AVS_CUSTOM_MESSAGES.key?(avs)
|
1556
1557
|
avs_params
|
1557
1558
|
end
|
1558
1559
|
|