activemerchant 1.78.0 → 1.79.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +49 -0
- data/lib/active_merchant.rb +2 -5
- data/lib/active_merchant/billing/credit_card_methods.rb +3 -1
- data/lib/active_merchant/billing/gateways/adyen.rb +17 -2
- data/lib/active_merchant/billing/gateways/authorize_net.rb +16 -11
- data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +1 -0
- data/lib/active_merchant/billing/gateways/borgun.rb +0 -1
- data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +1 -0
- data/lib/active_merchant/billing/gateways/braintree_blue.rb +17 -4
- data/lib/active_merchant/billing/gateways/checkout_v2.rb +7 -0
- data/lib/active_merchant/billing/gateways/clearhaus.rb +0 -2
- data/lib/active_merchant/billing/gateways/cyber_source.rb +11 -2
- data/lib/active_merchant/billing/gateways/ebanx.rb +3 -3
- data/lib/active_merchant/billing/gateways/elavon.rb +1 -1
- data/lib/active_merchant/billing/gateways/first_pay.rb +10 -9
- data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +11 -0
- data/lib/active_merchant/billing/gateways/merchant_warrior.rb +12 -0
- data/lib/active_merchant/billing/gateways/migs.rb +0 -2
- data/lib/active_merchant/billing/gateways/mundipagg.rb +291 -0
- data/lib/active_merchant/billing/gateways/nab_transact.rb +4 -4
- data/lib/active_merchant/billing/gateways/paymentez.rb +6 -13
- data/lib/active_merchant/billing/gateways/paypal.rb +0 -12
- data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +14 -0
- data/lib/active_merchant/billing/gateways/paystation.rb +10 -0
- data/lib/active_merchant/billing/gateways/psigate.rb +11 -0
- data/lib/active_merchant/billing/gateways/qbms.rb +11 -0
- data/lib/active_merchant/billing/gateways/realex.rb +14 -1
- data/lib/active_merchant/billing/gateways/redsys.rb +1 -1
- data/lib/active_merchant/billing/gateways/safe_charge.rb +8 -4
- data/lib/active_merchant/billing/gateways/smart_ps.rb +1 -1
- data/lib/active_merchant/billing/gateways/spreedly_core.rb +41 -6
- data/lib/active_merchant/billing/gateways/stripe.rb +14 -4
- data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +6 -1
- data/lib/active_merchant/billing/gateways/worldpay.rb +45 -14
- data/lib/active_merchant/connection.rb +38 -9
- data/lib/active_merchant/net_http_ssl_connection.rb +9 -0
- data/lib/active_merchant/network_connection_retries.rb +2 -0
- data/lib/active_merchant/posts_data.rb +10 -0
- data/lib/active_merchant/version.rb +1 -1
- data/lib/support/ssl_version.rb +87 -0
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc758ea4c33fcefecc9d94e1dc19c858d01292b8
|
4
|
+
data.tar.gz: 0c81fa395b72670baf36ba18fbb3c7bd2e246c0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bbfe31171a450822d61d4c2d9eed29ae72fa5e85d501616c789ebbbf283f722bc3072fdf716b8eaedeebbd901461e0a701c0f258720b5f1547b2ff6f25242259
|
7
|
+
data.tar.gz: 2e65932a609a54ffa6d63b70cf004b536160e00e6cb3cbc3d6cfa8c63e28ccb92bbbad63655e7071829677724cc35bb2b8475fbc96beb27f80691ed2a454120e
|
data/CHANGELOG
CHANGED
@@ -2,6 +2,54 @@
|
|
2
2
|
|
3
3
|
== HEAD
|
4
4
|
|
5
|
+
== Version 1.79.0 (May 30, 2018)
|
6
|
+
* Allow setting min/max SSL version for a connection on Ruby 2.5 [bdewater] #2775
|
7
|
+
* Add `gateways:ssl:min_version` rake task to test upcoming TLS 1.0 deprecation deadline [bdewater] #2775
|
8
|
+
* Log negotiated SSL version and cipher [bdewater + methodmissing] #2862
|
9
|
+
* Remove support for Rails < 4.2, add support for Rails 5.2 and Ruby 2.5 [bdewater]
|
10
|
+
* Spreedly: Support verify and find transactions [abarrak] #2798
|
11
|
+
* Adyen: Support merchant-specific subdomains [curiousepic] #2799
|
12
|
+
* Fix ENV based configuration of Net::Http for proxies [bbergstrom] #2800
|
13
|
+
* ANET: Withhold cryptogram for credit [curiousepic] #2804
|
14
|
+
* Borgun: Remove batch from request parameters [deedeelavinder] #2805
|
15
|
+
* WorldPay: Remove Inquiry requests in verify transactions [nfarve] #2802
|
16
|
+
* Credorax: Update tests [curiousepic] #2809
|
17
|
+
* Braintree: Remove decimal for non-fractional currencies [nfarve] #2806
|
18
|
+
* Realex: Add documented country support for US and CA [a-salty-strudel] #2810
|
19
|
+
* Paymentez: Add `tax_percentage` optional parameter [deedeelavinder] #2814
|
20
|
+
* Braintree: Add `skip_advanced_fraud_checking` optional parameter [deedeelavinder] #2811
|
21
|
+
* SafeCharge: Additional gateway options [dtykocki] #2816
|
22
|
+
* FirstPay: Handle missing billing addresses [dtykocki] #2822
|
23
|
+
* Realex: Add ApplePay Support [nfarve] #2820
|
24
|
+
* Checkout V2: Additional gateway options [dtykocki] #2821
|
25
|
+
* CyberSource: Support 3ds validate request [curiousepic] #2823
|
26
|
+
* Paymentez: Remove card tokenization step from authorize [dtykocki] #2825
|
27
|
+
* WorldPay: Add 3DS [nfarve] #2819
|
28
|
+
* EBANX: Interpolate authorization string [curiousepic] #2830
|
29
|
+
* CyberSource: Support 3DS validation for authorize [curiousepic] #2832
|
30
|
+
* Redsys: Fix ISO code for PLN [chopenhauer] #2831
|
31
|
+
* Merchant E Solutions: Support transcript scrubbing [curiousepic] #2836
|
32
|
+
* Paystation: Support transcript scrubbing [curiousepic] #2837
|
33
|
+
* Psigate: Support transcript scrubbing [curiousepic] #2835
|
34
|
+
* Braintree: Adding 3D Secure pass thru capabilities [filipebarcos] #2843
|
35
|
+
* Authorize.net: Add flexibility for 3D Secure Parameters [filipebarcos] #2844
|
36
|
+
* Elavon: Update Country List [nfarve] #2840
|
37
|
+
* WorldPay: Update Country List [nfarve] #2841
|
38
|
+
* Merchant Warrior: Support transcript scrubbing [curiousepic] #2845
|
39
|
+
* NAB Transact: Pass nonfractional amounts correctly [curiousepic] #2843
|
40
|
+
* Realex: Update Country List [nfarve] #2842
|
41
|
+
* QBMS: Support transcript scrubbing [curiousepic] #2849
|
42
|
+
* Adyen: Add support for installments [nfarve] #2839
|
43
|
+
* Paymentez: Read messages on Failure with no error [nfarve] #2850
|
44
|
+
* Paymentez: Fix response message conditional [curiousepic] #2851
|
45
|
+
* Add ability to send email receipt [nfarve] #2852
|
46
|
+
* Barclaycard Smartpay: Pass shopper_interaction [curiousepic] #2853
|
47
|
+
* Stripe: Treat UGX as a zero-decimal currency [bpollack] #2857
|
48
|
+
* Mundipagg: Remove Billing Address if no Address Sent [nfarve] #2855
|
49
|
+
* Paypal: Support more robust scrubbing [curiousepic] #2858
|
50
|
+
* Stripe: Report internal Stripe errors as failures [bpollack] #2859
|
51
|
+
* Authorize.net: Add ability to pass `customer_payment_profile_id` [nfarve] #2854
|
52
|
+
|
5
53
|
== Version 1.78.0 (March 29, 2018)
|
6
54
|
* Litle: Add store for echecks [nfarve] #2779
|
7
55
|
* Litle: Add Support for Echeck [nfarve] #2776
|
@@ -50,6 +98,7 @@
|
|
50
98
|
* CardStream: Change refund to use REFUND_SALE [dtykocki] #2795
|
51
99
|
* Spreedly: Scrub sensitive transaction data [abarrak] #2781
|
52
100
|
* Stripe: Add `exchange_rate` parameter [WilsonChiang] #2796
|
101
|
+
* Mundipagg: New Gateway Implementation [nfarve] #2791
|
53
102
|
|
54
103
|
== Version 1.77.0 (January 31, 2018)
|
55
104
|
* Authorize.net: Allow Transaction Id to be passed for refuds [nfarve] #2698
|
data/lib/active_merchant.rb
CHANGED
@@ -28,11 +28,6 @@ require 'active_support/core_ext/hash/conversions'
|
|
28
28
|
require 'active_support/core_ext/object/conversions'
|
29
29
|
require 'active_support/core_ext/class/attribute'
|
30
30
|
require 'active_support/core_ext/enumerable'
|
31
|
-
|
32
|
-
if(!defined?(ActiveSupport::VERSION) || (ActiveSupport::VERSION::STRING < "4.1"))
|
33
|
-
require 'active_support/core_ext/class/attribute_accessors'
|
34
|
-
end
|
35
|
-
|
36
31
|
require 'active_support/core_ext/module/attribute_accessors'
|
37
32
|
|
38
33
|
require 'base64'
|
@@ -42,8 +37,10 @@ require 'cgi'
|
|
42
37
|
require 'rexml/document'
|
43
38
|
require 'timeout'
|
44
39
|
require 'socket'
|
40
|
+
require 'openssl'
|
45
41
|
|
46
42
|
require 'active_merchant/network_connection_retries'
|
43
|
+
require 'active_merchant/net_http_ssl_connection'
|
47
44
|
require 'active_merchant/connection'
|
48
45
|
require 'active_merchant/post_data'
|
49
46
|
require 'active_merchant/posts_data'
|
@@ -14,7 +14,9 @@ module ActiveMerchant #:nodoc:
|
|
14
14
|
'dankort' => /^5019\d{12}$/,
|
15
15
|
'maestro' => /^(5[06-8]|6\d)\d{10,17}$/,
|
16
16
|
'forbrugsforeningen' => /^600722\d{10}$/,
|
17
|
-
'laser' => /^(6304|6706|6709|6771(?!89))\d{8}(\d{4}|\d{6,7})
|
17
|
+
'laser' => /^(6304|6706|6709|6771(?!89))\d{8}(\d{4}|\d{6,7})?$/,
|
18
|
+
'sodexo' => /^(606071|603389|606070|606069|606068|600818)\d{8}$/,
|
19
|
+
'vr' => /^(627416|637036)\d{8}$/
|
18
20
|
}
|
19
21
|
|
20
22
|
# http://www.barclaycard.co.uk/business/files/bin_rules.pdf
|
@@ -47,6 +47,7 @@ module ActiveMerchant #:nodoc:
|
|
47
47
|
add_extra_data(post, options)
|
48
48
|
add_shopper_interaction(post, payment, options)
|
49
49
|
add_address(post, options)
|
50
|
+
add_installments(post, options) if options[:installments]
|
50
51
|
commit('authorise', post)
|
51
52
|
end
|
52
53
|
|
@@ -196,14 +197,18 @@ module ActiveMerchant #:nodoc:
|
|
196
197
|
post[:recurring] = recurring
|
197
198
|
end
|
198
199
|
|
200
|
+
def add_installments(post, options)
|
201
|
+
post[:installments] = {
|
202
|
+
value: options[:installments]
|
203
|
+
}
|
204
|
+
end
|
205
|
+
|
199
206
|
def parse(body)
|
200
207
|
return {} if body.blank?
|
201
208
|
JSON.parse(body)
|
202
209
|
end
|
203
210
|
|
204
211
|
def commit(action, parameters)
|
205
|
-
url = (test? ? test_url : live_url)
|
206
|
-
|
207
212
|
begin
|
208
213
|
raw_response = ssl_post("#{url}/#{action.to_s}", post_data(action, parameters), request_headers)
|
209
214
|
response = parse(raw_response)
|
@@ -224,6 +229,16 @@ module ActiveMerchant #:nodoc:
|
|
224
229
|
|
225
230
|
end
|
226
231
|
|
232
|
+
def url
|
233
|
+
if test?
|
234
|
+
test_url
|
235
|
+
elsif @options[:subdomain]
|
236
|
+
"https://#{@options[:subdomain]}-pal-live.adyenpayments.com/pal/servlet/Payment/v18"
|
237
|
+
else
|
238
|
+
live_url
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
227
242
|
def basic_auth
|
228
243
|
Base64.strict_encode64("#{@username}:#{@password}")
|
229
244
|
end
|
@@ -167,7 +167,7 @@ module ActiveMerchant
|
|
167
167
|
xml.transactionType('refundTransaction')
|
168
168
|
xml.amount(amount(amount))
|
169
169
|
|
170
|
-
add_payment_source(xml, payment)
|
170
|
+
add_payment_source(xml, payment, options, :credit)
|
171
171
|
xml.refTransId(transaction_id_from(options[:transaction_id])) if options[:transaction_id]
|
172
172
|
add_invoice(xml, 'refundTransaction', options)
|
173
173
|
add_customer_data(xml, payment, options)
|
@@ -246,7 +246,7 @@ module ActiveMerchant
|
|
246
246
|
xml.transactionRequest do
|
247
247
|
xml.transactionType(transaction_type)
|
248
248
|
xml.amount(amount(amount))
|
249
|
-
add_payment_source(xml, payment)
|
249
|
+
add_payment_source(xml, payment, options)
|
250
250
|
add_invoice(xml, transaction_type, options)
|
251
251
|
add_tax_fields(xml, options)
|
252
252
|
add_duty_fields(xml, options)
|
@@ -268,7 +268,7 @@ module ActiveMerchant
|
|
268
268
|
add_tax_fields(xml, options)
|
269
269
|
add_shipping_fields(xml, options)
|
270
270
|
add_duty_fields(xml, options)
|
271
|
-
add_payment_source(xml, payment)
|
271
|
+
add_payment_source(xml, payment, options)
|
272
272
|
add_invoice(xml, transaction_type, options)
|
273
273
|
add_tax_exempt_status(xml, options)
|
274
274
|
end
|
@@ -375,16 +375,16 @@ module ActiveMerchant
|
|
375
375
|
end
|
376
376
|
end
|
377
377
|
|
378
|
-
def add_payment_source(xml, source)
|
378
|
+
def add_payment_source(xml, source, options, action = nil)
|
379
379
|
return unless source
|
380
380
|
if source.is_a?(String)
|
381
|
-
add_token_payment_method(xml, source)
|
381
|
+
add_token_payment_method(xml, source, options)
|
382
382
|
elsif card_brand(source) == 'check'
|
383
383
|
add_check(xml, source)
|
384
384
|
elsif card_brand(source) == 'apple_pay'
|
385
385
|
add_apple_pay_payment_token(xml, source)
|
386
386
|
else
|
387
|
-
add_credit_card(xml, source)
|
387
|
+
add_credit_card(xml, source, action)
|
388
388
|
end
|
389
389
|
end
|
390
390
|
|
@@ -457,7 +457,7 @@ module ActiveMerchant
|
|
457
457
|
end
|
458
458
|
end
|
459
459
|
|
460
|
-
def add_credit_card(xml, credit_card)
|
460
|
+
def add_credit_card(xml, credit_card, action)
|
461
461
|
if credit_card.track_data
|
462
462
|
add_swipe_data(xml, credit_card)
|
463
463
|
else
|
@@ -468,7 +468,7 @@ module ActiveMerchant
|
|
468
468
|
if credit_card.valid_card_verification_value?(credit_card.verification_value, credit_card.brand)
|
469
469
|
xml.cardCode(credit_card.verification_value)
|
470
470
|
end
|
471
|
-
if credit_card.is_a?(NetworkTokenizationCreditCard)
|
471
|
+
if credit_card.is_a?(NetworkTokenizationCreditCard) && action != :credit
|
472
472
|
xml.cryptogram(credit_card.payment_cryptogram)
|
473
473
|
end
|
474
474
|
end
|
@@ -489,8 +489,10 @@ module ActiveMerchant
|
|
489
489
|
end
|
490
490
|
end
|
491
491
|
|
492
|
-
def add_token_payment_method(xml, token)
|
492
|
+
def add_token_payment_method(xml, token, options)
|
493
493
|
customer_profile_id, customer_payment_profile_id, _ = split_authorization(token)
|
494
|
+
customer_profile_id = options[:customer_profile_id] if options[:customer_profile_id]
|
495
|
+
customer_payment_profile_id = options[:customer_payment_profile_id] if options[:customer_payment_profile_id]
|
494
496
|
xml.customerProfileId(customer_profile_id)
|
495
497
|
xml.customerPaymentProfileId(customer_payment_profile_id)
|
496
498
|
end
|
@@ -552,8 +554,11 @@ module ActiveMerchant
|
|
552
554
|
xml.customerIP(options[:ip]) unless empty?(options[:ip])
|
553
555
|
|
554
556
|
xml.cardholderAuthentication do
|
555
|
-
|
556
|
-
xml.
|
557
|
+
three_d_secure = options.fetch(:three_d_secure, {})
|
558
|
+
xml.authenticationIndicator(
|
559
|
+
options[:authentication_indicator] || three_d_secure[:eci])
|
560
|
+
xml.cardholderAuthenticationValue(
|
561
|
+
options[:cardholder_authentication_value] || three_d_secure[:cavv])
|
557
562
|
end
|
558
563
|
end
|
559
564
|
|
@@ -305,6 +305,7 @@ module ActiveMerchant #:nodoc:
|
|
305
305
|
hash[:shopperEmail] = options[:email] if options[:email]
|
306
306
|
hash[:shopperIP] = options[:ip] if options[:ip]
|
307
307
|
hash[:shopperReference] = options[:customer] if options[:customer]
|
308
|
+
hash[:shopperInteraction] = options[:shopper_interaction] if options[:shopper_interaction]
|
308
309
|
hash.keep_if { |_, v| v }
|
309
310
|
end
|
310
311
|
|
@@ -98,7 +98,6 @@ module ActiveMerchant #:nodoc:
|
|
98
98
|
def add_reference(post, authorization)
|
99
99
|
dateandtime, batch, transaction, rrn, authcode, _, _, _ = split_authorization(authorization)
|
100
100
|
post[:DateAndTime] = dateandtime
|
101
|
-
post[:Batch] = batch
|
102
101
|
post[:Transaction] = transaction
|
103
102
|
post[:RRN] = rrn
|
104
103
|
post[:AuthCode] = authcode
|
@@ -5,6 +5,7 @@ module BraintreeCommon
|
|
5
5
|
base.homepage_url = 'http://www.braintreepaymentsolutions.com'
|
6
6
|
base.display_name = 'Braintree'
|
7
7
|
base.default_currency = 'USD'
|
8
|
+
base.currencies_without_fractions = %w(BIF CLP DJF GNF JPY KMF KRW LAK PYG RWF UGX VND VUV XAF XOF XPF)
|
8
9
|
end
|
9
10
|
|
10
11
|
def supports_scrubbing
|
@@ -78,7 +78,7 @@ module ActiveMerchant #:nodoc:
|
|
78
78
|
|
79
79
|
def capture(money, authorization, options = {})
|
80
80
|
commit do
|
81
|
-
result = @braintree_gateway.transaction.submit_for_settlement(authorization,
|
81
|
+
result = @braintree_gateway.transaction.submit_for_settlement(authorization, localized_amount(money, options[:currency] || default_currency).to_s)
|
82
82
|
response_from_result(result)
|
83
83
|
end
|
84
84
|
end
|
@@ -95,7 +95,7 @@ module ActiveMerchant #:nodoc:
|
|
95
95
|
# legacy signature: #refund(transaction_id, options = {})
|
96
96
|
# new signature: #refund(money, transaction_id, options = {})
|
97
97
|
money, transaction_id, options = extract_refund_args(args)
|
98
|
-
money =
|
98
|
+
money = localized_amount(money, options[:currency] || default_currency).to_s if money
|
99
99
|
|
100
100
|
commit do
|
101
101
|
response = response_from_result(@braintree_gateway.transaction.refund(transaction_id, money))
|
@@ -530,6 +530,7 @@ module ActiveMerchant #:nodoc:
|
|
530
530
|
|
531
531
|
{
|
532
532
|
"order_id" => transaction.order_id,
|
533
|
+
"amount" => transaction.amount.to_s,
|
533
534
|
"status" => transaction.status,
|
534
535
|
"credit_card_details" => credit_card_details,
|
535
536
|
"customer_details" => customer_details,
|
@@ -543,7 +544,7 @@ module ActiveMerchant #:nodoc:
|
|
543
544
|
|
544
545
|
def create_transaction_parameters(money, credit_card_or_vault_id, options)
|
545
546
|
parameters = {
|
546
|
-
:amount =>
|
547
|
+
:amount => localized_amount(money, options[:currency] || default_currency).to_s,
|
547
548
|
:order_id => options[:order_id],
|
548
549
|
:customer => {
|
549
550
|
:id => options[:store] == true ? "" : options[:store],
|
@@ -554,10 +555,14 @@ module ActiveMerchant #:nodoc:
|
|
554
555
|
:options => {
|
555
556
|
:store_in_vault => options[:store] ? true : false,
|
556
557
|
:submit_for_settlement => options[:submit_for_settlement],
|
557
|
-
:hold_in_escrow => options[:hold_in_escrow]
|
558
|
+
:hold_in_escrow => options[:hold_in_escrow],
|
558
559
|
}
|
559
560
|
}
|
560
561
|
|
562
|
+
if options[:skip_advanced_fraud_checking]
|
563
|
+
parameters[:options].merge!({ :skip_advanced_fraud_checking => options[:skip_advanced_fraud_checking] })
|
564
|
+
end
|
565
|
+
|
561
566
|
parameters[:custom_fields] = options[:custom_fields]
|
562
567
|
parameters[:device_data] = options[:device_data] if options[:device_data]
|
563
568
|
parameters[:service_fee_amount] = options[:service_fee_amount] if options[:service_fee_amount]
|
@@ -629,6 +634,14 @@ module ActiveMerchant #:nodoc:
|
|
629
634
|
}
|
630
635
|
end
|
631
636
|
|
637
|
+
if options[:three_d_secure]
|
638
|
+
parameters[:three_d_secure_pass_thru] = {
|
639
|
+
cavv: options[:three_d_secure][:cavv],
|
640
|
+
eci_flag: options[:three_d_secure][:eci],
|
641
|
+
xid: options[:three_d_secure][:xid],
|
642
|
+
}
|
643
|
+
end
|
644
|
+
|
632
645
|
parameters
|
633
646
|
end
|
634
647
|
end
|
@@ -34,6 +34,7 @@ module ActiveMerchant #:nodoc:
|
|
34
34
|
add_invoice(post, amount, options)
|
35
35
|
add_payment_method(post, payment_method)
|
36
36
|
add_customer_data(post, options)
|
37
|
+
add_transaction_data(post, options)
|
37
38
|
|
38
39
|
commit(:authorize, post)
|
39
40
|
end
|
@@ -113,6 +114,12 @@ module ActiveMerchant #:nodoc:
|
|
113
114
|
end
|
114
115
|
end
|
115
116
|
|
117
|
+
def add_transaction_data(post, options={})
|
118
|
+
post[:cardOnFile] = true if options[:card_on_file] == true
|
119
|
+
post[:transactionIndicator] = options[:transaction_indicator] || 1
|
120
|
+
post[:previousChargeId] = options[:previous_charge_id] if options[:previous_charge_id]
|
121
|
+
end
|
122
|
+
|
116
123
|
def commit(action, post, authorization = nil)
|
117
124
|
begin
|
118
125
|
raw_response = ssl_post(url(post, action, authorization), post.to_json, headers)
|
@@ -258,7 +258,7 @@ module ActiveMerchant #:nodoc:
|
|
258
258
|
add_decision_manager_fields(xml, options)
|
259
259
|
add_mdd_fields(xml, options)
|
260
260
|
add_auth_service(xml, creditcard_or_reference, options)
|
261
|
-
xml
|
261
|
+
add_threeds_services(xml, options)
|
262
262
|
add_payment_network_token(xml) if network_tokenization?(creditcard_or_reference)
|
263
263
|
add_business_rules_data(xml, creditcard_or_reference, options)
|
264
264
|
xml.target!
|
@@ -295,7 +295,7 @@ module ActiveMerchant #:nodoc:
|
|
295
295
|
add_check_service(xml)
|
296
296
|
else
|
297
297
|
add_purchase_service(xml, payment_method_or_reference, options)
|
298
|
-
xml
|
298
|
+
add_threeds_services(xml, options)
|
299
299
|
add_payment_network_token(xml) if network_tokenization?(payment_method_or_reference)
|
300
300
|
add_business_rules_data(xml, payment_method_or_reference, options) unless options[:pinless_debit_card]
|
301
301
|
end
|
@@ -667,6 +667,15 @@ module ActiveMerchant #:nodoc:
|
|
667
667
|
xml.tag!'pinlessDebitValidateService', {'run' => 'true'}
|
668
668
|
end
|
669
669
|
|
670
|
+
def add_threeds_services(xml, options)
|
671
|
+
xml.tag! 'payerAuthEnrollService', {'run' => 'true'} if options[:payer_auth_enroll_service]
|
672
|
+
if options[:payer_auth_validate_service]
|
673
|
+
xml.tag! 'payerAuthValidateService', {'run' => 'true'} do
|
674
|
+
xml.tag! 'signedPARes', options[:pares]
|
675
|
+
end
|
676
|
+
end
|
677
|
+
end
|
678
|
+
|
670
679
|
def lookup_country_code(country_field)
|
671
680
|
country_code = Country.find(country_field) rescue nil
|
672
681
|
country_code.code(:alpha2) if country_code
|
@@ -241,7 +241,7 @@ module ActiveMerchant #:nodoc:
|
|
241
241
|
|
242
242
|
def authorization_from(action, parameters, response)
|
243
243
|
if action == :store
|
244
|
-
response.try(:[], "token")
|
244
|
+
"#{response.try(:[], "token")}|#{CARD_BRAND[parameters[:payment_type_code].to_sym]}"
|
245
245
|
else
|
246
246
|
response.try(:[], "payment").try(:[], "hash")
|
247
247
|
end
|
@@ -254,8 +254,8 @@ module ActiveMerchant #:nodoc:
|
|
254
254
|
end
|
255
255
|
|
256
256
|
def url_for(hostname, action, parameters)
|
257
|
-
return hostname
|
258
|
-
hostname
|
257
|
+
return "#{hostname}#{URL_MAP[action]}?#{convert_to_url_form_encoded(parameters)}" if requires_http_get(action)
|
258
|
+
"#{hostname}#{URL_MAP[action]}"
|
259
259
|
end
|
260
260
|
|
261
261
|
def requires_http_get(action)
|
@@ -11,7 +11,7 @@ module ActiveMerchant #:nodoc:
|
|
11
11
|
self.live_url = 'https://api.convergepay.com/VirtualMerchant/process.do'
|
12
12
|
|
13
13
|
self.display_name = 'Elavon MyVirtualMerchant'
|
14
|
-
self.supported_countries = %w(US CA PR DE IE NO PL LU BE NL)
|
14
|
+
self.supported_countries = %w(US CA PR DE IE NO PL LU BE NL MX)
|
15
15
|
self.supported_cardtypes = [:visa, :master, :american_express, :discover]
|
16
16
|
self.homepage_url = 'http://www.elavon.com/'
|
17
17
|
|
@@ -70,15 +70,16 @@ module ActiveMerchant #:nodoc:
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def add_address(post, creditcard, options)
|
73
|
-
address = options[:billing_address] || options[:address]
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
73
|
+
if address = options[:billing_address] || options[:address]
|
74
|
+
post[:owner_name] = address[:name]
|
75
|
+
post[:owner_street] = address[:address1]
|
76
|
+
post[:owner_street2] = address[:address2] if address[:address2]
|
77
|
+
post[:owner_city] = address[:city]
|
78
|
+
post[:owner_state] = address[:state]
|
79
|
+
post[:owner_zip] = address[:zip]
|
80
|
+
post[:owner_country] = address[:country]
|
81
|
+
post[:owner_phone] = address[:phone] if address[:phone]
|
82
|
+
end
|
82
83
|
end
|
83
84
|
|
84
85
|
def add_invoice(post, money, options)
|