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
|
@@ -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
|
|