activemerchant 1.93.0 → 1.94.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +17 -0
- data/lib/active_merchant/billing/credit_card_methods.rb +2 -2
- data/lib/active_merchant/billing/gateways/adyen.rb +39 -11
- data/lib/active_merchant/billing/gateways/card_connect.rb +1 -0
- data/lib/active_merchant/billing/gateways/checkout_v2.rb +71 -44
- data/lib/active_merchant/billing/gateways/cyber_source.rb +9 -8
- data/lib/active_merchant/billing/gateways/elavon.rb +9 -0
- data/lib/active_merchant/billing/gateways/mundipagg.rb +2 -1
- data/lib/active_merchant/billing/gateways/stripe.rb +17 -1
- data/lib/active_merchant/billing/gateways/worldpay.rb +7 -2
- 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: 5a2728fa6c7116ab636feb7ba715c2e4d5305fb54898d1687d633cbfb2a4795f
|
4
|
+
data.tar.gz: d63425c0a65919bc4a2a007d41b145a355a341667be616ae8fc0337ce2d8d145
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f577b5623169e0e7a1a12f4f2fa212517fba33a5ec40fb61a8e14c9df629939a4e31ed6a24ed9fabe783404553ff98ff8bdb5f0fabdc3c9da8fe8bc31c8ad97f
|
7
|
+
data.tar.gz: 2d37c0742319a5533236acaeb9e885692b8610208d540adda49dc21147584a3dbc50ba28632d014fb7d280d4ff9202032e5fe05dde1b1741eabf4889e9a08a42
|
data/CHANGELOG
CHANGED
@@ -1,6 +1,23 @@
|
|
1
1
|
= ActiveMerchant CHANGELOG
|
2
2
|
|
3
3
|
== HEAD
|
4
|
+
== Version 1.94.0 (May 21, 2019)
|
5
|
+
* Mundipagg: Fix number lengths for both VR and Sodexo [dtykocki] #3195
|
6
|
+
* Stripe: Support show and list webhook endpoints [jknipp] #3196
|
7
|
+
* CardConnect: Add frontendid parameter to requests [gcatlin] #3198
|
8
|
+
* Adyen: Correct formatting of Billing Address [nfarve] #3200
|
9
|
+
* Stripe: Stripe: Show payment source [jknipp] #3202
|
10
|
+
* Checkout V2: Checkout V2: Correct success criteria [curiousepic] #3205
|
11
|
+
* Adyen: Add normalized hash of 3DS 2.0 data fields from web browsers [davidsantoso] #3207
|
12
|
+
* Stripe: Do not attempt application fee refund if refund was not successful [jasonwebster] #3206
|
13
|
+
* Elavon: Send transaction_currency if currency is provided [gcatlin] #3201
|
14
|
+
* Elavon: Multi-currency support [jknipp] #3210
|
15
|
+
* Adyen: Support preAuths and Synchronous Adjusts [curiousepic] #3212
|
16
|
+
* WorldPay: Support Unknown Card Type [tanyajajodia] #3213
|
17
|
+
* Mundipagg: Make gateway_affiliation_id an option [curiousepic] #3219
|
18
|
+
* CyberSource: Adds Elo Card Type [tanyajajodia] #3220
|
19
|
+
* CyberSource: Support standalone credit for cards [curiousepic] 3225
|
20
|
+
|
4
21
|
== Version 1.93.0 (April 18, 2019)
|
5
22
|
* Stripe: Do not consider a refund unsuccessful if only refunding the fee failed [jasonwebster] #3188
|
6
23
|
* Stripe: Fix webhook creation for connected account [jknipp] #3193
|
@@ -13,8 +13,8 @@ module ActiveMerchant #:nodoc:
|
|
13
13
|
'dankort' => ->(num) { num =~ /^5019\d{12}$/ },
|
14
14
|
'maestro' => ->(num) { (12..19).cover?(num&.size) && in_bin_range?(num.slice(0, 6), MAESTRO_RANGES) },
|
15
15
|
'forbrugsforeningen' => ->(num) { num =~ /^600722\d{10}$/ },
|
16
|
-
'sodexo' => ->(num) { num =~ /^(606071|603389|606070|606069|606068|600818)\d{
|
17
|
-
'vr' => ->(num) { num =~ /^(627416|637036)\d{
|
16
|
+
'sodexo' => ->(num) { num =~ /^(606071|603389|606070|606069|606068|600818)\d{10}$/ },
|
17
|
+
'vr' => ->(num) { num =~ /^(627416|637036)\d{10}$/ },
|
18
18
|
'carnet' => lambda { |num|
|
19
19
|
num&.size == 16 && (
|
20
20
|
in_bin_range?(num.slice(0, 6), CARNET_RANGES) ||
|
@@ -80,6 +80,7 @@ module ActiveMerchant #:nodoc:
|
|
80
80
|
post = init_post(options)
|
81
81
|
add_invoice_for_modification(post, money, options)
|
82
82
|
add_reference(post, authorization, options)
|
83
|
+
add_extra_data(post, nil, options)
|
83
84
|
commit('adjustAuthorisation', post, options)
|
84
85
|
end
|
85
86
|
|
@@ -174,6 +175,9 @@ module ActiveMerchant #:nodoc:
|
|
174
175
|
post[:additionalData][:overwriteBrand] = normalize(options[:overwrite_brand]) if options[:overwrite_brand]
|
175
176
|
post[:additionalData][:customRoutingFlag] = options[:custom_routing_flag] if options[:custom_routing_flag]
|
176
177
|
post[:additionalData]['paymentdatasource.type'] = NETWORK_TOKENIZATION_CARD_SOURCE[payment.source.to_s] if payment.is_a?(NetworkTokenizationCreditCard)
|
178
|
+
post[:additionalData][:authorisationType] = options[:authorisation_type] if options[:authorisation_type]
|
179
|
+
post[:additionalData][:adjustAuthorisationData] = options[:adjust_authorisation_data] if options[:adjust_authorisation_data]
|
180
|
+
post[:additionalData][:RequestedTestAcquirerResponseCode] = options[:requested_test_acquirer_response_code] if options[:requested_test_acquirer_response_code] && test?
|
177
181
|
post[:deviceFingerprint] = options[:device_fingerprint] if options[:device_fingerprint]
|
178
182
|
add_risk_data(post, options)
|
179
183
|
end
|
@@ -214,13 +218,13 @@ module ActiveMerchant #:nodoc:
|
|
214
218
|
def add_address(post, options)
|
215
219
|
return unless post[:card]&.kind_of?(Hash)
|
216
220
|
if (address = options[:billing_address] || options[:address]) && address[:country]
|
217
|
-
post[:
|
218
|
-
post[:
|
219
|
-
post[:
|
220
|
-
post[:
|
221
|
-
post[:
|
222
|
-
post[:
|
223
|
-
post[:
|
221
|
+
post[:billingAddress] = {}
|
222
|
+
post[:billingAddress][:street] = address[:address1] || 'N/A'
|
223
|
+
post[:billingAddress][:houseNumberOrName] = address[:address2] || 'N/A'
|
224
|
+
post[:billingAddress][:postalCode] = address[:zip] if address[:zip]
|
225
|
+
post[:billingAddress][:city] = address[:city] || 'N/A'
|
226
|
+
post[:billingAddress][:stateOrProvince] = address[:state] || 'N/A'
|
227
|
+
post[:billingAddress][:country] = address[:country] if address[:country]
|
224
228
|
end
|
225
229
|
end
|
226
230
|
|
@@ -308,9 +312,31 @@ module ActiveMerchant #:nodoc:
|
|
308
312
|
end
|
309
313
|
|
310
314
|
def add_3ds(post, options)
|
311
|
-
|
312
|
-
|
313
|
-
|
315
|
+
if three_ds_2_options = options[:three_ds_2]
|
316
|
+
if browser_info = three_ds_2_options[:browser_info]
|
317
|
+
post[:browserInfo] = {
|
318
|
+
acceptHeader: browser_info[:accept_header],
|
319
|
+
colorDepth: browser_info[:depth],
|
320
|
+
javaEnabled: browser_info[:java],
|
321
|
+
language: browser_info[:language],
|
322
|
+
screenHeight: browser_info[:height],
|
323
|
+
screenWidth: browser_info[:width],
|
324
|
+
timeZoneOffset: browser_info[:timezone],
|
325
|
+
userAgent: browser_info[:user_agent]
|
326
|
+
}
|
327
|
+
|
328
|
+
if device_channel = three_ds_2_options[:channel]
|
329
|
+
post[:threeDS2RequestData] = {
|
330
|
+
deviceChannel: device_channel,
|
331
|
+
notificationURL: three_ds_2_options[:notification_url] || 'https://example.com/notification'
|
332
|
+
}
|
333
|
+
end
|
334
|
+
end
|
335
|
+
else
|
336
|
+
return unless options[:execute_threed] || options[:threed_dynamic]
|
337
|
+
post[:browserInfo] = { userAgent: options[:user_agent], acceptHeader: options[:accept_header] }
|
338
|
+
post[:additionalData] = { executeThreeD: 'true' } if options[:execute_threed]
|
339
|
+
end
|
314
340
|
end
|
315
341
|
|
316
342
|
def parse(body)
|
@@ -374,8 +400,10 @@ module ActiveMerchant #:nodoc:
|
|
374
400
|
case action.to_s
|
375
401
|
when 'authorise', 'authorise3d'
|
376
402
|
['Authorised', 'Received', 'RedirectShopper'].include?(response['resultCode'])
|
377
|
-
when 'capture', 'refund', 'cancel'
|
403
|
+
when 'capture', 'refund', 'cancel'
|
378
404
|
response['response'] == "[#{action}-received]"
|
405
|
+
when 'adjustAuthorisation'
|
406
|
+
response['response'] == 'Authorised' || response['response'] == '[adjustAuthorisation-received]'
|
379
407
|
else
|
380
408
|
false
|
381
409
|
end
|
@@ -267,6 +267,7 @@ module ActiveMerchant #:nodoc:
|
|
267
267
|
end
|
268
268
|
|
269
269
|
def commit(action, parameters, verb: :put, path: '')
|
270
|
+
parameters[:frontendid] = application_id
|
270
271
|
parameters[:merchid] = @options[:merchant_id]
|
271
272
|
url = url(action, path)
|
272
273
|
response = parse(ssl_request(verb, url, post_data(parameters), headers))
|
@@ -1,15 +1,15 @@
|
|
1
1
|
module ActiveMerchant #:nodoc:
|
2
2
|
module Billing #:nodoc:
|
3
3
|
class CheckoutV2Gateway < Gateway
|
4
|
-
self.display_name = 'Checkout.com
|
4
|
+
self.display_name = 'Checkout.com Unified Payments'
|
5
5
|
self.homepage_url = 'https://www.checkout.com/'
|
6
|
-
self.live_url = 'https://
|
7
|
-
self.test_url = 'https://sandbox.checkout.com
|
6
|
+
self.live_url = 'https://api.checkout.com'
|
7
|
+
self.test_url = 'https://api.sandbox.checkout.com'
|
8
8
|
|
9
9
|
self.supported_countries = ['AD', 'AE', 'AT', 'BE', 'BG', 'CH', 'CY', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FO', 'FI', 'FR', 'GB', 'GI', 'GL', 'GR', 'HR', 'HU', 'IE', 'IS', 'IL', 'IT', 'LI', 'LT', 'LU', 'LV', 'MC', 'MT', 'NL', 'NO', 'PL', 'PT', 'RO', 'SE', 'SI', 'SM', 'SK', 'SJ', 'TR', 'VA']
|
10
10
|
self.default_currency = 'USD'
|
11
11
|
self.money_format = :cents
|
12
|
-
self.supported_cardtypes = [:visa, :master, :american_express, :diners_club]
|
12
|
+
self.supported_cardtypes = [:visa, :master, :american_express, :diners_club, :maestro, :discover]
|
13
13
|
|
14
14
|
def initialize(options={})
|
15
15
|
requires!(options, :secret_key)
|
@@ -30,11 +30,12 @@ module ActiveMerchant #:nodoc:
|
|
30
30
|
|
31
31
|
def authorize(amount, payment_method, options={})
|
32
32
|
post = {}
|
33
|
-
post[:
|
33
|
+
post[:capture] = false
|
34
34
|
add_invoice(post, amount, options)
|
35
35
|
add_payment_method(post, payment_method)
|
36
36
|
add_customer_data(post, options)
|
37
37
|
add_transaction_data(post, options)
|
38
|
+
add_3ds(post, options)
|
38
39
|
|
39
40
|
commit(:authorize, post)
|
40
41
|
end
|
@@ -81,49 +82,69 @@ module ActiveMerchant #:nodoc:
|
|
81
82
|
private
|
82
83
|
|
83
84
|
def add_invoice(post, money, options)
|
84
|
-
post[:
|
85
|
-
post[:
|
85
|
+
post[:amount] = localized_amount(money, options[:currency])
|
86
|
+
post[:reference] = options[:order_id]
|
86
87
|
post[:currency] = options[:currency] || currency(money)
|
87
|
-
|
88
|
-
|
89
|
-
|
88
|
+
if options[:descriptor_name] || options[:descriptor_city]
|
89
|
+
post[:billing_descriptor] = {}
|
90
|
+
post[:billing_descriptor][:name] = options[:descriptor_name] if options[:descriptor_name]
|
91
|
+
post[:billing_descriptor][:city] = options[:descriptor_city] if options[:descriptor_city]
|
92
|
+
end
|
93
|
+
post[:metadata] = {}
|
94
|
+
post[:metadata][:udf5] = application_id || 'ActiveMerchant'
|
90
95
|
end
|
91
96
|
|
92
97
|
def add_payment_method(post, payment_method)
|
93
|
-
post[:
|
94
|
-
post[:
|
95
|
-
post[:
|
96
|
-
post[:
|
97
|
-
post[:
|
98
|
-
post[:
|
98
|
+
post[:source] = {}
|
99
|
+
post[:source][:type] = 'card'
|
100
|
+
post[:source][:name] = payment_method.name
|
101
|
+
post[:source][:number] = payment_method.number
|
102
|
+
post[:source][:cvv] = payment_method.verification_value
|
103
|
+
post[:source][:expiry_year] = format(payment_method.year, :four_digits)
|
104
|
+
post[:source][:expiry_month] = format(payment_method.month, :two_digits)
|
99
105
|
end
|
100
106
|
|
101
107
|
def add_customer_data(post, options)
|
102
|
-
post[:
|
103
|
-
post[:
|
108
|
+
post[:customer] = {}
|
109
|
+
post[:customer][:email] = options[:email] || nil
|
110
|
+
post[:payment_ip] = options[:ip] if options[:ip]
|
104
111
|
address = options[:billing_address]
|
105
|
-
if(address && post[:
|
106
|
-
post[:
|
107
|
-
post[:
|
108
|
-
post[:
|
109
|
-
post[:
|
110
|
-
post[:
|
111
|
-
post[:
|
112
|
-
post[:
|
113
|
-
post[:
|
112
|
+
if(address && post[:source])
|
113
|
+
post[:source][:billing_address] = {}
|
114
|
+
post[:source][:billing_address][:address_line1] = address[:address1] unless address[:address1].blank?
|
115
|
+
post[:source][:billing_address][:address_line2] = address[:address2] unless address[:address2].blank?
|
116
|
+
post[:source][:billing_address][:city] = address[:city] unless address[:city].blank?
|
117
|
+
post[:source][:billing_address][:state] = address[:state] unless address[:state].blank?
|
118
|
+
post[:source][:billing_address][:country] = address[:country] unless address[:country].blank?
|
119
|
+
post[:source][:billing_address][:zip] = address[:zip] unless address[:zip].blank?
|
120
|
+
post[:source][:phone] = { number: address[:phone] } unless address[:phone].blank?
|
114
121
|
end
|
115
122
|
end
|
116
123
|
|
117
124
|
def add_transaction_data(post, options={})
|
118
|
-
post[:
|
119
|
-
post[:
|
120
|
-
post[:
|
125
|
+
post[:card_on_file] = true if options[:card_on_file] == true
|
126
|
+
post[:payment_type] = 'Regular' if options[:transaction_indicator] == 1
|
127
|
+
post[:payment_type] = 'Recurring' if options[:transaction_indicator] == 2
|
128
|
+
post[:previous_payment_id] = options[:previous_charge_id] if options[:previous_charge_id]
|
129
|
+
end
|
130
|
+
|
131
|
+
def add_3ds(post, options)
|
132
|
+
if options[:three_d_secure]
|
133
|
+
post[:'3ds'] = {}
|
134
|
+
post[:'3ds'][:enabled] = true
|
135
|
+
post[:'3ds'][:eci] = options[:eci] if options[:eci]
|
136
|
+
post[:'3ds'][:cryptogram] = options[:cavv] if options[:cavv]
|
137
|
+
post[:'3ds'][:xid] = options[:xid] if options[:xid]
|
138
|
+
end
|
121
139
|
end
|
122
140
|
|
123
141
|
def commit(action, post, authorization = nil)
|
124
142
|
begin
|
125
143
|
raw_response = ssl_post(url(post, action, authorization), post.to_json, headers)
|
126
144
|
response = parse(raw_response)
|
145
|
+
if action == :capture && response.key?('_links')
|
146
|
+
response['id'] = response['_links']['payment']['href'].split('/')[-1]
|
147
|
+
end
|
127
148
|
rescue ResponseError => e
|
128
149
|
raise unless(e.response.code.to_s =~ /4\d\d/)
|
129
150
|
response = parse(e.response.body)
|
@@ -160,9 +181,15 @@ module ActiveMerchant #:nodoc:
|
|
160
181
|
|
161
182
|
def url(post, action, authorization)
|
162
183
|
if action == :authorize
|
163
|
-
"#{base_url}/
|
184
|
+
"#{base_url}/payments"
|
185
|
+
elsif action == :capture
|
186
|
+
"#{base_url}/payments/#{authorization}/captures"
|
187
|
+
elsif action == :refund
|
188
|
+
"#{base_url}/payments/#{authorization}/refunds"
|
189
|
+
elsif action == :void
|
190
|
+
"#{base_url}/payments/#{authorization}/voids"
|
164
191
|
else
|
165
|
-
"#{base_url}/
|
192
|
+
"#{base_url}/payments/#{authorization}/#{action}"
|
166
193
|
end
|
167
194
|
end
|
168
195
|
|
@@ -171,33 +198,33 @@ module ActiveMerchant #:nodoc:
|
|
171
198
|
end
|
172
199
|
|
173
200
|
def avs_result(response)
|
174
|
-
response['
|
201
|
+
response['source'] && response['source']['avs_check'] ? AVSResult.new(code: response['source']['avs_check']) : nil
|
175
202
|
end
|
176
203
|
|
177
204
|
def cvv_result(response)
|
178
|
-
response['
|
205
|
+
response['source'] && response['source']['cvv_check'] ? CVVResult.new(response['source']['cvv_check']) : nil
|
179
206
|
end
|
180
207
|
|
181
208
|
def parse(body)
|
182
209
|
JSON.parse(body)
|
183
210
|
rescue JSON::ParserError
|
184
211
|
{
|
185
|
-
'message' => 'Invalid JSON response received from
|
212
|
+
'message' => 'Invalid JSON response received from Checkout.com Unified Payments Gateway. Please contact Checkout.com if you continue to receive this message.',
|
186
213
|
'raw_response' => scrub(body)
|
187
214
|
}
|
188
215
|
end
|
189
216
|
|
190
217
|
def success_from(response)
|
191
|
-
|
218
|
+
response['response_summary'] == 'Approved' || !response.key?('response_summary') && response.key?('action_id')
|
192
219
|
end
|
193
220
|
|
194
221
|
def message_from(succeeded, response)
|
195
222
|
if succeeded
|
196
223
|
'Succeeded'
|
197
|
-
elsif response['
|
198
|
-
response['
|
224
|
+
elsif response['error_type']
|
225
|
+
response['error_type'] + ': ' + response['error_codes'].first
|
199
226
|
else
|
200
|
-
response['
|
227
|
+
response['response_summary'] || response['response_code'] || 'Unable to read error message'
|
201
228
|
end
|
202
229
|
end
|
203
230
|
|
@@ -220,12 +247,12 @@ module ActiveMerchant #:nodoc:
|
|
220
247
|
|
221
248
|
def error_code_from(succeeded, response)
|
222
249
|
return if succeeded
|
223
|
-
if response['
|
224
|
-
"#{response["
|
225
|
-
elsif response['
|
226
|
-
response['
|
250
|
+
if response['error_type'] && response['error_codes']
|
251
|
+
"#{response["error_type"]}: #{response["error_codes"].join(", ")}"
|
252
|
+
elsif response['error_type']
|
253
|
+
response['error_type']
|
227
254
|
else
|
228
|
-
STANDARD_ERROR_CODE_MAPPING[response['
|
255
|
+
STANDARD_ERROR_CODE_MAPPING[response['response_code']]
|
229
256
|
end
|
230
257
|
end
|
231
258
|
end
|
@@ -26,7 +26,7 @@ module ActiveMerchant #:nodoc:
|
|
26
26
|
|
27
27
|
XSD_VERSION = '1.153'
|
28
28
|
|
29
|
-
self.supported_cardtypes = [:visa, :master, :american_express, :discover, :diners_club, :jcb, :dankort, :maestro]
|
29
|
+
self.supported_cardtypes = [:visa, :master, :american_express, :discover, :diners_club, :jcb, :dankort, :maestro, :elo]
|
30
30
|
self.supported_countries = %w(US BR CA CN DK FI FR DE IN JP MX NO SE GB SG LB)
|
31
31
|
|
32
32
|
self.default_currency = 'USD'
|
@@ -43,7 +43,8 @@ module ActiveMerchant #:nodoc:
|
|
43
43
|
:diners_club => '005',
|
44
44
|
:jcb => '007',
|
45
45
|
:dankort => '034',
|
46
|
-
:maestro => '042'
|
46
|
+
:maestro => '042',
|
47
|
+
:elo => '054'
|
47
48
|
}
|
48
49
|
|
49
50
|
@@response_codes = {
|
@@ -142,9 +143,10 @@ module ActiveMerchant #:nodoc:
|
|
142
143
|
end
|
143
144
|
end
|
144
145
|
|
145
|
-
# Adds credit to a subscription (stand alone credit).
|
146
|
-
def credit(money,
|
147
|
-
|
146
|
+
# Adds credit to a card or subscription (stand alone credit).
|
147
|
+
def credit(money, creditcard_or_reference, options = {})
|
148
|
+
setup_address_hash(options)
|
149
|
+
commit(build_credit_request(money, creditcard_or_reference, options), :credit, money, options)
|
148
150
|
end
|
149
151
|
|
150
152
|
# Stores a customer subscription/profile with type "on-demand".
|
@@ -327,11 +329,10 @@ module ActiveMerchant #:nodoc:
|
|
327
329
|
xml.target!
|
328
330
|
end
|
329
331
|
|
330
|
-
def build_credit_request(money,
|
332
|
+
def build_credit_request(money, creditcard_or_reference, options)
|
331
333
|
xml = Builder::XmlMarkup.new :indent => 2
|
332
334
|
|
333
|
-
|
334
|
-
add_subscription(xml, options, reference)
|
335
|
+
add_payment_method_or_subscription(xml, money, creditcard_or_reference, options)
|
335
336
|
add_credit_service(xml)
|
336
337
|
|
337
338
|
xml.target!
|
@@ -42,6 +42,7 @@ module ActiveMerchant #:nodoc:
|
|
42
42
|
else
|
43
43
|
add_creditcard(form, payment_method)
|
44
44
|
end
|
45
|
+
add_currency(form, money, options)
|
45
46
|
add_address(form, options)
|
46
47
|
add_customer_data(form, options)
|
47
48
|
add_test_mode(form, options)
|
@@ -54,6 +55,7 @@ module ActiveMerchant #:nodoc:
|
|
54
55
|
add_salestax(form, options)
|
55
56
|
add_invoice(form, options)
|
56
57
|
add_creditcard(form, creditcard)
|
58
|
+
add_currency(form, money, options)
|
57
59
|
add_address(form, options)
|
58
60
|
add_customer_data(form, options)
|
59
61
|
add_test_mode(form, options)
|
@@ -69,6 +71,7 @@ module ActiveMerchant #:nodoc:
|
|
69
71
|
add_approval_code(form, authorization)
|
70
72
|
add_invoice(form, options)
|
71
73
|
add_creditcard(form, options[:credit_card])
|
74
|
+
add_currency(form, money, options)
|
72
75
|
add_customer_data(form, options)
|
73
76
|
add_test_mode(form, options)
|
74
77
|
else
|
@@ -102,6 +105,7 @@ module ActiveMerchant #:nodoc:
|
|
102
105
|
form = {}
|
103
106
|
add_invoice(form, options)
|
104
107
|
add_creditcard(form, creditcard)
|
108
|
+
add_currency(form, money, options)
|
105
109
|
add_address(form, options)
|
106
110
|
add_customer_data(form, options)
|
107
111
|
add_test_mode(form, options)
|
@@ -178,6 +182,11 @@ module ActiveMerchant #:nodoc:
|
|
178
182
|
form[:last_name] = truncate(creditcard.last_name, 30)
|
179
183
|
end
|
180
184
|
|
185
|
+
def add_currency(form, money, options)
|
186
|
+
currency = options[:currency] || currency(money)
|
187
|
+
form[:transaction_currency] = currency if currency && (@options[:multi_currency] || options[:multi_currency])
|
188
|
+
end
|
189
|
+
|
181
190
|
def add_token(form, token)
|
182
191
|
form[:token] = token
|
183
192
|
end
|
@@ -155,7 +155,8 @@ module ActiveMerchant #:nodoc:
|
|
155
155
|
post[:customer][:name] = payment.name if post[:customer]
|
156
156
|
post[:customer_id] = parse_auth(payment)[0] if payment.is_a?(String)
|
157
157
|
post[:payment] = {}
|
158
|
-
|
158
|
+
affiliation = options[:gateway_affiliation_id] || @options[:gateway_id]
|
159
|
+
post[:payment][:gateway_affiliation_id] = affiliation if affiliation
|
159
160
|
post[:payment][:metadata] = { mundipagg_payment_method_code: '1' } if test?
|
160
161
|
if voucher?(payment)
|
161
162
|
add_voucher(post, payment, options)
|
@@ -152,7 +152,7 @@ module ActiveMerchant #:nodoc:
|
|
152
152
|
|
153
153
|
response = commit(:post, "charges/#{CGI.escape(identification)}/refunds", post, options)
|
154
154
|
|
155
|
-
if options[:refund_fee_amount] && options[:refund_fee_amount].to_s != '0'
|
155
|
+
if response.success? && options[:refund_fee_amount] && options[:refund_fee_amount].to_s != '0'
|
156
156
|
charge = api_request(:get, "charges/#{CGI.escape(identification)}", nil, options)
|
157
157
|
|
158
158
|
if application_fee = charge['application_fee']
|
@@ -309,6 +309,10 @@ module ActiveMerchant #:nodoc:
|
|
309
309
|
commit(:post, 'sources', post, options)
|
310
310
|
end
|
311
311
|
|
312
|
+
def show_source(source_id, options)
|
313
|
+
commit(:get, "sources/#{source_id}", nil, options)
|
314
|
+
end
|
315
|
+
|
312
316
|
def create_webhook_endpoint(options, events)
|
313
317
|
post = {}
|
314
318
|
post[:url] = options[:callback_url]
|
@@ -322,6 +326,18 @@ module ActiveMerchant #:nodoc:
|
|
322
326
|
commit(:delete, "webhook_endpoints/#{options[:webhook_id]}", {}, options)
|
323
327
|
end
|
324
328
|
|
329
|
+
def show_webhook_endpoint(options)
|
330
|
+
options.delete(:stripe_account)
|
331
|
+
commit(:get, "webhook_endpoints/#{options[:webhook_id]}", nil, options)
|
332
|
+
end
|
333
|
+
|
334
|
+
def list_webhook_endpoints(options)
|
335
|
+
params = {}
|
336
|
+
params[:limit] = options[:limit] if options[:limit]
|
337
|
+
options.delete(:stripe_account)
|
338
|
+
commit(:get, "webhook_endpoints?#{post_data(params)}", nil, options)
|
339
|
+
end
|
340
|
+
|
325
341
|
def create_post_for_auth_or_purchase(money, payment, options)
|
326
342
|
post = {}
|
327
343
|
|
@@ -21,7 +21,8 @@ module ActiveMerchant #:nodoc:
|
|
21
21
|
'jcb' => 'JCB-SSL',
|
22
22
|
'maestro' => 'MAESTRO-SSL',
|
23
23
|
'diners_club' => 'DINERS-SSL',
|
24
|
-
'elo' => 'ELO-SSL'
|
24
|
+
'elo' => 'ELO-SSL',
|
25
|
+
'unknown' => 'CARD-SSL'
|
25
26
|
}
|
26
27
|
|
27
28
|
AVS_CODE_MAP = {
|
@@ -252,7 +253,7 @@ module ActiveMerchant #:nodoc:
|
|
252
253
|
end
|
253
254
|
else
|
254
255
|
xml.tag! 'paymentDetails', credit_fund_transfer_attribute(options) do
|
255
|
-
xml.tag!
|
256
|
+
xml.tag! card_code_for(payment_method) do
|
256
257
|
xml.tag! 'cardNumber', payment_method.number
|
257
258
|
xml.tag! 'expiryDate' do
|
258
259
|
xml.tag! 'date', 'month' => format(payment_method.month, :two_digits), 'year' => format(payment_method.year, :four_digits)
|
@@ -502,6 +503,10 @@ module ActiveMerchant #:nodoc:
|
|
502
503
|
return 3 if three_decimal_currency?(currency)
|
503
504
|
return 2
|
504
505
|
end
|
506
|
+
|
507
|
+
def card_code_for(payment_method)
|
508
|
+
CARD_CODES[card_brand(payment_method)] || CARD_CODES['unknown']
|
509
|
+
end
|
505
510
|
end
|
506
511
|
end
|
507
512
|
end
|
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.94.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: 2019-
|
11
|
+
date: 2019-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|