activemerchant 1.85.0 → 1.86.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +15 -3
- data/lib/active_merchant/billing/avs_result.rb +12 -12
- data/lib/active_merchant/billing/compatibility.rb +1 -2
- data/lib/active_merchant/billing/gateways/adyen.rb +1 -1
- data/lib/active_merchant/billing/gateways/authorize_net.rb +12 -0
- data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +1 -2
- data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +45 -22
- data/lib/active_merchant/billing/gateways/beanstream.rb +2 -2
- data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +4 -6
- data/lib/active_merchant/billing/gateways/beanstream_interac.rb +0 -1
- data/lib/active_merchant/billing/gateways/blue_pay.rb +1 -1
- data/lib/active_merchant/billing/gateways/braintree_blue.rb +6 -4
- data/lib/active_merchant/billing/gateways/bridge_pay.rb +3 -3
- data/lib/active_merchant/billing/gateways/card_connect.rb +6 -6
- data/lib/active_merchant/billing/gateways/card_save.rb +5 -6
- data/lib/active_merchant/billing/gateways/cardprocess.rb +4 -4
- data/lib/active_merchant/billing/gateways/cashnet.rb +4 -4
- data/lib/active_merchant/billing/gateways/cecabank.rb +1 -1
- data/lib/active_merchant/billing/gateways/checkout.rb +8 -8
- data/lib/active_merchant/billing/gateways/citrus_pay.rb +0 -1
- data/lib/active_merchant/billing/gateways/creditcall.rb +3 -3
- data/lib/active_merchant/billing/gateways/credorax.rb +1 -1
- data/lib/active_merchant/billing/gateways/ct_payment.rb +1 -1
- data/lib/active_merchant/billing/gateways/cyber_source.rb +5 -5
- data/lib/active_merchant/billing/gateways/efsnet.rb +9 -9
- data/lib/active_merchant/billing/gateways/elavon.rb +3 -5
- data/lib/active_merchant/billing/gateways/eway_managed.rb +1 -1
- data/lib/active_merchant/billing/gateways/exact.rb +0 -1
- data/lib/active_merchant/billing/gateways/federated_canada.rb +0 -1
- data/lib/active_merchant/billing/gateways/finansbank.rb +0 -1
- data/lib/active_merchant/billing/gateways/first_giving.rb +0 -1
- data/lib/active_merchant/billing/gateways/first_pay.rb +3 -3
- data/lib/active_merchant/billing/gateways/firstdata_e4.rb +7 -7
- data/lib/active_merchant/billing/gateways/firstdata_e4_v27.rb +6 -6
- data/lib/active_merchant/billing/gateways/garanti.rb +0 -1
- data/lib/active_merchant/billing/gateways/global_collect.rb +21 -6
- data/lib/active_merchant/billing/gateways/hdfc.rb +0 -1
- data/lib/active_merchant/billing/gateways/hps.rb +1 -1
- data/lib/active_merchant/billing/gateways/inspire.rb +0 -1
- data/lib/active_merchant/billing/gateways/instapay.rb +1 -2
- data/lib/active_merchant/billing/gateways/itransact.rb +0 -1
- data/lib/active_merchant/billing/gateways/jetpay.rb +1 -1
- data/lib/active_merchant/billing/gateways/jetpay_v2.rb +1 -1
- data/lib/active_merchant/billing/gateways/linkpoint.rb +3 -3
- data/lib/active_merchant/billing/gateways/litle.rb +1 -1
- data/lib/active_merchant/billing/gateways/mercado_pago.rb +7 -1
- data/lib/active_merchant/billing/gateways/merchant_one.rb +0 -1
- data/lib/active_merchant/billing/gateways/mercury.rb +1 -1
- data/lib/active_merchant/billing/gateways/migs.rb +5 -5
- data/lib/active_merchant/billing/gateways/modern_payments.rb +0 -1
- data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +0 -1
- data/lib/active_merchant/billing/gateways/money_movers.rb +0 -1
- data/lib/active_merchant/billing/gateways/mundipagg.rb +4 -4
- data/lib/active_merchant/billing/gateways/nab_transact.rb +8 -8
- data/lib/active_merchant/billing/gateways/net_registry.rb +1 -1
- data/lib/active_merchant/billing/gateways/netaxept.rb +0 -1
- data/lib/active_merchant/billing/gateways/netbanx.rb +4 -3
- data/lib/active_merchant/billing/gateways/netpay.rb +0 -1
- data/lib/active_merchant/billing/gateways/network_merchants.rb +0 -1
- data/lib/active_merchant/billing/gateways/omise.rb +1 -1
- data/lib/active_merchant/billing/gateways/opp.rb +0 -1
- data/lib/active_merchant/billing/gateways/optimal_payment.rb +20 -20
- data/lib/active_merchant/billing/gateways/orbital.rb +1 -1
- data/lib/active_merchant/billing/gateways/pac_net_raven.rb +0 -1
- data/lib/active_merchant/billing/gateways/pagarme.rb +1 -1
- data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +1 -1
- data/lib/active_merchant/billing/gateways/pay_junction_v2.rb +1 -1
- data/lib/active_merchant/billing/gateways/pay_secure.rb +0 -1
- data/lib/active_merchant/billing/gateways/payeezy.rb +1 -1
- data/lib/active_merchant/billing/gateways/payex.rb +2 -3
- data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +5 -1
- data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +2 -2
- data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +0 -1
- data/lib/active_merchant/billing/gateways/payflow_uk.rb +0 -1
- data/lib/active_merchant/billing/gateways/payment_express.rb +1 -1
- data/lib/active_merchant/billing/gateways/paymentez.rb +4 -4
- data/lib/active_merchant/billing/gateways/payscout.rb +1 -2
- data/lib/active_merchant/billing/gateways/psigate.rb +1 -1
- data/lib/active_merchant/billing/gateways/psl_card.rb +6 -6
- data/lib/active_merchant/billing/gateways/quickbooks.rb +2 -2
- data/lib/active_merchant/billing/gateways/quickpay.rb +0 -1
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_common.rb +7 -8
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_v4to7.rb +1 -2
- data/lib/active_merchant/billing/gateways/s5.rb +1 -1
- data/lib/active_merchant/billing/gateways/sage_pay.rb +5 -5
- data/lib/active_merchant/billing/gateways/sallie_mae.rb +0 -1
- data/lib/active_merchant/billing/gateways/secure_pay.rb +0 -1
- data/lib/active_merchant/billing/gateways/secure_pay_au.rb +0 -1
- data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +0 -1
- data/lib/active_merchant/billing/gateways/securion_pay.rb +5 -5
- data/lib/active_merchant/billing/gateways/smart_ps.rb +0 -1
- data/lib/active_merchant/billing/gateways/stripe.rb +1 -1
- data/lib/active_merchant/billing/gateways/swipe_checkout.rb +4 -8
- data/lib/active_merchant/billing/gateways/telr.rb +2 -2
- data/lib/active_merchant/billing/gateways/transax.rb +4 -5
- data/lib/active_merchant/billing/gateways/transnational.rb +0 -1
- data/lib/active_merchant/billing/gateways/trexle.rb +6 -6
- data/lib/active_merchant/billing/gateways/trust_commerce.rb +5 -5
- data/lib/active_merchant/billing/gateways/usa_epay.rb +1 -1
- data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +1 -1
- data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +3 -2
- data/lib/active_merchant/billing/gateways/world_net.rb +3 -3
- data/lib/active_merchant/billing/gateways/worldpay_online_payments.rb +15 -15
- data/lib/active_merchant/connection.rb +2 -2
- data/lib/active_merchant/network_connection_retries.rb +1 -1
- data/lib/active_merchant/posts_data.rb +2 -2
- data/lib/active_merchant/version.rb +1 -1
- data/lib/activemerchant.rb +1 -1
- data/lib/support/gateway_support.rb +0 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8651e675cc5726ec8424c3023a81307c0d03f66b
|
4
|
+
data.tar.gz: cc00a987adb4cbcd89ac106d07e8cd86d7046052
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 53533aee5d0cb713eb89cdf53ac2d7e71f5ffa0e0ff46a06a6d69effd36e54f76f7f4e18acda564b7392963c586388e55df8e8fdf8f65bb36d090917b3d32df5
|
7
|
+
data.tar.gz: 815a578f9421bb5b5c316c9ee79bf8043dd20cea4fabf8e19885587bf07b9418d2944b218b121b32cbc6ac481a52635ae2c22e6e66a7399b77e1cef90789f117
|
data/CHANGELOG
CHANGED
@@ -1,12 +1,24 @@
|
|
1
1
|
= ActiveMerchant CHANGELOG
|
2
2
|
|
3
3
|
== HEAD
|
4
|
+
== Version 1.86.0 (October 26, 2018)
|
5
|
+
* UsaEpayTransaction: Support UMcheckformat option for echecks [dtykocki] #3002
|
6
|
+
* Global Collect: handle internal server errors [molbrown] #3005
|
7
|
+
* Barclaycard Smartpay: allow third-party payouts for credits [bpollack] #3009
|
8
|
+
* RuboCop: AlignHash [nfarve] #3004
|
9
|
+
* Beanstream: Switch `recurringPayment` flag from boolean to integer [dtykocki] #3011
|
10
|
+
* Update Swipe HQ endpoint [bdewater] #3013
|
11
|
+
* Braintree: Adds device_data [deedeelavinder] #3012
|
12
|
+
* Payflow Express: Add phone to returned Response [filipebarcos] #3003
|
13
|
+
* Authorize.Net: Pass some level 3 fields [curiousepic] #3022
|
14
|
+
* Add state to the netbanx payload [Girardvjonathan] #3024
|
15
|
+
|
4
16
|
== Version 1.85.0 (September 28, 2018)
|
5
|
-
* Authorize.Net: Support custom delimiter for cim [curiousepic]
|
17
|
+
* Authorize.Net: Support custom delimiter for cim [curiousepic] #3001
|
6
18
|
|
7
19
|
== Version 1.84.0 (September 27, 2018)
|
8
20
|
* PayU Latam: support partial captures [bpollack] #2974
|
9
|
-
* Braintree: Reflect correct test mode in Braintree responses [elfassy]
|
21
|
+
* Braintree: Reflect correct test mode in Braintree responses [elfassy] #2980
|
10
22
|
* FirstPay: Expose error code [curiousepic] #2979
|
11
23
|
* Barclaycard Smartpay: Pass device_fingerprint when specified [dtykocki] #2981
|
12
24
|
* Komoju: remove no-longer-relevant sandbox URL [miyazawadegica] #2987
|
@@ -32,7 +44,7 @@
|
|
32
44
|
* Gateway generator: fix a typo that would cause the script to crash [bpollack] #2962
|
33
45
|
* Clearhaus: use $0 for verify transactions [bpollack] #2964
|
34
46
|
* Global Collect: properly handle partial captures [bpollack] #2967
|
35
|
-
* Braintree: Add support for GooglePay [dtykocki]
|
47
|
+
* Braintree: Add support for GooglePay [dtykocki] #2966
|
36
48
|
* Adyen: allow overriding card brands [bpollack] #2968
|
37
49
|
* Adyen: allow custom routing [bpollack] #2969
|
38
50
|
* First Pay: Adds scrubbing [deedeelavinder] #2972
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# encoding: utf-8
|
3
3
|
|
4
4
|
module ActiveMerchant
|
5
|
-
module Billing
|
5
|
+
module Billing
|
6
6
|
# Implements the Address Verification System
|
7
7
|
# https://www.wellsfargo.com/downloads/pdf/biz/merchant/visa_avs.pdf
|
8
8
|
# http://en.wikipedia.org/wiki/Address_Verification_System
|
@@ -38,7 +38,7 @@ module ActiveMerchant
|
|
38
38
|
'Y' => 'Street address and 5-digit postal code match.',
|
39
39
|
'Z' => 'Street address does not match, but 5-digit postal code matches.'
|
40
40
|
}
|
41
|
-
|
41
|
+
|
42
42
|
# Map vendor's AVS result code to a postal match code
|
43
43
|
POSTAL_MATCH_CODE = {
|
44
44
|
'Y' => %w( D H F H J L M P Q V W X Y Z ),
|
@@ -49,7 +49,7 @@ module ActiveMerchant
|
|
49
49
|
codes.each { |code| map[code] = type }
|
50
50
|
map
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
# Map vendor's AVS result code to a street match code
|
54
54
|
STREET_MATCH_CODE = {
|
55
55
|
'Y' => %w( A B D H J M O Q T V X Y ),
|
@@ -60,32 +60,32 @@ module ActiveMerchant
|
|
60
60
|
codes.each { |code| map[code] = type }
|
61
61
|
map
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
attr_reader :code, :message, :street_match, :postal_match
|
65
|
-
|
65
|
+
|
66
66
|
def self.messages
|
67
67
|
MESSAGES
|
68
68
|
end
|
69
|
-
|
69
|
+
|
70
70
|
def initialize(attrs)
|
71
71
|
attrs ||= {}
|
72
|
-
|
72
|
+
|
73
73
|
@code = attrs[:code].upcase unless attrs[:code].blank?
|
74
74
|
@message = self.class.messages[code]
|
75
|
-
|
75
|
+
|
76
76
|
if attrs[:street_match].blank?
|
77
77
|
@street_match = STREET_MATCH_CODE[code]
|
78
|
-
else
|
78
|
+
else
|
79
79
|
@street_match = attrs[:street_match].upcase
|
80
80
|
end
|
81
|
-
|
81
|
+
|
82
82
|
if attrs[:postal_match].blank?
|
83
83
|
@postal_match = POSTAL_MATCH_CODE[code]
|
84
|
-
else
|
84
|
+
else
|
85
85
|
@postal_match = attrs[:postal_match].upcase
|
86
86
|
end
|
87
87
|
end
|
88
|
-
|
88
|
+
|
89
89
|
def to_hash
|
90
90
|
{ 'code' => code,
|
91
91
|
'message' => message,
|
@@ -135,7 +135,7 @@ module ActiveMerchant #:nodoc:
|
|
135
135
|
end
|
136
136
|
|
137
137
|
def add_address(post, options)
|
138
|
-
return unless post[:card]
|
138
|
+
return unless post[:card]&.kind_of?(Hash)
|
139
139
|
if (address = options[:billing_address] || options[:address]) && address[:country]
|
140
140
|
post[:card][:billingAddress] = {}
|
141
141
|
post[:card][:billingAddress][:street] = address[:address1] || 'N/A'
|
@@ -257,6 +257,7 @@ module ActiveMerchant
|
|
257
257
|
add_market_type_device_type(xml, payment, options)
|
258
258
|
add_settings(xml, payment, options)
|
259
259
|
add_user_fields(xml, amount, options)
|
260
|
+
add_ship_from_address(xml, options)
|
260
261
|
end
|
261
262
|
end
|
262
263
|
|
@@ -610,6 +611,16 @@ module ActiveMerchant
|
|
610
611
|
end
|
611
612
|
end
|
612
613
|
|
614
|
+
def add_ship_from_address(xml, options, root_node='shipFrom')
|
615
|
+
address = options[:ship_from_address]
|
616
|
+
return unless address
|
617
|
+
|
618
|
+
xml.send(root_node) do
|
619
|
+
xml.zip(truncate(address[:zip], 20)) unless empty?(address[:zip])
|
620
|
+
xml.country(truncate(address[:country], 60)) unless empty?(address[:country])
|
621
|
+
end
|
622
|
+
end
|
623
|
+
|
613
624
|
def add_order_id(xml, options)
|
614
625
|
xml.refId(truncate(options[:order_id], 20))
|
615
626
|
end
|
@@ -619,6 +630,7 @@ module ActiveMerchant
|
|
619
630
|
xml.invoiceNumber(truncate(options[:order_id], 20))
|
620
631
|
xml.description(truncate(options[:description], 255))
|
621
632
|
xml.purchaseOrderNumber(options[:po_number]) if options[:po_number] && transaction_type.start_with?('profileTrans')
|
633
|
+
xml.summaryCommodityCode(truncate(options[:summary_commodity_code], 4)) if options[:summary_commodity_code] && !transaction_type.start_with?('profileTrans')
|
622
634
|
end
|
623
635
|
|
624
636
|
# Authorize.net API requires lineItems to be placed directly after order tag
|
@@ -671,7 +671,6 @@ module ActiveMerchant #:nodoc:
|
|
671
671
|
tag_unless_blank(xml,'customerShippingAddressId', transaction[:customer_shipping_address_id])
|
672
672
|
xml.tag!('transId', transaction[:trans_id])
|
673
673
|
when :refund
|
674
|
-
#TODO - add lineItems field
|
675
674
|
xml.tag!('amount', transaction[:amount])
|
676
675
|
tag_unless_blank(xml, 'customerProfileId', transaction[:customer_profile_id])
|
677
676
|
tag_unless_blank(xml, 'customerPaymentProfileId', transaction[:customer_payment_profile_id])
|
@@ -879,7 +878,7 @@ module ActiveMerchant #:nodoc:
|
|
879
878
|
end
|
880
879
|
|
881
880
|
def format_extra_options(options)
|
882
|
-
options
|
881
|
+
options&.map{ |k, v| "#{k}=#{v}" }&.join('&')
|
883
882
|
end
|
884
883
|
|
885
884
|
def parse_direct_response(params)
|
@@ -68,7 +68,27 @@ module ActiveMerchant #:nodoc:
|
|
68
68
|
post[:nationality] = options[:nationality] if options[:nationality]
|
69
69
|
post[:shopperName] = options[:shopper_name] if options[:shopper_name]
|
70
70
|
|
71
|
-
|
71
|
+
if options[:third_party_payout]
|
72
|
+
post[:recurring] = options[:recurring_contract] || {contract: 'PAYOUT'}
|
73
|
+
MultiResponse.run do |r|
|
74
|
+
r.process {
|
75
|
+
commit(
|
76
|
+
'storeDetailAndSubmitThirdParty',
|
77
|
+
post,
|
78
|
+
@options[:store_payout_account],
|
79
|
+
@options[:store_payout_password])
|
80
|
+
}
|
81
|
+
r.process {
|
82
|
+
commit(
|
83
|
+
'confirmThirdParty',
|
84
|
+
modification_request(r.authorization, @options),
|
85
|
+
@options[:review_payout_account],
|
86
|
+
@options[:review_payout_password])
|
87
|
+
}
|
88
|
+
end
|
89
|
+
else
|
90
|
+
commit('refundWithData', post)
|
91
|
+
end
|
72
92
|
end
|
73
93
|
|
74
94
|
def void(identification, options = {})
|
@@ -128,9 +148,10 @@ module ActiveMerchant #:nodoc:
|
|
128
148
|
'18' => 'I' # Neither postal code nor address were checked
|
129
149
|
}
|
130
150
|
|
131
|
-
def commit(action, post)
|
151
|
+
def commit(action, post, account = 'ws', password = @options[:password])
|
132
152
|
request = post_data(flatten_hash(post))
|
133
|
-
|
153
|
+
request_headers = headers(account, password)
|
154
|
+
raw_response = ssl_post(build_url(action), request, request_headers)
|
134
155
|
response = parse(raw_response)
|
135
156
|
|
136
157
|
Response.new(
|
@@ -181,10 +202,10 @@ module ActiveMerchant #:nodoc:
|
|
181
202
|
flat_hash
|
182
203
|
end
|
183
204
|
|
184
|
-
def headers
|
205
|
+
def headers(account, password)
|
185
206
|
{
|
186
207
|
'Content-Type' => 'application/x-www-form-urlencoded; charset=utf-8',
|
187
|
-
'Authorization' => 'Basic ' + Base64.strict_encode64("
|
208
|
+
'Authorization' => 'Basic ' + Base64.strict_encode64("#{account}@Company.#{@options[:company]}:#{password}").strip
|
188
209
|
}
|
189
210
|
end
|
190
211
|
|
@@ -214,10 +235,10 @@ module ActiveMerchant #:nodoc:
|
|
214
235
|
|
215
236
|
def success_from(response)
|
216
237
|
return true if response['result'] == 'Success'
|
217
|
-
|
218
|
-
|
219
|
-
successful_responses = %w([capture-received] [cancel-received] [refund-received])
|
220
|
-
successful_responses.include?(response['response'])
|
238
|
+
|
239
|
+
successful_results = %w(Authorised Received [payout-submit-received])
|
240
|
+
successful_responses = %w([capture-received] [cancel-received] [refund-received] [payout-confirm-received])
|
241
|
+
successful_results.include?(response['resultCode']) || successful_responses.include?(response['response'])
|
221
242
|
end
|
222
243
|
|
223
244
|
def build_url(action)
|
@@ -226,6 +247,8 @@ module ActiveMerchant #:nodoc:
|
|
226
247
|
"#{test? ? self.test_url : self.live_url}/Recurring/#{API_VERSION}/storeToken"
|
227
248
|
when 'finalize3ds'
|
228
249
|
"#{test? ? self.test_url : self.live_url}/Payment/#{API_VERSION}/authorise3d"
|
250
|
+
when 'storeDetailAndSubmitThirdParty', 'confirmThirdParty'
|
251
|
+
"#{test? ? self.test_url : self.live_url}/Payout/#{API_VERSION}/#{action}"
|
229
252
|
else
|
230
253
|
"#{test? ? self.test_url : self.live_url}/Payment/#{API_VERSION}/#{action}"
|
231
254
|
end
|
@@ -263,11 +286,11 @@ module ActiveMerchant #:nodoc:
|
|
263
286
|
hash = {}
|
264
287
|
hash[:houseNumberOrName] = house
|
265
288
|
hash[:street] = street
|
266
|
-
hash[:city] = address[:city]
|
267
|
-
hash[:stateOrProvince] = address[:state]
|
268
|
-
hash[:postalCode] = address[:zip]
|
269
|
-
hash[:country] = address[:country]
|
270
|
-
hash
|
289
|
+
hash[:city] = address[:city]
|
290
|
+
hash[:stateOrProvince] = address[:state]
|
291
|
+
hash[:postalCode] = address[:zip]
|
292
|
+
hash[:country] = address[:country]
|
293
|
+
hash.keep_if { |_, v| v }
|
271
294
|
end
|
272
295
|
|
273
296
|
def amount_hash(money, currency)
|
@@ -301,20 +324,20 @@ module ActiveMerchant #:nodoc:
|
|
301
324
|
|
302
325
|
def payment_request(money, options)
|
303
326
|
hash = {}
|
304
|
-
hash[:merchantAccount]
|
305
|
-
hash[:reference]
|
306
|
-
hash[:shopperEmail]
|
307
|
-
hash[:shopperIP]
|
308
|
-
hash[:shopperReference]
|
309
|
-
hash[:shopperInteraction] = options[:shopper_interaction]
|
310
|
-
hash[:deviceFingerprint] = options[:device_fingerprint]
|
327
|
+
hash[:merchantAccount] = @options[:merchant]
|
328
|
+
hash[:reference] = options[:order_id]
|
329
|
+
hash[:shopperEmail] = options[:email]
|
330
|
+
hash[:shopperIP] = options[:ip]
|
331
|
+
hash[:shopperReference] = options[:customer]
|
332
|
+
hash[:shopperInteraction] = options[:shopper_interaction]
|
333
|
+
hash[:deviceFingerprint] = options[:device_fingerprint]
|
311
334
|
hash.keep_if { |_, v| v }
|
312
335
|
end
|
313
336
|
|
314
337
|
def store_request(options)
|
315
338
|
hash = {}
|
316
339
|
hash[:merchantAccount] = @options[:merchant]
|
317
|
-
hash[:shopperEmail] = options[:email]
|
340
|
+
hash[:shopperEmail] = options[:email]
|
318
341
|
hash[:shopperReference] = options[:customer] if options[:customer]
|
319
342
|
hash.keep_if { |_, v| v }
|
320
343
|
end
|
@@ -167,8 +167,8 @@ module ActiveMerchant #:nodoc:
|
|
167
167
|
commit(post, true)
|
168
168
|
end
|
169
169
|
|
170
|
-
#can't actually delete a secure profile with the supplicated API. This function sets the status of the profile to closed (C).
|
171
|
-
#Closed profiles will have to removed manually.
|
170
|
+
# can't actually delete a secure profile with the supplicated API. This function sets the status of the profile to closed (C).
|
171
|
+
# Closed profiles will have to removed manually.
|
172
172
|
def delete(vault_id)
|
173
173
|
update(vault_id, false, {:status => 'C'})
|
174
174
|
end
|
@@ -266,7 +266,7 @@ module ActiveMerchant #:nodoc:
|
|
266
266
|
end
|
267
267
|
|
268
268
|
def add_recurring_payment(post, options)
|
269
|
-
post[:recurringPayment] =
|
269
|
+
post[:recurringPayment] = 1 if options[:recurring].to_s == 'true'
|
270
270
|
end
|
271
271
|
|
272
272
|
def add_invoice(post, options)
|
@@ -375,11 +375,9 @@ module ActiveMerchant #:nodoc:
|
|
375
375
|
|
376
376
|
def parse(body)
|
377
377
|
results = {}
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
results[key.to_sym] = val.nil? ? nil : CGI.unescape(val)
|
382
|
-
end
|
378
|
+
body&.split(/&/)&.each do |pair|
|
379
|
+
key, val = pair.split(/\=/)
|
380
|
+
results[key.to_sym] = val.nil? ? nil : CGI.unescape(val)
|
383
381
|
end
|
384
382
|
|
385
383
|
# Clean up the message text if there is any
|
@@ -173,7 +173,7 @@ module ActiveMerchant #:nodoc:
|
|
173
173
|
end
|
174
174
|
|
175
175
|
def credit(money, payment_object, options = {})
|
176
|
-
if
|
176
|
+
if payment_object&.kind_of?(String)
|
177
177
|
ActiveMerchant.deprecated 'credit should only be used to credit a payment method'
|
178
178
|
return refund(money, payment_object, options)
|
179
179
|
end
|
@@ -159,7 +159,7 @@ module ActiveMerchant #:nodoc:
|
|
159
159
|
:last_name => creditcard.last_name,
|
160
160
|
:email => scrub_email(options[:email]),
|
161
161
|
:phone => options[:phone] || (options[:billing_address][:phone] if options[:billing_address] &&
|
162
|
-
|
162
|
+
options[:billing_address][:phone]),
|
163
163
|
:credit_card => credit_card_params
|
164
164
|
)
|
165
165
|
Response.new(result.success?, message_from_result(result),
|
@@ -231,8 +231,9 @@ module ActiveMerchant #:nodoc:
|
|
231
231
|
:last_name => creditcard.last_name,
|
232
232
|
:email => scrub_email(options[:email]),
|
233
233
|
:phone => options[:phone] || (options[:billing_address][:phone] if options[:billing_address] &&
|
234
|
-
|
234
|
+
options[:billing_address][:phone]),
|
235
235
|
:id => options[:customer],
|
236
|
+
:device_data => options[:device_data],
|
236
237
|
}.merge credit_card_params
|
237
238
|
result = @braintree_gateway.customer.create(merge_credit_card_options(parameters, options))
|
238
239
|
Response.new(result.success?, message_from_result(result),
|
@@ -256,6 +257,7 @@ module ActiveMerchant #:nodoc:
|
|
256
257
|
cvv: credit_card.verification_value,
|
257
258
|
expiration_month: credit_card.month.to_s.rjust(2, '0'),
|
258
259
|
expiration_year: credit_card.year.to_s,
|
260
|
+
device_data: options[:device_data],
|
259
261
|
}
|
260
262
|
parameters[:billing_address] = map_address(options[:billing_address]) if options[:billing_address]
|
261
263
|
|
@@ -353,7 +355,7 @@ module ActiveMerchant #:nodoc:
|
|
353
355
|
result.success?,
|
354
356
|
message_from_result(result),
|
355
357
|
response_hash,
|
356
|
-
authorization:
|
358
|
+
authorization: result.transaction&.id,
|
357
359
|
test: test?
|
358
360
|
)
|
359
361
|
end
|
@@ -556,7 +558,7 @@ module ActiveMerchant #:nodoc:
|
|
556
558
|
:id => options[:store] == true ? '' : options[:store],
|
557
559
|
:email => scrub_email(options[:email]),
|
558
560
|
:phone => options[:phone] || (options[:billing_address][:phone] if options[:billing_address] &&
|
559
|
-
|
561
|
+
options[:billing_address][:phone])
|
560
562
|
},
|
561
563
|
:options => {
|
562
564
|
:store_in_vault => options[:store] ? true : false,
|
@@ -166,8 +166,8 @@ module ActiveMerchant #:nodoc:
|
|
166
166
|
response = {}
|
167
167
|
|
168
168
|
doc = Nokogiri::XML(xml)
|
169
|
-
doc.root
|
170
|
-
if
|
169
|
+
doc.root&.xpath('*')&.each do |node|
|
170
|
+
if node.elements.size == 0
|
171
171
|
response[node.name.downcase.to_sym] = node.text
|
172
172
|
else
|
173
173
|
node.elements.each do |childnode|
|
@@ -175,7 +175,7 @@ module ActiveMerchant #:nodoc:
|
|
175
175
|
response[name.to_sym] = childnode.text
|
176
176
|
end
|
177
177
|
end
|
178
|
-
end
|
178
|
+
end
|
179
179
|
|
180
180
|
response
|
181
181
|
end
|
@@ -150,12 +150,12 @@ module ActiveMerchant #:nodoc:
|
|
150
150
|
end
|
151
151
|
|
152
152
|
def scrub(transcript)
|
153
|
-
transcript
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
153
|
+
transcript.
|
154
|
+
gsub(%r((Authorization: Basic )\w+), '\1[FILTERED]').
|
155
|
+
gsub(%r(("cvv2\\":\\")\d*), '\1[FILTERED]').
|
156
|
+
gsub(%r(("merchid\\":\\")\d*), '\1[FILTERED]').
|
157
|
+
gsub(%r((&?"account\\":\\")\d*), '\1[FILTERED]').
|
158
|
+
gsub(%r((&?"token\\":\\")\d*), '\1[FILTERED]')
|
159
159
|
end
|
160
160
|
|
161
161
|
private
|