activemerchant 1.109.0 → 1.110.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +10 -1
- data/README.md +2 -2
- data/lib/active_merchant/billing/gateways/adyen.rb +10 -4
- data/lib/active_merchant/billing/gateways/credorax.rb +1 -1
- data/lib/active_merchant/billing/gateways/cyber_source.rb +26 -11
- data/lib/active_merchant/billing/gateways/firstdata_e4_v27.rb +8 -0
- data/lib/active_merchant/billing/gateways/netbanx.rb +4 -0
- data/lib/active_merchant/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 947d711ce2e079aee4a485b32b4ba5349973461854026135c36192ed4b510ce2
|
4
|
+
data.tar.gz: bf6ac95e994f6f7aaa22543bdc6cd0ef36e373b3e7b06b249d931a91a11b9d31
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d6745f7228a6b068db47d588b3e1d4770d6399aa45fa2ffe74671259d4945bc82fc6cfd7a943fd7b19fd2c8c9ed4e0fb1df76f1fdbf56fee1f01ca316e2ac07
|
7
|
+
data.tar.gz: 214fe490b01b7b3389137a30641e4fc49df892bb769bedecdf82ac477481670b89026287aa68a8aaad87b283dbf2a1ccc0b55533ccb03b744845352baff46a0f
|
data/CHANGELOG
CHANGED
@@ -2,6 +2,16 @@
|
|
2
2
|
|
3
3
|
== HEAD
|
4
4
|
|
5
|
+
== Version 1.110.0
|
6
|
+
* FirstData e4 v27+: Strip linebreaks from address [curiousepic] #3693
|
7
|
+
* Adyen: Change shopper_email to email and shopper_ip to ip [rikterbeek] #3675
|
8
|
+
* FirstData e4 v27+ Fix strip_line_breaks method [carrigan] #3695
|
9
|
+
* Cybersource: Set authorization on the response even when in fraud review [pi3r] #3701
|
10
|
+
* Cybersource: Add fields to override stored creds [leila-alderman] #3689
|
11
|
+
* Cybersource: Conditionally find stored credentials [therufs] #3696 #3697
|
12
|
+
* Cybersource: Update logic to send cavv as xid for 3DS2 [douglas] #3699
|
13
|
+
* Credorax: Default 3ds_browsercolordepth to 32 when passed as 30 [britth] #3700
|
14
|
+
|
5
15
|
== Version 1.109.0
|
6
16
|
* Remove reference to `Billing::Integrations` [pi3r] #3692
|
7
17
|
* DLocal: Handle nil address1 [molbrown] #3661
|
@@ -26,7 +36,6 @@
|
|
26
36
|
* RuboCop: Fix Style/TrailingUnderscoreVariable [leila-alderman] #3663
|
27
37
|
* RuboCop: Fix Style/WordArray [leila-alderman] #3664
|
28
38
|
* RuboCop: Fix Style/SymbolArray [leila-alderman] #3665
|
29
|
-
|
30
39
|
* Mercado-Pago: Notification url GSF [cdmackeyfree] #3678
|
31
40
|
* Credorax: Update logic for setting 3ds_homephonecountry [britth] #3691
|
32
41
|
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Active Merchant
|
2
|
-
[![Build Status](https://travis-ci.org/activemerchant/active_merchant.
|
3
|
-
[![Code Climate](https://codeclimate.com/github/activemerchant/active_merchant.
|
2
|
+
[![Build Status](https://travis-ci.org/activemerchant/active_merchant.svg?branch=master)](https://travis-ci.org/activemerchant/active_merchant)
|
3
|
+
[![Code Climate](https://codeclimate.com/github/activemerchant/active_merchant.svg)](https://codeclimate.com/github/activemerchant/active_merchant)
|
4
4
|
|
5
5
|
Active Merchant is an extraction from the ecommerce system [Shopify](http://www.shopify.com).
|
6
6
|
Shopify's requirements for a simple and unified API to access dozens of different payment
|
@@ -196,9 +196,6 @@ module ActiveMerchant #:nodoc:
|
|
196
196
|
|
197
197
|
def add_extra_data(post, payment, options)
|
198
198
|
post[:telephoneNumber] = options[:billing_address][:phone] if options.dig(:billing_address, :phone)
|
199
|
-
post[:shopperEmail] = options[:shopper_email] if options[:shopper_email]
|
200
|
-
post[:shopperIP] = options[:shopper_ip] if options[:shopper_ip]
|
201
|
-
post[:shopperStatement] = options[:shopper_statement] if options[:shopper_statement]
|
202
199
|
post[:fraudOffset] = options[:fraud_offset] if options[:fraud_offset]
|
203
200
|
post[:selectedBrand] = options[:selected_brand] if options[:selected_brand]
|
204
201
|
post[:selectedBrand] ||= NETWORK_TOKENIZATION_CARD_SOURCE[payment.source.to_s] if payment.is_a?(NetworkTokenizationCreditCard)
|
@@ -212,13 +209,22 @@ module ActiveMerchant #:nodoc:
|
|
212
209
|
post[:additionalData][:authorisationType] = options[:authorisation_type] if options[:authorisation_type]
|
213
210
|
post[:additionalData][:adjustAuthorisationData] = options[:adjust_authorisation_data] if options[:adjust_authorisation_data]
|
214
211
|
post[:additionalData][:industryUsage] = options[:industry_usage] if options[:industry_usage]
|
215
|
-
post[:additionalData][:updateShopperStatement] = options[:update_shopper_statement] if options[:update_shopper_statement]
|
216
212
|
post[:additionalData][:RequestedTestAcquirerResponseCode] = options[:requested_test_acquirer_response_code] if options[:requested_test_acquirer_response_code] && test?
|
217
213
|
post[:deviceFingerprint] = options[:device_fingerprint] if options[:device_fingerprint]
|
214
|
+
add_shopper_data(post, options)
|
218
215
|
add_risk_data(post, options)
|
219
216
|
add_shopper_reference(post, options)
|
220
217
|
end
|
221
218
|
|
219
|
+
def add_shopper_data(post, options)
|
220
|
+
post[:shopperEmail] = options[:email] if options[:email]
|
221
|
+
post[:shopperEmail] = options[:shopper_email] if options[:shopper_email]
|
222
|
+
post[:shopperIP] = options[:ip] if options[:ip]
|
223
|
+
post[:shopperIP] = options[:shopper_ip] if options[:shopper_ip]
|
224
|
+
post[:shopperStatement] = options[:shopper_statement] if options[:shopper_statement]
|
225
|
+
post[:additionalData][:updateShopperStatement] = options[:update_shopper_statement] if options[:update_shopper_statement]
|
226
|
+
end
|
227
|
+
|
222
228
|
def add_risk_data(post, options)
|
223
229
|
if (risk_data = options[:risk_data])
|
224
230
|
risk_data = Hash[risk_data.map { |k, v| ["riskdata.#{k}", v] }]
|
@@ -333,7 +333,7 @@ module ActiveMerchant #:nodoc:
|
|
333
333
|
post[:'3ds_browsertz'] = browser_info[:timezone]
|
334
334
|
post[:'3ds_browserscreenwidth'] = browser_info[:width]
|
335
335
|
post[:'3ds_browserscreenheight'] = browser_info[:height]
|
336
|
-
post[:'3ds_browsercolordepth'] = browser_info[:depth]
|
336
|
+
post[:'3ds_browsercolordepth'] = browser_info[:depth].to_s == '30' ? '32' : browser_info[:depth]
|
337
337
|
post[:d6] = browser_info[:language]
|
338
338
|
post[:'3ds_browserjavaenabled'] = browser_info[:java]
|
339
339
|
post[:'3ds_browseracceptheader'] = browser_info[:accept_header]
|
@@ -611,16 +611,22 @@ module ActiveMerchant #:nodoc:
|
|
611
611
|
|
612
612
|
def add_normalized_threeds_2_data(xml, payment_method, options)
|
613
613
|
threeds_2_options = options[:three_d_secure]
|
614
|
+
cc_brand = card_brand(payment_method).to_sym
|
615
|
+
xid = threeds_2_options[:xid]
|
614
616
|
|
615
|
-
xml.tag!('cavv', threeds_2_options[:cavv]) if threeds_2_options[:cavv] &&
|
617
|
+
xml.tag!('cavv', threeds_2_options[:cavv]) if threeds_2_options[:cavv] && cc_brand != :master
|
616
618
|
xml.tag!('cavvAlgorithm', threeds_2_options[:cavv_algorithm]) if threeds_2_options[:cavv_algorithm]
|
617
619
|
xml.tag!('paSpecificationVersion', threeds_2_options[:version]) if threeds_2_options[:version]
|
618
620
|
xml.tag!('directoryServerTransactionID', threeds_2_options[:ds_transaction_id]) if threeds_2_options[:ds_transaction_id]
|
619
|
-
xml.tag!('commerceIndicator', options[:commerce_indicator] || ECI_BRAND_MAPPING[
|
621
|
+
xml.tag!('commerceIndicator', options[:commerce_indicator] || ECI_BRAND_MAPPING[cc_brand])
|
620
622
|
xml.tag!('eciRaw', threeds_2_options[:eci]) if threeds_2_options[:eci]
|
621
623
|
|
622
|
-
|
623
|
-
|
624
|
+
if xid.present?
|
625
|
+
xml.tag!('xid', xid)
|
626
|
+
elsif threeds_2_options[:version]&.start_with?('2') && cc_brand != :master
|
627
|
+
cavv = threeds_2_options[:cavv]
|
628
|
+
xml.tag!('xid', cavv) if cavv.present?
|
629
|
+
end
|
624
630
|
|
625
631
|
xml.tag!('veresEnrolled', threeds_2_options[:enrolled]) if threeds_2_options[:enrolled]
|
626
632
|
xml.tag!('paresStatus', threeds_2_options[:authentication_response_status]) if threeds_2_options[:authentication_response_status]
|
@@ -831,12 +837,22 @@ module ActiveMerchant #:nodoc:
|
|
831
837
|
end
|
832
838
|
|
833
839
|
def add_stored_credential_options(xml, options={})
|
834
|
-
return unless options[:stored_credential]
|
840
|
+
return unless options[:stored_credential] || options[:stored_credential_overrides]
|
841
|
+
|
842
|
+
stored_credential_subsequent_auth = 'true' if options.dig(:stored_credential, :initiator) == 'merchant'
|
843
|
+
stored_credential_subsequent_auth_first = 'true' if options.dig(:stored_credential, :initial_transaction)
|
844
|
+
stored_credential_transaction_id = options.dig(:stored_credential, :network_transaction_id) if options.dig(:stored_credential, :initiator) == 'merchant'
|
845
|
+
stored_credential_subsequent_auth_stored_cred = 'true' if options.dig(:stored_credential, :initiator) == 'cardholder' && !options.dig(:stored_credential, :initial_transaction) || options.dig(:stored_credential, :initiator) == 'merchant' && options.dig(:stored_credential, :reason_type) == 'unscheduled'
|
835
846
|
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
847
|
+
override_subsequent_auth = options.dig(:stored_credential_overrides, :subsequent_auth)
|
848
|
+
override_subsequent_auth_first = options.dig(:stored_credential_overrides, :subsequent_auth_first)
|
849
|
+
override_subsequent_auth_transaction_id = options.dig(:stored_credential_overrides, :subsequent_auth_transaction_id)
|
850
|
+
override_subsequent_auth_stored_cred = options.dig(:stored_credential_overrides, :subsequent_auth_stored_credential)
|
851
|
+
|
852
|
+
xml.subsequentAuth override_subsequent_auth.nil? ? stored_credential_subsequent_auth : override_subsequent_auth
|
853
|
+
xml.subsequentAuthFirst override_subsequent_auth_first.nil? ? stored_credential_subsequent_auth_first : override_subsequent_auth_first
|
854
|
+
xml.subsequentAuthTransactionID override_subsequent_auth_transaction_id.nil? ? stored_credential_transaction_id : override_subsequent_auth_transaction_id
|
855
|
+
xml.subsequentAuthStoredCredential override_subsequent_auth_stored_cred.nil? ? stored_credential_subsequent_auth_stored_cred : override_subsequent_auth_stored_cred
|
840
856
|
end
|
841
857
|
|
842
858
|
def add_partner_solution_id(xml)
|
@@ -887,8 +903,7 @@ module ActiveMerchant #:nodoc:
|
|
887
903
|
|
888
904
|
success = success?(response)
|
889
905
|
message = message_from(response)
|
890
|
-
|
891
|
-
authorization = success ? authorization_from(response, action, amount, options) : nil
|
906
|
+
authorization = success || in_fraud_review?(response) ? authorization_from(response, action, amount, options) : nil
|
892
907
|
|
893
908
|
Response.new(success, message, response,
|
894
909
|
test: test?,
|
@@ -287,6 +287,8 @@ module ActiveMerchant #:nodoc:
|
|
287
287
|
|
288
288
|
def add_address(xml, options)
|
289
289
|
if (address = options[:billing_address] || options[:address])
|
290
|
+
address = strip_line_breaks(address)
|
291
|
+
|
290
292
|
xml.tag! 'Address' do
|
291
293
|
xml.tag! 'Address1', address[:address1]
|
292
294
|
xml.tag! 'Address2', address[:address2] if address[:address2]
|
@@ -299,6 +301,12 @@ module ActiveMerchant #:nodoc:
|
|
299
301
|
end
|
300
302
|
end
|
301
303
|
|
304
|
+
def strip_line_breaks(address)
|
305
|
+
return unless address.is_a?(Hash)
|
306
|
+
|
307
|
+
Hash[address.map { |k, s| [k, s&.tr("\r\n", ' ')&.strip] }]
|
308
|
+
end
|
309
|
+
|
302
310
|
def add_invoice(xml, options)
|
303
311
|
xml.tag! 'Reference_No', options[:order_id]
|
304
312
|
xml.tag! 'Reference_3', options[:description] if options[:description]
|
@@ -28,6 +28,10 @@ module ActiveMerchant #:nodoc:
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def purchase(money, payment, options={})
|
31
|
+
# Do a Verification with AVS prior to purchase
|
32
|
+
verification_response = verify(payment, options)
|
33
|
+
return verification_response if verification_response.message != 'OK'
|
34
|
+
|
31
35
|
post = {}
|
32
36
|
add_invoice(post, money, options)
|
33
37
|
add_settle_with_auth(post)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activemerchant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.110.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tobias Luetke
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|