activemerchant 1.112.0 → 1.113.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.rb +1 -1
- data/lib/active_merchant/billing/credit_card_methods.rb +1 -1
- data/lib/active_merchant/billing/gateway.rb +1 -1
- data/lib/active_merchant/billing/gateways/adyen.rb +2 -2
- data/lib/active_merchant/billing/gateways/authorize_net.rb +6 -6
- data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +1 -1
- data/lib/active_merchant/billing/gateways/balanced.rb +1 -1
- data/lib/active_merchant/billing/gateways/bambora_apac.rb +1 -1
- data/lib/active_merchant/billing/gateways/bank_frick.rb +1 -1
- data/lib/active_merchant/billing/gateways/blue_snap.rb +49 -12
- data/lib/active_merchant/billing/gateways/borgun.rb +1 -1
- data/lib/active_merchant/billing/gateways/braintree_blue.rb +7 -7
- data/lib/active_merchant/billing/gateways/cardknox.rb +1 -1
- data/lib/active_merchant/billing/gateways/cenpos.rb +1 -1
- data/lib/active_merchant/billing/gateways/checkout_v2.rb +1 -1
- data/lib/active_merchant/billing/gateways/credorax.rb +6 -0
- data/lib/active_merchant/billing/gateways/culqi.rb +1 -1
- data/lib/active_merchant/billing/gateways/cyber_source.rb +4 -2
- data/lib/active_merchant/billing/gateways/decidir.rb +1 -1
- data/lib/active_merchant/billing/gateways/digitzs.rb +1 -1
- data/lib/active_merchant/billing/gateways/efsnet.rb +1 -1
- data/lib/active_merchant/billing/gateways/eway_rapid.rb +2 -2
- data/lib/active_merchant/billing/gateways/ezic.rb +1 -1
- data/lib/active_merchant/billing/gateways/flo2cash.rb +1 -1
- data/lib/active_merchant/billing/gateways/hdfc.rb +1 -1
- data/lib/active_merchant/billing/gateways/hps.rb +9 -6
- data/lib/active_merchant/billing/gateways/ipp.rb +2 -2
- data/lib/active_merchant/billing/gateways/iridium.rb +2 -2
- data/lib/active_merchant/billing/gateways/linkpoint.rb +1 -1
- data/lib/active_merchant/billing/gateways/mastercard.rb +2 -2
- data/lib/active_merchant/billing/gateways/mercado_pago.rb +1 -1
- data/lib/active_merchant/billing/gateways/netbanx.rb +4 -2
- data/lib/active_merchant/billing/gateways/openpay.rb +1 -1
- data/lib/active_merchant/billing/gateways/opp.rb +3 -3
- data/lib/active_merchant/billing/gateways/optimal_payment.rb +1 -1
- data/lib/active_merchant/billing/gateways/orbital.rb +8 -1
- data/lib/active_merchant/billing/gateways/pagarme.rb +1 -1
- data/lib/active_merchant/billing/gateways/pay_junction.rb +2 -2
- data/lib/active_merchant/billing/gateways/payeezy.rb +3 -3
- data/lib/active_merchant/billing/gateways/payex.rb +5 -5
- data/lib/active_merchant/billing/gateways/payflow.rb +3 -0
- data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +1 -1
- data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +1 -1
- data/lib/active_merchant/billing/gateways/paymill.rb +3 -3
- data/lib/active_merchant/billing/gateways/plugnpay.rb +1 -1
- data/lib/active_merchant/billing/gateways/psigate.rb +1 -1
- data/lib/active_merchant/billing/gateways/qbms.rb +3 -3
- data/lib/active_merchant/billing/gateways/quickbooks.rb +3 -2
- data/lib/active_merchant/billing/gateways/qvalent.rb +1 -1
- data/lib/active_merchant/billing/gateways/redsys.rb +3 -3
- data/lib/active_merchant/billing/gateways/sage_pay.rb +4 -4
- data/lib/active_merchant/billing/gateways/skip_jack.rb +1 -1
- data/lib/active_merchant/billing/gateways/stripe.rb +2 -2
- data/lib/active_merchant/billing/gateways/telr.rb +1 -1
- data/lib/active_merchant/billing/gateways/trans_first.rb +1 -1
- data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +2 -2
- data/lib/active_merchant/billing/gateways/trust_commerce.rb +7 -7
- data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +4 -4
- data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +1 -1
- data/lib/active_merchant/billing/gateways/worldpay_us.rb +2 -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: e55d83260a0ec7b9a824a6313782d8c2b086d55aeb33d99554a09a18836f40a5
|
4
|
+
data.tar.gz: 35b24d3dd8e61c096ec4f5ef5d241a5ae3f905f32ba159e4332be36942cd3c56
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 337249552ee4b5fd33ff2ca257cfcc90265e9aff657b5c42f42563aae070fd583308f5e6cfe05ed5ba1d23a791bac04edf50d0b8afce796c051d36f0b0dca256
|
7
|
+
data.tar.gz: d21728f2c2448e36842ccf5c38d64bf21ace79bd61ddf37367cf08f62ec98d33e0e277d5c5d21adb32ae7db4b03b15fa8e9f6d18b3acdf2be46ac153141585da
|
data/CHANGELOG
CHANGED
@@ -2,6 +2,23 @@
|
|
2
2
|
|
3
3
|
== HEAD
|
4
4
|
|
5
|
+
== Version 1.113.0
|
6
|
+
* Orbital: Add cardIndicators field [meagabeth] #3734
|
7
|
+
* Openpay: Add Colombia to supported countries [molbrown] #3740
|
8
|
+
* Mercado Pago: Update Device Id Header field [cdmackeyfree] #3741
|
9
|
+
* RuboCop: Fix Style/TrailingCommaInHashLiteral [leila-alderman] #3718
|
10
|
+
* RuboCop: Fix Naming/PredicateName [leila-alderman] #3724
|
11
|
+
* RuboCop: Fix Style/Attr [leila-alderman] #3728
|
12
|
+
* Payflow: Use application_id to set buttonsource [britth] #3737
|
13
|
+
* HPS: Enable refunds using capture transaction [britth] #3738
|
14
|
+
* Quickbooks: Omit empty strings in address [leila-alderman] #3743
|
15
|
+
* BlueSnap: Add transactionMetaData support #3745
|
16
|
+
* Orbital: Fix typo in PC3DtlLineTot field [naashton] #3736
|
17
|
+
* Credorax: Send first and last name parameters for CFT transactions [britth] #3748
|
18
|
+
* Orbital: Update CardIndicators field to fix bug [meagabeth] #3746
|
19
|
+
* CyberSource: Always send default address [leila-alderman] #3747
|
20
|
+
* Netbanx: Reject partial refund on pending status [rockyhakjoong] #3735
|
21
|
+
|
5
22
|
== Version 1.112.0
|
6
23
|
* Cybersource: add `maestro` and `diners_club` eci brand mapping [bbraschi] #3708
|
7
24
|
* Cybersource: Ensure Partner Solution Id placement conforms to schema [britth] #3715
|
@@ -190,7 +190,7 @@ module ActiveMerchant #:nodoc:
|
|
190
190
|
'contactless' => 'Data was read by a Contactless EMV kernel. Issuer script results are not available.',
|
191
191
|
'contactless_magstripe' => 'Contactless data was read with a non-EMV protocol.',
|
192
192
|
'contact' => 'Data was read using the EMV protocol. Issuer script results may follow.',
|
193
|
-
'contact_quickchip' => 'Data was read by the Quickchip EMV kernel. Issuer script results are not available.'
|
193
|
+
'contact_quickchip' => 'Data was read by the Quickchip EMV kernel. Issuer script results are not available.'
|
194
194
|
}
|
195
195
|
|
196
196
|
# Returns the ciphertext of the card's encrypted PIN.
|
@@ -95,7 +95,7 @@ module ActiveMerchant #:nodoc:
|
|
95
95
|
pickup_card: 'pick_up_card',
|
96
96
|
config_error: 'config_error',
|
97
97
|
test_mode_live_card: 'test_mode_live_card',
|
98
|
-
unsupported_feature: 'unsupported_feature'
|
98
|
+
unsupported_feature: 'unsupported_feature'
|
99
99
|
}
|
100
100
|
|
101
101
|
cattr_reader :implementations
|
@@ -26,7 +26,7 @@ module ActiveMerchant #:nodoc:
|
|
26
26
|
'132' => STANDARD_ERROR_CODE[:incorrect_address],
|
27
27
|
'133' => STANDARD_ERROR_CODE[:incorrect_address],
|
28
28
|
'134' => STANDARD_ERROR_CODE[:incorrect_address],
|
29
|
-
'135' => STANDARD_ERROR_CODE[:incorrect_address]
|
29
|
+
'135' => STANDARD_ERROR_CODE[:incorrect_address]
|
30
30
|
}
|
31
31
|
|
32
32
|
def initialize(options={})
|
@@ -243,7 +243,7 @@ module ActiveMerchant #:nodoc:
|
|
243
243
|
splits = []
|
244
244
|
split_data.each do |split|
|
245
245
|
amount = {
|
246
|
-
value: split['amount']['value']
|
246
|
+
value: split['amount']['value']
|
247
247
|
}
|
248
248
|
amount[:currency] = split['amount']['currency'] if split['amount']['currency']
|
249
249
|
|
@@ -54,7 +54,7 @@ module ActiveMerchant
|
|
54
54
|
'37' => STANDARD_ERROR_CODE[:invalid_expiry_date],
|
55
55
|
'378' => STANDARD_ERROR_CODE[:invalid_cvc],
|
56
56
|
'38' => STANDARD_ERROR_CODE[:expired_card],
|
57
|
-
'384' => STANDARD_ERROR_CODE[:config_error]
|
57
|
+
'384' => STANDARD_ERROR_CODE[:config_error]
|
58
58
|
}
|
59
59
|
|
60
60
|
MARKET_TYPE = {
|
@@ -771,7 +771,7 @@ module ActiveMerchant
|
|
771
771
|
end
|
772
772
|
|
773
773
|
def parse(action, raw_response, options = {})
|
774
|
-
if
|
774
|
+
if cim_action?(action) || action == :verify_credentials
|
775
775
|
parse_cim(raw_response, options)
|
776
776
|
else
|
777
777
|
parse_normal(action, raw_response)
|
@@ -802,7 +802,7 @@ module ActiveMerchant
|
|
802
802
|
end
|
803
803
|
end
|
804
804
|
|
805
|
-
def
|
805
|
+
def cim_action?(action)
|
806
806
|
action.to_s.start_with?('cim')
|
807
807
|
end
|
808
808
|
|
@@ -824,7 +824,7 @@ module ActiveMerchant
|
|
824
824
|
'deleteCustomerProfileRequest'
|
825
825
|
elsif action == :verify_credentials
|
826
826
|
'authenticateTestRequest'
|
827
|
-
elsif
|
827
|
+
elsif cim_action?(action)
|
828
828
|
'createCustomerProfileTransactionRequest'
|
829
829
|
else
|
830
830
|
'createTransactionRequest'
|
@@ -1006,7 +1006,7 @@ module ActiveMerchant
|
|
1006
1006
|
|
1007
1007
|
def auth_was_for_cim?(authorization)
|
1008
1008
|
_, _, action = split_authorization(authorization)
|
1009
|
-
action &&
|
1009
|
+
action && cim_action?(action)
|
1010
1010
|
end
|
1011
1011
|
|
1012
1012
|
def parse_direct_response_elements(response, options)
|
@@ -1059,7 +1059,7 @@ module ActiveMerchant
|
|
1059
1059
|
card_type: parts[51] || '',
|
1060
1060
|
split_tender_id: parts[52] || '',
|
1061
1061
|
requested_amount: parts[53] || '',
|
1062
|
-
balance_on_card: parts[54] || ''
|
1062
|
+
balance_on_card: parts[54] || ''
|
1063
1063
|
}
|
1064
1064
|
end
|
1065
1065
|
end
|
@@ -928,7 +928,7 @@ module ActiveMerchant #:nodoc:
|
|
928
928
|
'card_type' => direct_response_fields[51] || '',
|
929
929
|
'split_tender_id' => direct_response_fields[52] || '',
|
930
930
|
'requested_amount' => direct_response_fields[53] || '',
|
931
|
-
'balance_on_card' => direct_response_fields[54] || ''
|
931
|
+
'balance_on_card' => direct_response_fields[54] || ''
|
932
932
|
}
|
933
933
|
)
|
934
934
|
end
|
@@ -254,7 +254,7 @@ module ActiveMerchant #:nodoc:
|
|
254
254
|
'Authorization' => 'Basic ' + Base64.encode64(@options[:login].to_s + ':').strip,
|
255
255
|
'User-Agent' => "Balanced/v1.1 ActiveMerchantBindings/#{ActiveMerchant::VERSION}",
|
256
256
|
'Accept' => 'application/vnd.api+json;revision=1.1',
|
257
|
-
'X-Balanced-User-Agent' => @@ua
|
257
|
+
'X-Balanced-User-Agent' => @@ua
|
258
258
|
}
|
259
259
|
end
|
260
260
|
end
|
@@ -18,7 +18,7 @@ module ActiveMerchant #:nodoc:
|
|
18
18
|
'05' => STANDARD_ERROR_CODE[:card_declined],
|
19
19
|
'06' => STANDARD_ERROR_CODE[:processing_error],
|
20
20
|
'14' => STANDARD_ERROR_CODE[:invalid_number],
|
21
|
-
'54' => STANDARD_ERROR_CODE[:expired_card]
|
21
|
+
'54' => STANDARD_ERROR_CODE[:expired_card]
|
22
22
|
}
|
23
23
|
|
24
24
|
def initialize(options={})
|
@@ -58,7 +58,7 @@ module ActiveMerchant
|
|
58
58
|
'line1: N, zip: M, name: N' => 'W',
|
59
59
|
'line1: N, zip: N, name: U' => 'N',
|
60
60
|
'line1: N, zip: N, name: M' => 'K',
|
61
|
-
'line1: N, zip: N, name: N' => 'N'
|
61
|
+
'line1: N, zip: N, name: N' => 'N'
|
62
62
|
}
|
63
63
|
|
64
64
|
BANK_ACCOUNT_TYPE_MAPPING = {
|
@@ -212,12 +212,28 @@ module ActiveMerchant
|
|
212
212
|
end
|
213
213
|
end
|
214
214
|
|
215
|
-
def
|
215
|
+
def add_metadata(doc, options)
|
216
|
+
transaction_meta_data = options.fetch(:transaction_meta_data, {})
|
217
|
+
return if transaction_meta_data.empty? && !options[:description]
|
218
|
+
|
216
219
|
doc.send('transaction-meta-data') do
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
doc.send('meta-
|
220
|
+
# ensure backwards compatibility for calls expecting :description
|
221
|
+
# to become meta-data fields.
|
222
|
+
if options[:description]
|
223
|
+
doc.send('meta-data') do
|
224
|
+
doc.send('meta-key', 'description')
|
225
|
+
doc.send('meta-value', truncate(options[:description], 500))
|
226
|
+
doc.send('meta-description', 'Description')
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
# https://developers.bluesnap.com/v8976-XML/docs/meta-data
|
231
|
+
transaction_meta_data.each do |entry|
|
232
|
+
doc.send('meta-data') do
|
233
|
+
doc.send('meta-key', truncate(entry[:meta_key], 40))
|
234
|
+
doc.send('meta-value', truncate(entry[:meta_value], 500))
|
235
|
+
doc.send('meta-description', truncate(entry[:meta_description], 40))
|
236
|
+
end
|
221
237
|
end
|
222
238
|
end
|
223
239
|
end
|
@@ -225,7 +241,7 @@ module ActiveMerchant
|
|
225
241
|
def add_order(doc, options)
|
226
242
|
doc.send('merchant-transaction-id', truncate(options[:order_id], 50)) if options[:order_id]
|
227
243
|
doc.send('soft-descriptor', options[:soft_descriptor]) if options[:soft_descriptor]
|
228
|
-
|
244
|
+
add_metadata(doc, options)
|
229
245
|
add_3ds(doc, options[:three_d_secure]) if options[:three_d_secure]
|
230
246
|
add_level_3_data(doc, options)
|
231
247
|
end
|
@@ -315,7 +331,7 @@ module ActiveMerchant
|
|
315
331
|
add_echeck_transaction(doc, payment_method_details.payment_method, options, vaulted_shopper_id.present?) if payment_method_details.check?
|
316
332
|
|
317
333
|
add_fraud_info(doc, options)
|
318
|
-
|
334
|
+
add_metadata(doc, options)
|
319
335
|
end
|
320
336
|
|
321
337
|
def add_echeck_transaction(doc, check, options, vaulted_shopper)
|
@@ -350,12 +366,21 @@ module ActiveMerchant
|
|
350
366
|
parsed = {}
|
351
367
|
doc = Nokogiri::XML(response.body)
|
352
368
|
doc.root.xpath('*').each do |node|
|
369
|
+
name = node.name.downcase
|
370
|
+
|
353
371
|
if node.elements.empty?
|
354
|
-
parsed[
|
372
|
+
parsed[name] = node.text
|
373
|
+
elsif name == 'transaction-meta-data'
|
374
|
+
metadata = []
|
375
|
+
node.elements.each { |m|
|
376
|
+
metadata.push parse_metadata_entry(m)
|
377
|
+
}
|
378
|
+
|
379
|
+
parsed['transaction-meta-data'] = metadata
|
355
380
|
else
|
356
|
-
node.elements.each
|
381
|
+
node.elements.each { |childnode|
|
357
382
|
parse_element(parsed, childnode)
|
358
|
-
|
383
|
+
}
|
359
384
|
end
|
360
385
|
end
|
361
386
|
|
@@ -363,6 +388,18 @@ module ActiveMerchant
|
|
363
388
|
parsed
|
364
389
|
end
|
365
390
|
|
391
|
+
def parse_metadata_entry(node)
|
392
|
+
entry = {}
|
393
|
+
|
394
|
+
node.elements.each { |e|
|
395
|
+
entry = entry.merge({
|
396
|
+
e.name => e.text
|
397
|
+
})
|
398
|
+
}
|
399
|
+
|
400
|
+
entry
|
401
|
+
end
|
402
|
+
|
366
403
|
def parse_element(parsed, node)
|
367
404
|
if !node.elements.empty?
|
368
405
|
node.elements.each { |e| parse_element(parsed, e) }
|
@@ -476,7 +513,7 @@ module ActiveMerchant
|
|
476
513
|
def headers
|
477
514
|
{
|
478
515
|
'Content-Type' => 'application/xml',
|
479
|
-
'Authorization' => ('Basic ' + Base64.strict_encode64("#{@options[:api_username]}:#{@options[:api_password]}").strip)
|
516
|
+
'Authorization' => ('Basic ' + Base64.strict_encode64("#{@options[:api_username]}:#{@options[:api_password]}").strip)
|
480
517
|
}
|
481
518
|
end
|
482
519
|
|
@@ -176,7 +176,7 @@ module ActiveMerchant #:nodoc:
|
|
176
176
|
|
177
177
|
def headers
|
178
178
|
{
|
179
|
-
'Authorization' => 'Basic ' + Base64.strict_encode64(@options[:username].to_s + ':' + @options[:password].to_s)
|
179
|
+
'Authorization' => 'Basic ' + Base64.strict_encode64(@options[:username].to_s + ':' + @options[:password].to_s)
|
180
180
|
}
|
181
181
|
end
|
182
182
|
|
@@ -234,7 +234,7 @@ module ActiveMerchant #:nodoc:
|
|
234
234
|
phone: options[:phone] || (options[:billing_address][:phone] if options[:billing_address] &&
|
235
235
|
options[:billing_address][:phone]),
|
236
236
|
id: options[:customer],
|
237
|
-
device_data: options[:device_data]
|
237
|
+
device_data: options[:device_data]
|
238
238
|
}.merge credit_card_params
|
239
239
|
result = @braintree_gateway.customer.create(merge_credit_card_options(parameters, options))
|
240
240
|
Response.new(result.success?, message_from_result(result),
|
@@ -258,7 +258,7 @@ module ActiveMerchant #:nodoc:
|
|
258
258
|
cvv: credit_card.verification_value,
|
259
259
|
expiration_month: credit_card.month.to_s.rjust(2, '0'),
|
260
260
|
expiration_year: credit_card.year.to_s,
|
261
|
-
device_data: options[:device_data]
|
261
|
+
device_data: options[:device_data]
|
262
262
|
}
|
263
263
|
if options[:billing_address]
|
264
264
|
address = map_address(options[:billing_address])
|
@@ -320,7 +320,7 @@ module ActiveMerchant #:nodoc:
|
|
320
320
|
company: address[:company],
|
321
321
|
locality: address[:city],
|
322
322
|
region: address[:state],
|
323
|
-
postal_code: scrub_zip(address[:zip])
|
323
|
+
postal_code: scrub_zip(address[:zip])
|
324
324
|
}
|
325
325
|
|
326
326
|
mapped[:country_code_alpha2] = (address[:country] || address[:country_code_alpha2]) if address[:country] || address[:country_code_alpha2]
|
@@ -508,7 +508,7 @@ module ActiveMerchant #:nodoc:
|
|
508
508
|
customer_details = {
|
509
509
|
'id' => transaction.customer_details.id,
|
510
510
|
'email' => transaction.customer_details.email,
|
511
|
-
'phone' => transaction.customer_details.phone
|
511
|
+
'phone' => transaction.customer_details.phone
|
512
512
|
}
|
513
513
|
|
514
514
|
billing_details = {
|
@@ -518,7 +518,7 @@ module ActiveMerchant #:nodoc:
|
|
518
518
|
'locality' => transaction.billing_details.locality,
|
519
519
|
'region' => transaction.billing_details.region,
|
520
520
|
'postal_code' => transaction.billing_details.postal_code,
|
521
|
-
'country_name' => transaction.billing_details.country_name
|
521
|
+
'country_name' => transaction.billing_details.country_name
|
522
522
|
}
|
523
523
|
|
524
524
|
shipping_details = {
|
@@ -528,7 +528,7 @@ module ActiveMerchant #:nodoc:
|
|
528
528
|
'locality' => transaction.shipping_details.locality,
|
529
529
|
'region' => transaction.shipping_details.region,
|
530
530
|
'postal_code' => transaction.shipping_details.postal_code,
|
531
|
-
'country_name' => transaction.shipping_details.country_name
|
531
|
+
'country_name' => transaction.shipping_details.country_name
|
532
532
|
}
|
533
533
|
credit_card_details = {
|
534
534
|
'masked_number' => transaction.credit_card_details.masked_number,
|
@@ -578,7 +578,7 @@ module ActiveMerchant #:nodoc:
|
|
578
578
|
options: {
|
579
579
|
store_in_vault: options[:store] ? true : false,
|
580
580
|
submit_for_settlement: options[:submit_for_settlement],
|
581
|
-
hold_in_escrow: options[:hold_in_escrow]
|
581
|
+
hold_in_escrow: options[:hold_in_escrow]
|
582
582
|
}
|
583
583
|
}
|
584
584
|
|
@@ -250,7 +250,7 @@ module ActiveMerchant #:nodoc:
|
|
250
250
|
'257' => STANDARD_ERROR_CODE[:invalid_cvc],
|
251
251
|
'333' => STANDARD_ERROR_CODE[:expired_card],
|
252
252
|
'1' => STANDARD_ERROR_CODE[:card_declined],
|
253
|
-
'99' => STANDARD_ERROR_CODE[:processing_error]
|
253
|
+
'99' => STANDARD_ERROR_CODE[:processing_error]
|
254
254
|
}
|
255
255
|
|
256
256
|
def authorization_from(request, response)
|
@@ -193,6 +193,7 @@ module ActiveMerchant #:nodoc:
|
|
193
193
|
add_email(post, options)
|
194
194
|
|
195
195
|
if options[:referral_cft]
|
196
|
+
add_customer_name(post, options)
|
196
197
|
commit(:referral_cft, post)
|
197
198
|
else
|
198
199
|
commit(:refund, post)
|
@@ -317,6 +318,11 @@ module ActiveMerchant #:nodoc:
|
|
317
318
|
post[:c3] = options[:email] || 'unspecified@example.com'
|
318
319
|
end
|
319
320
|
|
321
|
+
def add_customer_name(post, options)
|
322
|
+
post[:j5] = options[:first_name] if options[:first_name]
|
323
|
+
post[:j13] = options[:last_name] if options[:last_name]
|
324
|
+
end
|
325
|
+
|
320
326
|
def add_3d_secure(post, options)
|
321
327
|
if options[:eci] && options[:xid]
|
322
328
|
add_3d_secure_1_data(post, options)
|
@@ -205,7 +205,7 @@ module ActiveMerchant #:nodoc:
|
|
205
205
|
refund: 'SingleCallGenericReverse',
|
206
206
|
tokenize: 'SingleCallTokenServlet',
|
207
207
|
invalidate: 'SingleCallInvalidateToken',
|
208
|
-
tokenpay: 'SingleCallTokenTransaction'
|
208
|
+
tokenpay: 'SingleCallTokenTransaction'
|
209
209
|
}
|
210
210
|
|
211
211
|
def commit(action, params)
|
@@ -34,7 +34,7 @@ module ActiveMerchant #:nodoc:
|
|
34
34
|
american_express: 'aesk',
|
35
35
|
jcb: 'js',
|
36
36
|
discover: 'pb',
|
37
|
-
diners_club: 'pb'
|
37
|
+
diners_club: 'pb'
|
38
38
|
}.freeze
|
39
39
|
DEFAULT_COLLECTION_INDICATOR = 2
|
40
40
|
|
@@ -266,7 +266,9 @@ module ActiveMerchant #:nodoc:
|
|
266
266
|
zip: '00000',
|
267
267
|
country: 'US'
|
268
268
|
}
|
269
|
-
|
269
|
+
|
270
|
+
submitted_address = options[:billing_address] || options[:address] || default_address
|
271
|
+
options[:billing_address] = default_address.merge(submitted_address) { |_k, default, submitted| submitted.blank? ? default : submitted }
|
270
272
|
options[:shipping_address] = options[:shipping_address] || {}
|
271
273
|
end
|
272
274
|
|
@@ -39,7 +39,7 @@ module ActiveMerchant #:nodoc:
|
|
39
39
|
76 => STANDARD_ERROR_CODE[:call_issuer],
|
40
40
|
91 => STANDARD_ERROR_CODE[:call_issuer],
|
41
41
|
96 => STANDARD_ERROR_CODE[:processing_error],
|
42
|
-
97 => STANDARD_ERROR_CODE[:processing_error]
|
42
|
+
97 => STANDARD_ERROR_CODE[:processing_error]
|
43
43
|
}
|
44
44
|
|
45
45
|
def initialize(options={})
|