activemerchant 1.109.0 → 1.110.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 +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
|
-
[](https://travis-ci.org/activemerchant/active_merchant)
|
|
3
|
+
[](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
|