activemerchant 1.74.0 → 1.75.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 +14 -0
- data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +4 -0
- data/lib/active_merchant/billing/gateways/cyber_source.rb +7 -2
- data/lib/active_merchant/billing/gateways/ebanx.rb +4 -4
- data/lib/active_merchant/billing/gateways/firstdata_e4.rb +1 -1
- data/lib/active_merchant/billing/gateways/netbanx.rb +6 -13
- data/lib/active_merchant/billing/gateways/payu_latam.rb +5 -11
- data/lib/active_merchant/billing/gateways/sage.rb +3 -0
- data/lib/active_merchant/billing/gateways/worldpay_us.rb +15 -8
- data/lib/active_merchant/version.rb +1 -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: 50bb4461b27b49be6e87608a11f5db29a02d0adc
|
4
|
+
data.tar.gz: d5b76878be3ec6d7334cb343d439837b6fb3d599
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3eff219643c61371a81f0242548576dadfd8032cd3939a5859e6d5a8ca1aa4b822454754ed6aef844c14096af72a69b90b6ae5cb2ba8491fb662beba6aeb8447
|
7
|
+
data.tar.gz: 2cc15eaa916a7b90c66e8686668ec01cc56cebdfe2029c555033e2e1907fc931842e24bad2c8fb7760d543940cdfb6d84da0d8e1da24ccaa4927adc7646950d9
|
data/CHANGELOG
CHANGED
@@ -2,6 +2,20 @@
|
|
2
2
|
|
3
3
|
== HEAD
|
4
4
|
|
5
|
+
== Version 1.75.0 (November 9, 2017)
|
6
|
+
* Barclaycard Smartpay: Clean up test options hashes [bpollack] #2632
|
7
|
+
* Barclaycard Smartpay: Extra data fields for credits [bpollack] #2631
|
8
|
+
* Cyber Source: Correctly passes subscriptionID for store [deedeelavinder] #2633
|
9
|
+
* Ebanx: Pass fields for business person responsible [curiousepic] #2635
|
10
|
+
* Ebanx: Support Colombian transactions [bpollack] #2636
|
11
|
+
* FirstData E4 (Payeezy): Ensure numeric ECI values are zero padded [jasonwebster] #2630
|
12
|
+
* Netbanx: Only send currency and billing_details for auths and sales [anotherjosmith] #2643
|
13
|
+
* Netbanx: Revert "Fixes basic auth for netbanx by sending the account_number and api_key" [anotherjosmith] #2644
|
14
|
+
* PayU Latam: Adds `partnerID`, adjusts phone preferences, allows empty `ip_address`, and adjusts for no `cvv` [deedeelavinder] #2634
|
15
|
+
* Sage Payment Solutions: Scrub check info [curiousepic] #2639
|
16
|
+
* Worldbank US: Allow using the backup URL [bpollack] #2641
|
17
|
+
* Worldbank US: Allow using the backup URL per-request [bpollack] #2645
|
18
|
+
|
5
19
|
== Version 1.74.0 (October 24, 2017)
|
6
20
|
* Adyen: Update list of supported countries [dtykocki] #2600
|
7
21
|
* Authorize.net CIM: Handle multiple error messages [amandapuff] #2537
|
@@ -60,6 +60,10 @@ module ActiveMerchant #:nodoc:
|
|
60
60
|
post = payment_request(money, options)
|
61
61
|
post[:amount] = amount_hash(money, options[:currency])
|
62
62
|
post[:card] = credit_card_hash(creditcard)
|
63
|
+
post[:dateOfBirth] = options[:date_of_birth] if options[:date_of_birth]
|
64
|
+
post[:entityType] = options[:entity_type] if options[:entity_type]
|
65
|
+
post[:nationality] = options[:nationality] if options[:nationality]
|
66
|
+
post[:shopperName] = options[:shopper_name] if options[:shopper_name]
|
63
67
|
|
64
68
|
commit('refundWithData', post)
|
65
69
|
end
|
@@ -618,7 +618,7 @@ module ActiveMerchant #:nodoc:
|
|
618
618
|
|
619
619
|
xml.tag! 'recurringSubscriptionInfo' do
|
620
620
|
if reference
|
621
|
-
|
621
|
+
subscription_id = reference.split(";")[6]
|
622
622
|
xml.tag! 'subscriptionID', subscription_id
|
623
623
|
end
|
624
624
|
|
@@ -709,7 +709,7 @@ module ActiveMerchant #:nodoc:
|
|
709
709
|
success = response[:decision] == "ACCEPT"
|
710
710
|
message = response[:message]
|
711
711
|
|
712
|
-
authorization = success ?
|
712
|
+
authorization = success ? authorization_from(response, action, amount, options) : nil
|
713
713
|
|
714
714
|
Response.new(success, message, response,
|
715
715
|
:test => test?,
|
@@ -759,6 +759,11 @@ module ActiveMerchant #:nodoc:
|
|
759
759
|
return if reason_code.blank?
|
760
760
|
@@response_codes[:"r#{reason_code}"]
|
761
761
|
end
|
762
|
+
|
763
|
+
def authorization_from(response, action, amount, options)
|
764
|
+
[options[:order_id], response[:requestID], response[:requestToken], action, amount,
|
765
|
+
options[:currency], response[:subscriptionID]].join(";")
|
766
|
+
end
|
762
767
|
end
|
763
768
|
end
|
764
769
|
end
|
@@ -4,7 +4,7 @@ module ActiveMerchant #:nodoc:
|
|
4
4
|
self.test_url = 'https://sandbox.ebanx.com/ws/'
|
5
5
|
self.live_url = 'https://api.ebanx.com/ws/'
|
6
6
|
|
7
|
-
self.supported_countries = ['BR', 'MX']
|
7
|
+
self.supported_countries = ['BR', 'MX', 'CO']
|
8
8
|
self.default_currency = 'USD'
|
9
9
|
self.supported_cardtypes = [:visa, :master, :american_express, :discover, :diners_club]
|
10
10
|
|
@@ -149,9 +149,9 @@ module ActiveMerchant #:nodoc:
|
|
149
149
|
post[:payment][:person_type] = options[:person_type] if options[:person_type]
|
150
150
|
if options[:person_type] && options[:person_type].downcase == 'business'
|
151
151
|
post[:payment][:responsible] = {}
|
152
|
-
post[:payment][:responsible][:name] =
|
153
|
-
post[:payment][:responsible][:document] = options[:
|
154
|
-
post[:payment][:responsible][:birth_date] = options[:
|
152
|
+
post[:payment][:responsible][:name] = options[:responsible_name] if options[:responsible_name]
|
153
|
+
post[:payment][:responsible][:document] = options[:responsible_document] if options[:responsible_document]
|
154
|
+
post[:payment][:responsible][:birth_date] = options[:responsible_birth_date] if options[:responsible_birth_date]
|
155
155
|
end
|
156
156
|
end
|
157
157
|
|
@@ -238,7 +238,7 @@ module ActiveMerchant #:nodoc:
|
|
238
238
|
xml.tag! "CardType", card_type(credit_card.brand)
|
239
239
|
|
240
240
|
eci = (credit_card.respond_to?(:eci) ? credit_card.eci : nil) || options[:eci] || DEFAULT_ECI
|
241
|
-
xml.tag! "Ecommerce_Flag", eci
|
241
|
+
xml.tag! "Ecommerce_Flag", eci.to_s =~ /^[0-9]+$/ ? eci.to_s.rjust(2, '0') : eci
|
242
242
|
|
243
243
|
add_credit_card_verification_strings(xml, credit_card, options)
|
244
244
|
end
|
@@ -31,7 +31,7 @@ module ActiveMerchant #:nodoc:
|
|
31
31
|
post = {}
|
32
32
|
add_invoice(post, money, options)
|
33
33
|
add_settle_with_auth(post)
|
34
|
-
add_payment(post, payment)
|
34
|
+
add_payment(post, payment, options)
|
35
35
|
|
36
36
|
commit(:post, 'auths', post)
|
37
37
|
end
|
@@ -39,7 +39,7 @@ module ActiveMerchant #:nodoc:
|
|
39
39
|
def authorize(money, payment, options={})
|
40
40
|
post = {}
|
41
41
|
add_invoice(post, money, options)
|
42
|
-
add_payment(post, payment)
|
42
|
+
add_payment(post, payment, options)
|
43
43
|
|
44
44
|
commit(:post, 'auths', post)
|
45
45
|
end
|
@@ -132,13 +132,7 @@ module ActiveMerchant #:nodoc:
|
|
132
132
|
|
133
133
|
def add_invoice(post, money, options)
|
134
134
|
post[:amount] = amount(money)
|
135
|
-
post[:currencyCode] = options[:currency] if options[:currency]
|
136
135
|
add_order_id(post, options)
|
137
|
-
|
138
|
-
if options[:billing_address]
|
139
|
-
post[:billingDetails] = map_address(options[:billing_address])
|
140
|
-
end
|
141
|
-
|
142
136
|
end
|
143
137
|
|
144
138
|
def add_payment(post, credit_card_or_reference, options = {})
|
@@ -150,6 +144,9 @@ module ActiveMerchant #:nodoc:
|
|
150
144
|
post[:card][:cvv] = credit_card_or_reference.verification_value
|
151
145
|
post[:card][:cardExpiry] = expdate(credit_card_or_reference)
|
152
146
|
end
|
147
|
+
|
148
|
+
post[:currencyCode] = options[:currency] if options[:currency]
|
149
|
+
post[:billingDetails] = map_address(options[:billing_address]) if options[:billing_address]
|
153
150
|
end
|
154
151
|
|
155
152
|
def expdate(credit_card)
|
@@ -241,15 +238,11 @@ module ActiveMerchant #:nodoc:
|
|
241
238
|
{
|
242
239
|
'Accept' => 'application/json',
|
243
240
|
'Content-type' => 'application/json',
|
244
|
-
'Authorization' => "Basic #{
|
241
|
+
'Authorization' => "Basic #{Base64.strict_encode64(@options[:api_key].to_s)}",
|
245
242
|
'User-Agent' => "Netbanx-Paysafe v1.0/ActiveMerchant #{ActiveMerchant::VERSION}"
|
246
243
|
}
|
247
244
|
end
|
248
245
|
|
249
|
-
def basic_auth
|
250
|
-
Base64.strict_encode64("#{@options[:account_number]}:#{@options[:api_key]}")
|
251
|
-
end
|
252
|
-
|
253
246
|
def error_code_from(response)
|
254
247
|
unless success_from(response)
|
255
248
|
case response['errorCode']
|
@@ -141,7 +141,7 @@ module ActiveMerchant #:nodoc:
|
|
141
141
|
transaction = {}
|
142
142
|
transaction[:paymentCountry] = @options[:payment_country] || (options[:billing_address][:country] if options[:billing_address])
|
143
143
|
transaction[:type] = type
|
144
|
-
transaction[:ipAddress] = options[:ip]
|
144
|
+
transaction[:ipAddress] = options[:ip] || ''
|
145
145
|
transaction[:userAgent] = options[:user_agent] if options[:user_agent]
|
146
146
|
transaction[:cookie] = options[:cookie] if options[:cookie]
|
147
147
|
transaction[:deviceSessionId] = options[:device_session_id] if options[:device_session_id]
|
@@ -151,6 +151,7 @@ module ActiveMerchant #:nodoc:
|
|
151
151
|
def add_order(post, options)
|
152
152
|
order = {}
|
153
153
|
order[:accountId] = @options[:account_id]
|
154
|
+
order[:partnerId] = options[:partner_id] if options[:partner_id]
|
154
155
|
order[:referenceCode] = options[:order_id] || generate_unique_id
|
155
156
|
order[:description] = options[:description] || 'unspecified'
|
156
157
|
order[:language] = 'en'
|
@@ -192,7 +193,7 @@ module ActiveMerchant #:nodoc:
|
|
192
193
|
buyer[:dniType] = buyer_hash[:dni_type]
|
193
194
|
buyer[:cnpj] = buyer_hash[:cnpj] if options[:payment_country] == 'BR'
|
194
195
|
buyer[:emailAddress] = buyer_hash[:email]
|
195
|
-
buyer[:contactPhone] = options[:shipping_address][:phone] if options[:shipping_address]
|
196
|
+
buyer[:contactPhone] = (options[:billing_address][:phone] if options[:billing_address]) || (options[:shipping_address][:phone] if options[:shipping_address]) || ''
|
196
197
|
buyer[:shippingAddress] = shipping_address_fields(options) if options[:shipping_address]
|
197
198
|
else
|
198
199
|
buyer[:fullName] = payment_method.name.strip
|
@@ -200,7 +201,7 @@ module ActiveMerchant #:nodoc:
|
|
200
201
|
buyer[:dniType] = options[:dni_type]
|
201
202
|
buyer[:cnpj] = options[:cnpj] if options[:payment_country] == 'BR'
|
202
203
|
buyer[:emailAddress] = options[:email]
|
203
|
-
buyer[:contactPhone] = (options[:
|
204
|
+
buyer[:contactPhone] = (options[:billing_address][:phone] if options[:billing_address]) || (options[:shipping_address][:phone] if options[:shipping_address]) || ''
|
204
205
|
buyer[:shippingAddress] = shipping_address_fields(options) if options[:shipping_address]
|
205
206
|
end
|
206
207
|
post[:transaction][:order][:buyer] = buyer
|
@@ -268,7 +269,7 @@ module ActiveMerchant #:nodoc:
|
|
268
269
|
else
|
269
270
|
credit_card = {}
|
270
271
|
credit_card[:number] = payment_method.number
|
271
|
-
credit_card[:securityCode] =
|
272
|
+
credit_card[:securityCode] = payment_method.verification_value || options[:cvv]
|
272
273
|
credit_card[:expirationDate] = format(payment_method.year, :four_digits).to_s + '/' + format(payment_method.month, :two_digits).to_s
|
273
274
|
credit_card[:name] = payment_method.name.strip
|
274
275
|
credit_card[:processWithoutCvv2] = true if add_process_without_cvv2(payment_method, options)
|
@@ -277,13 +278,6 @@ module ActiveMerchant #:nodoc:
|
|
277
278
|
end
|
278
279
|
end
|
279
280
|
|
280
|
-
def add_security_code(payment_method, options)
|
281
|
-
return payment_method.verification_value unless payment_method.verification_value.blank?
|
282
|
-
return options[:cvv] unless options[:cvv].blank?
|
283
|
-
return "0000" if BRAND_MAP[payment_method.brand.to_s] == "AMEX"
|
284
|
-
"000"
|
285
|
-
end
|
286
|
-
|
287
281
|
def add_process_without_cvv2(payment_method, options)
|
288
282
|
return true if payment_method.verification_value.blank? && options[:cvv].blank?
|
289
283
|
false
|
@@ -102,6 +102,9 @@ module ActiveMerchant #:nodoc:
|
|
102
102
|
gsub(%r((M_key=)[^&]*), '\1[FILTERED]').
|
103
103
|
gsub(%r((C_cardnumber=)[^&]*), '\1[FILTERED]').
|
104
104
|
gsub(%r((C_cvv=)[^&]*), '\1[FILTERED]').
|
105
|
+
gsub(%r((C_rte=)[^&]*), '\1[FILTERED]').
|
106
|
+
gsub(%r((C_acct=)[^&]*), '\1[FILTERED]').
|
107
|
+
gsub(%r((C_ssn=)[^&]*), '\1[FILTERED]').
|
105
108
|
gsub(%r((<ns1:CARDNUMBER>).+(</ns1:CARDNUMBER>)), '\1[FILTERED]\2').
|
106
109
|
gsub(%r((<ns1:M_ID>).+(</ns1:M_ID>)), '\1[FILTERED]\2').
|
107
110
|
gsub(%r((<ns1:M_KEY>).+(</ns1:M_KEY>)), '\1[FILTERED]\2')
|
@@ -3,11 +3,14 @@ require "nokogiri"
|
|
3
3
|
module ActiveMerchant #:nodoc:
|
4
4
|
module Billing #:nodoc:
|
5
5
|
class WorldpayUsGateway < Gateway
|
6
|
+
class_attribute :backup_url
|
7
|
+
|
6
8
|
self.display_name = "Worldpay US"
|
7
9
|
self.homepage_url = "http://www.worldpay.com/us"
|
8
10
|
|
9
11
|
# No sandbox, just use test cards.
|
10
|
-
self.live_url
|
12
|
+
self.live_url = 'https://trans.worldpay.us/cgi-bin/process.cgi'
|
13
|
+
self.backup_url = 'https://trans.gwtx01.com/cgi-bin/process.cgi'
|
11
14
|
|
12
15
|
self.supported_countries = ['US']
|
13
16
|
self.default_currency = 'USD'
|
@@ -25,7 +28,7 @@ module ActiveMerchant #:nodoc:
|
|
25
28
|
add_payment_method(post, payment_method)
|
26
29
|
add_customer_data(post, options)
|
27
30
|
|
28
|
-
commit('purchase', post)
|
31
|
+
commit('purchase', options, post)
|
29
32
|
end
|
30
33
|
|
31
34
|
def authorize(money, payment, options={})
|
@@ -34,7 +37,7 @@ module ActiveMerchant #:nodoc:
|
|
34
37
|
add_credit_card(post, payment)
|
35
38
|
add_customer_data(post, options)
|
36
39
|
|
37
|
-
commit('authorize', post)
|
40
|
+
commit('authorize', options, post)
|
38
41
|
end
|
39
42
|
|
40
43
|
def capture(amount, authorization, options={})
|
@@ -43,7 +46,7 @@ module ActiveMerchant #:nodoc:
|
|
43
46
|
add_reference(post, authorization)
|
44
47
|
add_customer_data(post, options)
|
45
48
|
|
46
|
-
commit('capture', post)
|
49
|
+
commit('capture', options, post)
|
47
50
|
end
|
48
51
|
|
49
52
|
def refund(amount, authorization, options={})
|
@@ -52,14 +55,14 @@ module ActiveMerchant #:nodoc:
|
|
52
55
|
add_reference(post, authorization)
|
53
56
|
add_customer_data(post, options)
|
54
57
|
|
55
|
-
commit("refund", post)
|
58
|
+
commit("refund", options, post)
|
56
59
|
end
|
57
60
|
|
58
61
|
def void(authorization, options={})
|
59
62
|
post = {}
|
60
63
|
add_reference(post, authorization)
|
61
64
|
|
62
|
-
commit('void', post)
|
65
|
+
commit('void', options, post)
|
63
66
|
end
|
64
67
|
|
65
68
|
def verify(credit_card, options={})
|
@@ -71,6 +74,10 @@ module ActiveMerchant #:nodoc:
|
|
71
74
|
|
72
75
|
private
|
73
76
|
|
77
|
+
def url(options)
|
78
|
+
options[:use_backup_url].to_s == "true" ? self.backup_url : self.live_url
|
79
|
+
end
|
80
|
+
|
74
81
|
def add_customer_data(post, options)
|
75
82
|
if(billing_address = (options[:billing_address] || options[:address]))
|
76
83
|
post[:ci_companyname] = billing_address[:company]
|
@@ -162,7 +169,7 @@ module ActiveMerchant #:nodoc:
|
|
162
169
|
"void" => "ns_void",
|
163
170
|
}
|
164
171
|
|
165
|
-
def commit(action, post)
|
172
|
+
def commit(action, options, post)
|
166
173
|
post[:action] = ACTIONS[action] unless post[:action]
|
167
174
|
post[:acctid] = @options[:acctid]
|
168
175
|
post[:subid] = @options[:subid]
|
@@ -170,7 +177,7 @@ module ActiveMerchant #:nodoc:
|
|
170
177
|
|
171
178
|
post[:authonly] = '1' if action == 'authorize'
|
172
179
|
|
173
|
-
raw = parse(ssl_post(
|
180
|
+
raw = parse(ssl_post(url(options), post.to_query))
|
174
181
|
|
175
182
|
succeeded = success_from(raw['result'])
|
176
183
|
Response.new(
|
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.75.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: 2017-
|
11
|
+
date: 2017-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|