activemerchant 1.85.0 → 1.86.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 +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
|