activemerchant 1.133.0 → 1.137.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +240 -0
- data/lib/active_merchant/billing/check.rb +2 -2
- data/lib/active_merchant/billing/compatibility.rb +4 -4
- data/lib/active_merchant/billing/credit_card.rb +11 -8
- data/lib/active_merchant/billing/credit_card_formatting.rb +4 -0
- data/lib/active_merchant/billing/credit_card_methods.rb +59 -6
- data/lib/active_merchant/billing/gateway.rb +9 -0
- data/lib/active_merchant/billing/gateways/adyen.rb +162 -43
- data/lib/active_merchant/billing/gateways/airwallex.rb +26 -12
- data/lib/active_merchant/billing/gateways/alelo.rb +23 -5
- data/lib/active_merchant/billing/gateways/authorize_net.rb +43 -35
- data/lib/active_merchant/billing/gateways/authorize_net_arb.rb +10 -6
- data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +1 -3
- data/lib/active_merchant/billing/gateways/axcessms.rb +6 -2
- data/lib/active_merchant/billing/gateways/banwire.rb +4 -2
- data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +7 -3
- data/lib/active_merchant/billing/gateways/blue_pay.rb +13 -5
- data/lib/active_merchant/billing/gateways/blue_snap.rb +5 -5
- data/lib/active_merchant/billing/gateways/braintree/token_nonce.rb +65 -20
- data/lib/active_merchant/billing/gateways/braintree_blue.rb +226 -73
- data/lib/active_merchant/billing/gateways/braintree_orange.rb +1 -1
- data/lib/active_merchant/billing/gateways/card_connect.rb +5 -2
- data/lib/active_merchant/billing/gateways/card_stream.rb +4 -6
- data/lib/active_merchant/billing/gateways/cashnet.rb +1 -1
- data/lib/active_merchant/billing/gateways/cecabank/cecabank_common.rb +36 -0
- data/lib/active_merchant/billing/gateways/cecabank/cecabank_json.rb +316 -0
- data/lib/active_merchant/billing/gateways/cecabank/cecabank_xml.rb +220 -0
- data/lib/active_merchant/billing/gateways/cecabank.rb +7 -240
- data/lib/active_merchant/billing/gateways/checkout_v2.rb +238 -34
- data/lib/active_merchant/billing/gateways/commerce_hub.rb +63 -6
- data/lib/active_merchant/billing/gateways/credorax.rb +3 -5
- data/lib/active_merchant/billing/gateways/cyber_source.rb +185 -47
- data/lib/active_merchant/billing/gateways/cyber_source_rest.rb +102 -58
- data/lib/active_merchant/billing/gateways/d_local.rb +26 -15
- data/lib/active_merchant/billing/gateways/data_cash.rb +21 -17
- data/lib/active_merchant/billing/gateways/datatrans.rb +279 -0
- data/lib/active_merchant/billing/gateways/decidir.rb +53 -18
- data/lib/active_merchant/billing/gateways/decidir_plus.rb +4 -1
- data/lib/active_merchant/billing/gateways/deepstack.rb +382 -0
- data/lib/active_merchant/billing/gateways/ebanx.rb +40 -36
- data/lib/active_merchant/billing/gateways/efsnet.rb +6 -2
- data/lib/active_merchant/billing/gateways/elavon.rb +99 -33
- data/lib/active_merchant/billing/gateways/element.rb +36 -7
- data/lib/active_merchant/billing/gateways/epay.rb +6 -2
- data/lib/active_merchant/billing/gateways/evo_ca.rb +6 -2
- data/lib/active_merchant/billing/gateways/eway.rb +4 -2
- data/lib/active_merchant/billing/gateways/eway_managed.rb +6 -2
- data/lib/active_merchant/billing/gateways/exact.rb +6 -2
- data/lib/active_merchant/billing/gateways/fat_zebra.rb +31 -3
- data/lib/active_merchant/billing/gateways/federated_canada.rb +6 -2
- data/lib/active_merchant/billing/gateways/first_pay/first_pay_common.rb +15 -0
- data/lib/active_merchant/billing/gateways/first_pay/first_pay_json.rb +190 -0
- data/lib/active_merchant/billing/gateways/first_pay/first_pay_xml.rb +183 -0
- data/lib/active_merchant/billing/gateways/first_pay.rb +6 -172
- data/lib/active_merchant/billing/gateways/firstdata_e4.rb +6 -2
- data/lib/active_merchant/billing/gateways/firstdata_e4_v27.rb +7 -3
- data/lib/active_merchant/billing/gateways/flex_charge.rb +347 -0
- data/lib/active_merchant/billing/gateways/garanti.rb +4 -2
- data/lib/active_merchant/billing/gateways/global_collect.rb +45 -37
- data/lib/active_merchant/billing/gateways/hi_pay.rb +286 -0
- data/lib/active_merchant/billing/gateways/hps.rb +1 -1
- data/lib/active_merchant/billing/gateways/iats_payments.rb +7 -2
- data/lib/active_merchant/billing/gateways/inspire.rb +6 -4
- data/lib/active_merchant/billing/gateways/instapay.rb +7 -4
- data/lib/active_merchant/billing/gateways/ipg.rb +9 -5
- data/lib/active_merchant/billing/gateways/iridium.rb +15 -5
- data/lib/active_merchant/billing/gateways/itransact.rb +6 -2
- data/lib/active_merchant/billing/gateways/iveri.rb +3 -3
- data/lib/active_merchant/billing/gateways/ixopay.rb +2 -2
- data/lib/active_merchant/billing/gateways/jetpay.rb +4 -2
- data/lib/active_merchant/billing/gateways/jetpay_v2.rb +4 -2
- data/lib/active_merchant/billing/gateways/kushki.rb +72 -12
- data/lib/active_merchant/billing/gateways/linkpoint.rb +6 -2
- data/lib/active_merchant/billing/gateways/litle.rb +33 -50
- data/lib/active_merchant/billing/gateways/mastercard.rb +4 -4
- data/lib/active_merchant/billing/gateways/maxipago.rb +2 -2
- data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +8 -5
- data/lib/active_merchant/billing/gateways/merchant_ware.rb +11 -4
- data/lib/active_merchant/billing/gateways/merchant_ware_version_four.rb +11 -4
- data/lib/active_merchant/billing/gateways/merchant_warrior.rb +19 -3
- data/lib/active_merchant/billing/gateways/mercury.rb +6 -2
- data/lib/active_merchant/billing/gateways/metrics_global.rb +8 -6
- data/lib/active_merchant/billing/gateways/migs/migs_codes.rb +1 -0
- data/lib/active_merchant/billing/gateways/migs.rb +6 -2
- data/lib/active_merchant/billing/gateways/mit.rb +8 -3
- data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +18 -10
- data/lib/active_merchant/billing/gateways/monei.rb +1 -1
- data/lib/active_merchant/billing/gateways/moneris.rb +9 -3
- data/lib/active_merchant/billing/gateways/money_movers.rb +6 -2
- data/lib/active_merchant/billing/gateways/nab_transact.rb +12 -4
- data/lib/active_merchant/billing/gateways/net_registry.rb +6 -2
- data/lib/active_merchant/billing/gateways/netbanx.rb +1 -3
- data/lib/active_merchant/billing/gateways/netbilling.rb +6 -2
- data/lib/active_merchant/billing/gateways/network_merchants.rb +6 -2
- data/lib/active_merchant/billing/gateways/nmi.rb +18 -6
- data/lib/active_merchant/billing/gateways/ogone.rb +6 -2
- data/lib/active_merchant/billing/gateways/openpay.rb +4 -2
- data/lib/active_merchant/billing/gateways/opp.rb +1 -2
- data/lib/active_merchant/billing/gateways/optimal_payment.rb +6 -2
- data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +1 -3
- data/lib/active_merchant/billing/gateways/orbital.rb +83 -24
- data/lib/active_merchant/billing/gateways/pac_net_raven.rb +7 -4
- data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +6 -2
- data/lib/active_merchant/billing/gateways/pay_hub.rb +4 -2
- data/lib/active_merchant/billing/gateways/pay_junction.rb +6 -2
- data/lib/active_merchant/billing/gateways/pay_secure.rb +6 -2
- data/lib/active_merchant/billing/gateways/pay_trace.rb +31 -18
- data/lib/active_merchant/billing/gateways/payeezy.rb +19 -8
- data/lib/active_merchant/billing/gateways/payex.rb +4 -2
- data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +1 -1
- data/lib/active_merchant/billing/gateways/payflow.rb +1 -3
- data/lib/active_merchant/billing/gateways/payment_express.rb +8 -4
- data/lib/active_merchant/billing/gateways/paymentez.rb +23 -11
- data/lib/active_merchant/billing/gateways/paysafe.rb +12 -11
- data/lib/active_merchant/billing/gateways/payscout.rb +7 -4
- data/lib/active_merchant/billing/gateways/paystation.rb +7 -3
- data/lib/active_merchant/billing/gateways/payway.rb +6 -2
- data/lib/active_merchant/billing/gateways/payway_dot_com.rb +2 -2
- data/lib/active_merchant/billing/gateways/pin.rb +22 -4
- data/lib/active_merchant/billing/gateways/plexo.rb +49 -10
- data/lib/active_merchant/billing/gateways/plugnpay.rb +6 -2
- data/lib/active_merchant/billing/gateways/priority.rb +6 -5
- data/lib/active_merchant/billing/gateways/psigate.rb +6 -2
- data/lib/active_merchant/billing/gateways/psl_card.rb +6 -2
- data/lib/active_merchant/billing/gateways/qbms.rb +6 -2
- data/lib/active_merchant/billing/gateways/quantum.rb +6 -2
- data/lib/active_merchant/billing/gateways/quickbooks.rb +6 -5
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_v10.rb +7 -4
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_v4to7.rb +6 -2
- data/lib/active_merchant/billing/gateways/rapyd.rb +148 -46
- data/lib/active_merchant/billing/gateways/reach.rb +11 -4
- data/lib/active_merchant/billing/gateways/redsys.rb +2 -10
- data/lib/active_merchant/billing/gateways/redsys_rest.rb +507 -0
- data/lib/active_merchant/billing/gateways/s5.rb +3 -3
- data/lib/active_merchant/billing/gateways/safe_charge.rb +36 -16
- data/lib/active_merchant/billing/gateways/sage.rb +12 -4
- data/lib/active_merchant/billing/gateways/sage_pay.rb +79 -5
- data/lib/active_merchant/billing/gateways/sallie_mae.rb +6 -2
- data/lib/active_merchant/billing/gateways/secure_net.rb +6 -2
- data/lib/active_merchant/billing/gateways/secure_pay.rb +8 -6
- data/lib/active_merchant/billing/gateways/secure_pay_au.rb +12 -4
- data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +6 -2
- data/lib/active_merchant/billing/gateways/securion_pay.rb +24 -10
- data/lib/active_merchant/billing/gateways/shift4.rb +17 -20
- data/lib/active_merchant/billing/gateways/shift4_v2.rb +117 -0
- data/lib/active_merchant/billing/gateways/simetrik.rb +17 -11
- data/lib/active_merchant/billing/gateways/skip_jack.rb +6 -2
- data/lib/active_merchant/billing/gateways/smart_ps.rb +7 -4
- data/lib/active_merchant/billing/gateways/so_easy_pay.rb +4 -2
- data/lib/active_merchant/billing/gateways/spreedly_core.rb +2 -4
- data/lib/active_merchant/billing/gateways/stripe.rb +53 -21
- data/lib/active_merchant/billing/gateways/stripe_payment_intents.rb +199 -50
- data/lib/active_merchant/billing/gateways/sum_up.rb +223 -0
- data/lib/active_merchant/billing/gateways/swipe_checkout.rb +4 -2
- data/lib/active_merchant/billing/gateways/telr.rb +3 -4
- data/lib/active_merchant/billing/gateways/trans_first.rb +1 -2
- data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +8 -16
- data/lib/active_merchant/billing/gateways/transact_pro.rb +1 -1
- data/lib/active_merchant/billing/gateways/trust_commerce.rb +6 -2
- data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +9 -8
- data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +6 -2
- data/lib/active_merchant/billing/gateways/vanco.rb +2 -4
- data/lib/active_merchant/billing/gateways/vantiv_express.rb +587 -0
- data/lib/active_merchant/billing/gateways/verifi.rb +6 -2
- data/lib/active_merchant/billing/gateways/viaklix.rb +6 -2
- data/lib/active_merchant/billing/gateways/visanet_peru.rb +2 -2
- data/lib/active_merchant/billing/gateways/vpos.rb +3 -3
- data/lib/active_merchant/billing/gateways/wirecard.rb +7 -3
- data/lib/active_merchant/billing/gateways/wompi.rb +5 -0
- data/lib/active_merchant/billing/gateways/worldpay.rb +140 -73
- data/lib/active_merchant/billing/gateways/worldpay_online_payments.rb +13 -10
- data/lib/active_merchant/billing/gateways/xpay.rb +242 -0
- data/lib/active_merchant/billing/network_tokenization_credit_card.rb +1 -1
- data/lib/active_merchant/billing/response.rb +2 -2
- data/lib/active_merchant/connection.rb +3 -17
- data/lib/active_merchant/country.rb +1 -0
- data/lib/active_merchant/errors.rb +10 -0
- data/lib/active_merchant/version.rb +1 -1
- data/lib/support/gateway_support.rb +2 -2
- data/lib/support/ssl_verify.rb +4 -4
- data/lib/support/ssl_version.rb +6 -6
- metadata +30 -9
@@ -111,13 +111,12 @@ module ActiveMerchant #:nodoc:
|
|
111
111
|
end
|
112
112
|
|
113
113
|
def build_request(action, params)
|
114
|
+
envelope_obj = { 'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema',
|
115
|
+
'xmlns:env' => 'http://schemas.xmlsoap.org/soap/envelope/',
|
116
|
+
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance' }
|
114
117
|
xml = Builder::XmlMarkup.new indent: 2
|
115
118
|
xml.instruct!
|
116
|
-
xml.tag! 'env:Envelope',
|
117
|
-
{ 'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema',
|
118
|
-
'xmlns:env' => 'http://schemas.xmlsoap.org/soap/envelope/',
|
119
|
-
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance' } do
|
120
|
-
|
119
|
+
xml.tag! 'env:Envelope', envelope_obj do
|
121
120
|
xml.tag! 'env:Body' do
|
122
121
|
xml.tag! action, { 'xmlns' => xmlns(action) } do
|
123
122
|
xml.tag! 'clientId', @options[:login]
|
@@ -146,15 +145,24 @@ module ActiveMerchant #:nodoc:
|
|
146
145
|
end
|
147
146
|
|
148
147
|
def commit(action, params)
|
149
|
-
data = ssl_post(
|
150
|
-
|
151
|
-
|
148
|
+
data = ssl_post(
|
149
|
+
url(action),
|
150
|
+
build_request(action, params),
|
151
|
+
{
|
152
|
+
'Content-Type' => 'text/xml; charset=utf-8',
|
153
|
+
'SOAPAction' => "#{xmlns(action)}#{action}"
|
154
|
+
}
|
155
|
+
)
|
152
156
|
|
153
157
|
response = parse(action, data)
|
154
|
-
Response.new(
|
158
|
+
Response.new(
|
159
|
+
successful?(action, response),
|
160
|
+
message_from(action, response),
|
161
|
+
response,
|
155
162
|
test: test?,
|
156
163
|
authorization: authorization_from(action, response),
|
157
|
-
avs_result: { code: response[:avs_code] }
|
164
|
+
avs_result: { code: response[:avs_code] }
|
165
|
+
)
|
158
166
|
end
|
159
167
|
|
160
168
|
def authorization_from(action, response)
|
@@ -337,7 +337,7 @@ module ActiveMerchant #:nodoc:
|
|
337
337
|
endpoint = translate_action_endpoint(action, options)
|
338
338
|
headers = {
|
339
339
|
'Content-Type': 'application/json;charset=UTF-8',
|
340
|
-
|
340
|
+
Authorization: @options[:api_key],
|
341
341
|
'User-Agent': 'MONEI/Shopify/0.1.0'
|
342
342
|
}
|
343
343
|
|
@@ -54,6 +54,7 @@ module ActiveMerchant #:nodoc:
|
|
54
54
|
post[:crypt_type] = options[:crypt_type] || @options[:crypt_type]
|
55
55
|
add_external_mpi_fields(post, options)
|
56
56
|
add_stored_credential(post, options)
|
57
|
+
add_cust_id(post, options)
|
57
58
|
action = if post[:cavv] || options[:three_d_secure]
|
58
59
|
'cavv_preauth'
|
59
60
|
elsif post[:data_key].blank?
|
@@ -78,6 +79,7 @@ module ActiveMerchant #:nodoc:
|
|
78
79
|
post[:crypt_type] = options[:crypt_type] || @options[:crypt_type]
|
79
80
|
add_external_mpi_fields(post, options)
|
80
81
|
add_stored_credential(post, options)
|
82
|
+
add_cust_id(post, options)
|
81
83
|
action = if post[:cavv] || options[:three_d_secure]
|
82
84
|
'cavv_purchase'
|
83
85
|
elsif post[:data_key].blank?
|
@@ -216,7 +218,7 @@ module ActiveMerchant #:nodoc:
|
|
216
218
|
three_d_secure_options = options[:three_d_secure]
|
217
219
|
|
218
220
|
post[:threeds_version] = three_d_secure_options[:version]
|
219
|
-
post[:crypt_type] = three_d_secure_options
|
221
|
+
post[:crypt_type] = three_d_secure_options.dig(:eci)&.to_s&.sub!(/^0/, '')
|
220
222
|
post[:cavv] = three_d_secure_options[:cavv]
|
221
223
|
post[:threeds_server_trans_id] = three_d_secure_options[:three_ds_server_trans_id]
|
222
224
|
post[:ds_trans_id] = three_d_secure_options[:ds_transaction_id]
|
@@ -248,6 +250,10 @@ module ActiveMerchant #:nodoc:
|
|
248
250
|
post[:payment_information] = options[:payment_information] if options[:payment_information]
|
249
251
|
end
|
250
252
|
|
253
|
+
def add_cust_id(post, options)
|
254
|
+
post[:cust_id] = options[:cust_id] if options[:cust_id]
|
255
|
+
end
|
256
|
+
|
251
257
|
def add_stored_credential(post, options)
|
252
258
|
add_cof(post, options)
|
253
259
|
# if any of :issuer_id, :payment_information, or :payment_indicator is not passed,
|
@@ -467,8 +473,8 @@ module ActiveMerchant #:nodoc:
|
|
467
473
|
'indrefund' => %i[order_id cust_id amount pan expdate crypt_type],
|
468
474
|
'completion' => %i[order_id comp_amount txn_number crypt_type],
|
469
475
|
'purchasecorrection' => %i[order_id txn_number crypt_type],
|
470
|
-
'cavv_preauth' => %i[order_id cust_id amount pan expdate cavv crypt_type wallet_indicator],
|
471
|
-
'cavv_purchase' => %i[order_id cust_id amount pan expdate cavv crypt_type wallet_indicator],
|
476
|
+
'cavv_preauth' => %i[order_id cust_id amount pan expdate cavv crypt_type wallet_indicator threeds_version threeds_server_trans_id ds_trans_id],
|
477
|
+
'cavv_purchase' => %i[order_id cust_id amount pan expdate cavv crypt_type wallet_indicator threeds_version threeds_server_trans_id ds_trans_id],
|
472
478
|
'card_verification' => %i[order_id cust_id pan expdate crypt_type avs_info cvd_info cof_info],
|
473
479
|
'transact' => %i[order_id cust_id amount pan expdate crypt_type],
|
474
480
|
'Batchcloseall' => [],
|
@@ -113,11 +113,15 @@ module ActiveMerchant #:nodoc:
|
|
113
113
|
response = parse(data)
|
114
114
|
message = message_from(response)
|
115
115
|
|
116
|
-
Response.new(
|
116
|
+
Response.new(
|
117
|
+
success?(response),
|
118
|
+
message,
|
119
|
+
response,
|
117
120
|
test: test?,
|
118
121
|
authorization: response['transactionid'],
|
119
122
|
avs_result: { code: response['avsresponse'] },
|
120
|
-
cvv_result: response['cvvresponse']
|
123
|
+
cvv_result: response['cvvresponse']
|
124
|
+
)
|
121
125
|
end
|
122
126
|
|
123
127
|
def success?(response)
|
@@ -233,16 +233,24 @@ module ActiveMerchant #:nodoc:
|
|
233
233
|
def commit(action, request)
|
234
234
|
response = parse(ssl_post(test? ? self.test_url : self.live_url, build_request(action, request)))
|
235
235
|
|
236
|
-
Response.new(
|
236
|
+
Response.new(
|
237
|
+
success?(response),
|
238
|
+
message_from(response),
|
239
|
+
response,
|
237
240
|
test: test?,
|
238
|
-
authorization: authorization_from(action, response)
|
241
|
+
authorization: authorization_from(action, response)
|
242
|
+
)
|
239
243
|
end
|
240
244
|
|
241
245
|
def commit_periodic(action, request)
|
242
246
|
response = parse(ssl_post(test? ? self.test_periodic_url : self.live_periodic_url, build_periodic_request(action, request)))
|
243
|
-
Response.new(
|
247
|
+
Response.new(
|
248
|
+
success?(response),
|
249
|
+
message_from(response),
|
250
|
+
response,
|
244
251
|
test: test?,
|
245
|
-
authorization: authorization_from(action, response)
|
252
|
+
authorization: authorization_from(action, response)
|
253
|
+
)
|
246
254
|
end
|
247
255
|
|
248
256
|
def success?(response)
|
@@ -144,8 +144,12 @@ module ActiveMerchant
|
|
144
144
|
# get gateway response
|
145
145
|
response = parse(ssl_post(self.live_url, post_data(action, params)))
|
146
146
|
|
147
|
-
Response.new(
|
148
|
-
|
147
|
+
Response.new(
|
148
|
+
response['status'] == 'approved',
|
149
|
+
message_from(response),
|
150
|
+
response,
|
151
|
+
authorization: authorization_from(response, action)
|
152
|
+
)
|
149
153
|
end
|
150
154
|
|
151
155
|
def post_data(action, params)
|
@@ -233,7 +233,7 @@ module ActiveMerchant #:nodoc:
|
|
233
233
|
end
|
234
234
|
|
235
235
|
def map_3ds(three_d_secure_options)
|
236
|
-
|
236
|
+
{
|
237
237
|
eci: three_d_secure_options[:eci],
|
238
238
|
cavv: three_d_secure_options[:cavv],
|
239
239
|
xid: three_d_secure_options[:xid],
|
@@ -241,8 +241,6 @@ module ActiveMerchant #:nodoc:
|
|
241
241
|
threeDSecureVersion: three_d_secure_options[:version],
|
242
242
|
directoryServerTransactionId: three_d_secure_options[:ds_transaction_id]
|
243
243
|
}
|
244
|
-
|
245
|
-
mapped
|
246
244
|
end
|
247
245
|
|
248
246
|
def parse(body)
|
@@ -193,11 +193,15 @@ module ActiveMerchant #:nodoc:
|
|
193
193
|
def commit(action, parameters)
|
194
194
|
response = parse(ssl_post(self.live_url, post_data(action, parameters)))
|
195
195
|
|
196
|
-
Response.new(
|
196
|
+
Response.new(
|
197
|
+
success?(response),
|
198
|
+
message_from(response),
|
199
|
+
response,
|
197
200
|
test: test_response?(response),
|
198
201
|
authorization: response[:trans_id],
|
199
202
|
avs_result: { code: response[:avs_code] },
|
200
|
-
cvv_result: response[:cvv2_code]
|
203
|
+
cvv_result: response[:cvv2_code]
|
204
|
+
)
|
201
205
|
rescue ActiveMerchant::ResponseError => e
|
202
206
|
raise unless e.response.code =~ /^[67]\d\d$/
|
203
207
|
|
@@ -200,11 +200,15 @@ module ActiveMerchant #:nodoc:
|
|
200
200
|
|
201
201
|
authorization = authorization_from(success, parameters, raw)
|
202
202
|
|
203
|
-
Response.new(
|
203
|
+
Response.new(
|
204
|
+
success,
|
205
|
+
raw['responsetext'],
|
206
|
+
raw,
|
204
207
|
test: test?,
|
205
208
|
authorization: authorization,
|
206
209
|
avs_result: { code: raw['avsresponse'] },
|
207
|
-
cvv_result: raw['cvvresponse']
|
210
|
+
cvv_result: raw['cvvresponse']
|
211
|
+
)
|
208
212
|
end
|
209
213
|
|
210
214
|
def build_request(action, parameters)
|
@@ -8,7 +8,7 @@ module ActiveMerchant #:nodoc:
|
|
8
8
|
self.test_url = self.live_url = 'https://secure.networkmerchants.com/api/transact.php'
|
9
9
|
self.default_currency = 'USD'
|
10
10
|
self.money_format = :dollars
|
11
|
-
self.supported_countries = [
|
11
|
+
self.supported_countries = %w[US CA]
|
12
12
|
self.supported_cardtypes = %i[visa master american_express discover]
|
13
13
|
self.homepage_url = 'http://nmi.com/'
|
14
14
|
self.display_name = 'NMI'
|
@@ -134,6 +134,7 @@ module ActiveMerchant #:nodoc:
|
|
134
134
|
gsub(%r((cvv=)\d+), '\1[FILTERED]').
|
135
135
|
gsub(%r((checkaba=)\d+), '\1[FILTERED]').
|
136
136
|
gsub(%r((checkaccount=)\d+), '\1[FILTERED]').
|
137
|
+
gsub(%r((cavv=)[^&\n]*), '\1[FILTERED]').
|
137
138
|
gsub(%r((cryptogram=)[^&]+(&?)), '\1[FILTERED]\2')
|
138
139
|
end
|
139
140
|
|
@@ -166,7 +167,7 @@ module ActiveMerchant #:nodoc:
|
|
166
167
|
elsif payment_method.is_a?(NetworkTokenizationCreditCard)
|
167
168
|
post[:ccnumber] = payment_method.number
|
168
169
|
post[:ccexp] = exp_date(payment_method)
|
169
|
-
post
|
170
|
+
add_network_token_fields(post, payment_method)
|
170
171
|
elsif card_brand(payment_method) == 'check'
|
171
172
|
post[:payment] = 'check'
|
172
173
|
post[:firstname] = payment_method.first_name
|
@@ -187,6 +188,17 @@ module ActiveMerchant #:nodoc:
|
|
187
188
|
end
|
188
189
|
end
|
189
190
|
|
191
|
+
def add_network_token_fields(post, payment_method)
|
192
|
+
if payment_method.source == :apple_pay || payment_method.source == :google_pay
|
193
|
+
post[:cavv] = payment_method.payment_cryptogram
|
194
|
+
post[:eci] = payment_method.eci
|
195
|
+
post[:decrypted_applepay_data] = 1
|
196
|
+
post[:decrypted_googlepay_data] = 1
|
197
|
+
else
|
198
|
+
post[:token_cryptogram] = payment_method.payment_cryptogram
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
190
202
|
def add_stored_credential(post, options)
|
191
203
|
return unless (stored_credential = options[:stored_credential])
|
192
204
|
|
@@ -212,7 +224,8 @@ module ActiveMerchant #:nodoc:
|
|
212
224
|
else
|
213
225
|
post[:stored_credential_indicator] = 'used'
|
214
226
|
# should only send :initial_transaction_id if it is a MIT
|
215
|
-
|
227
|
+
ntid = options[:network_transaction_id] || stored_credential[:network_transaction_id]
|
228
|
+
post[:initial_transaction_id] = ntid if post[:initiated_by] == 'merchant'
|
216
229
|
end
|
217
230
|
end
|
218
231
|
|
@@ -334,8 +347,7 @@ module ActiveMerchant #:nodoc:
|
|
334
347
|
end
|
335
348
|
|
336
349
|
def headers
|
337
|
-
|
338
|
-
headers
|
350
|
+
{ 'Content-Type' => 'application/x-www-form-urlencoded;charset=UTF-8' }
|
339
351
|
end
|
340
352
|
|
341
353
|
def post_data(action, params)
|
@@ -347,7 +359,7 @@ module ActiveMerchant #:nodoc:
|
|
347
359
|
end
|
348
360
|
|
349
361
|
def parse(body)
|
350
|
-
|
362
|
+
CGI::parse(body).map { |k, v| [k.intern, v.first] }.to_h
|
351
363
|
end
|
352
364
|
|
353
365
|
def success_from(response)
|
@@ -263,7 +263,7 @@ module ActiveMerchant #:nodoc:
|
|
263
263
|
end
|
264
264
|
|
265
265
|
def add_payment_source(post, payment_source, options)
|
266
|
-
add_d3d(post, options) if options[:d3d]
|
266
|
+
add_d3d(post, options) if options[:d3d] || three_d_secure(options)
|
267
267
|
if payment_source.is_a?(String)
|
268
268
|
add_alias(post, payment_source, options[:alias_operation])
|
269
269
|
add_eci(post, options[:eci] || '9')
|
@@ -460,7 +460,7 @@ module ActiveMerchant #:nodoc:
|
|
460
460
|
raise "Unknown signature algorithm #{algorithm}"
|
461
461
|
end
|
462
462
|
|
463
|
-
filtered_params = signed_parameters.
|
463
|
+
filtered_params = signed_parameters.reject { |_k, v| v.nil? || v == '' }
|
464
464
|
sha_encryptor.hexdigest(
|
465
465
|
filtered_params.sort_by { |k, _v| k.upcase }.map { |k, v| "#{k.upcase}=#{v}#{secret}" }.join('')
|
466
466
|
).upcase
|
@@ -494,6 +494,10 @@ module ActiveMerchant #:nodoc:
|
|
494
494
|
end
|
495
495
|
response_hash
|
496
496
|
end
|
497
|
+
|
498
|
+
def three_d_secure(options)
|
499
|
+
options[:three_d_secure] ? options[:three_d_secure][:required] : false
|
500
|
+
end
|
497
501
|
end
|
498
502
|
|
499
503
|
class OgoneResponse < Response
|
@@ -201,11 +201,13 @@ module ActiveMerchant #:nodoc:
|
|
201
201
|
response = http_request(method, resource, parameters, options)
|
202
202
|
success = !error?(response)
|
203
203
|
|
204
|
-
Response.new(
|
204
|
+
Response.new(
|
205
|
+
success,
|
205
206
|
(success ? response['error_code'] : response['description']),
|
206
207
|
response,
|
207
208
|
test: test?,
|
208
|
-
authorization: response['id']
|
209
|
+
authorization: response['id']
|
210
|
+
)
|
209
211
|
end
|
210
212
|
|
211
213
|
def http_request(method, resource, parameters = {}, options = {})
|
@@ -125,8 +125,7 @@ module ActiveMerchant #:nodoc:
|
|
125
125
|
def purchase(money, payment, options = {})
|
126
126
|
# debit
|
127
127
|
options[:registrationId] = payment if payment.is_a?(String)
|
128
|
-
execute_dbpa(options[:risk_workflow] ? 'PA.CP' : 'DB',
|
129
|
-
money, payment, options)
|
128
|
+
execute_dbpa(options[:risk_workflow] ? 'PA.CP' : 'DB', money, payment, options)
|
130
129
|
end
|
131
130
|
|
132
131
|
def authorize(money, payment, options = {})
|
@@ -121,11 +121,15 @@ module ActiveMerchant #:nodoc:
|
|
121
121
|
txnRequest = escape_uri(xml)
|
122
122
|
response = parse(ssl_post(test? ? self.test_url : self.live_url, "txnMode=#{action}&txnRequest=#{txnRequest}"))
|
123
123
|
|
124
|
-
Response.new(
|
124
|
+
Response.new(
|
125
|
+
successful?(response),
|
126
|
+
message_from(response),
|
127
|
+
hash_from_xml(response),
|
125
128
|
test: test?,
|
126
129
|
authorization: authorization_from(response),
|
127
130
|
avs_result: { code: avs_result_from(response) },
|
128
|
-
cvv_result: cvv_result_from(response)
|
131
|
+
cvv_result: cvv_result_from(response)
|
132
|
+
)
|
129
133
|
end
|
130
134
|
|
131
135
|
# The upstream is picky and so we can't use CGI.escape like we want to
|
@@ -33,9 +33,7 @@ module ActiveMerchant #:nodoc:
|
|
33
33
|
errors << [:merchant_phone, 'is required to follow "NNN-NNN-NNNN" or "NNN-AAAAAAA" format'] if !empty?(self.merchant_phone) && !self.merchant_phone.match(PHONE_FORMAT_1) && !self.merchant_phone.match(PHONE_FORMAT_2)
|
34
34
|
|
35
35
|
%i[merchant_email merchant_url].each do |attr|
|
36
|
-
|
37
|
-
errors << [attr, 'is required to be 13 bytes or less'] if self.send(attr).bytesize > 13
|
38
|
-
end
|
36
|
+
errors << [attr, 'is required to be 13 bytes or less'] if !self.send(attr).blank? && (self.send(attr).bytesize > 13)
|
39
37
|
end
|
40
38
|
|
41
39
|
errors_hash(errors)
|
@@ -30,7 +30,7 @@ module ActiveMerchant #:nodoc:
|
|
30
30
|
class OrbitalGateway < Gateway
|
31
31
|
include Empty
|
32
32
|
|
33
|
-
API_VERSION = '9.
|
33
|
+
API_VERSION = '9.5'
|
34
34
|
|
35
35
|
POST_HEADERS = {
|
36
36
|
'MIME-Version' => '1.1',
|
@@ -193,6 +193,10 @@ module ActiveMerchant #:nodoc:
|
|
193
193
|
'checking' => 'C'
|
194
194
|
}
|
195
195
|
|
196
|
+
# safetech token flags
|
197
|
+
GET_TOKEN = 'GT'
|
198
|
+
USE_TOKEN = 'UT'
|
199
|
+
|
196
200
|
def initialize(options = {})
|
197
201
|
requires!(options, :merchant_id)
|
198
202
|
requires!(options, :login, :password) unless options[:ip_authentication]
|
@@ -253,6 +257,11 @@ module ActiveMerchant #:nodoc:
|
|
253
257
|
commit(order, :refund, options[:retry_logic], options[:trace_number])
|
254
258
|
end
|
255
259
|
|
260
|
+
# Orbital save a payment method if the TokenTxnType is 'GT', that's why we use this as the default value for store
|
261
|
+
def store(creditcard, options = {})
|
262
|
+
authorize(0, creditcard, options.merge({ token_txn_type: GET_TOKEN }))
|
263
|
+
end
|
264
|
+
|
256
265
|
def void(authorization, options = {}, deprecated = {})
|
257
266
|
if !options.kind_of?(Hash)
|
258
267
|
ActiveMerchant.deprecated('Calling the void method with an amount parameter is deprecated and will be removed in a future version.')
|
@@ -487,6 +496,35 @@ module ActiveMerchant #:nodoc:
|
|
487
496
|
end
|
488
497
|
end
|
489
498
|
|
499
|
+
def add_level2_card_and_more_tax(xml, options = {})
|
500
|
+
if (level2 = options[:level_2_data])
|
501
|
+
xml.tag! :PCardRequestorName, byte_limit(level2[:requestor_name], 38) if level2[:requestor_name]
|
502
|
+
xml.tag! :PCardLocalTaxRate, byte_limit(level2[:local_tax_rate], 5) if level2[:local_tax_rate]
|
503
|
+
# Canadian Merchants Only
|
504
|
+
xml.tag! :PCardNationalTax, byte_limit(level2[:national_tax], 12) if level2[:national_tax]
|
505
|
+
xml.tag! :PCardPstTaxRegNumber, byte_limit(level2[:pst_tax_reg_number], 15) if level2[:pst_tax_reg_number]
|
506
|
+
xml.tag! :PCardCustomerVatRegNumber, byte_limit(level2[:customer_vat_reg_number], 13) if level2[:customer_vat_reg_number]
|
507
|
+
# Canadian Merchants Only
|
508
|
+
xml.tag! :PCardMerchantVatRegNumber, byte_limit(level2[:merchant_vat_reg_number], 20) if level2[:merchant_vat_reg_number]
|
509
|
+
xml.tag! :PCardTotalTaxAmount, byte_limit(level2[:total_tax_amount], 12) if level2[:total_tax_amount]
|
510
|
+
end
|
511
|
+
end
|
512
|
+
|
513
|
+
def add_card_commodity_code(xml, options = {})
|
514
|
+
if (level2 = options[:level_2_data]) && (level2[:commodity_code])
|
515
|
+
xml.tag! :PCardCommodityCode, byte_limit(level2[:commodity_code], 4)
|
516
|
+
end
|
517
|
+
end
|
518
|
+
|
519
|
+
def add_level3_vat_fields(xml, options = {})
|
520
|
+
if (level3 = options[:level_3_data])
|
521
|
+
xml.tag! :PC3InvoiceDiscTreatment, byte_limit(level3[:invoice_discount_treatment], 1) if level3[:invoice_discount_treatment]
|
522
|
+
xml.tag! :PC3TaxTreatment, byte_limit(level3[:tax_treatment], 1) if level3[:tax_treatment]
|
523
|
+
xml.tag! :PC3UniqueVATInvoiceRefNum, byte_limit(level3[:unique_vat_invoice_ref], 15) if level3[:unique_vat_invoice_ref]
|
524
|
+
xml.tag! :PC3ShipVATRate, byte_limit(level3[:ship_vat_rate], 4) if level3[:ship_vat_rate]
|
525
|
+
end
|
526
|
+
end
|
527
|
+
|
490
528
|
#=====ADDRESS FIELDS=====
|
491
529
|
|
492
530
|
def add_address(xml, payment_source, options)
|
@@ -536,9 +574,9 @@ module ActiveMerchant #:nodoc:
|
|
536
574
|
end
|
537
575
|
|
538
576
|
def billing_name(payment_source, options)
|
539
|
-
if payment_source&.name.present?
|
577
|
+
if !payment_source.is_a?(String) && payment_source&.name.present?
|
540
578
|
payment_source.name[0..29]
|
541
|
-
elsif options[:billing_address][:name].present?
|
579
|
+
elsif options[:billing_address] && options[:billing_address][:name].present?
|
542
580
|
options[:billing_address][:name][0..29]
|
543
581
|
end
|
544
582
|
end
|
@@ -555,10 +593,17 @@ module ActiveMerchant #:nodoc:
|
|
555
593
|
options[:billing_address] || options[:address]
|
556
594
|
end
|
557
595
|
|
596
|
+
def add_safetech_token_data(xml, payment_source, options)
|
597
|
+
payment_source_token = split_authorization(payment_source).values_at(2).first
|
598
|
+
xml.tag! :CardBrand, options[:card_brand]
|
599
|
+
xml.tag! :AccountNum, payment_source_token
|
600
|
+
end
|
601
|
+
|
558
602
|
#=====PAYMENT SOURCE FIELDS=====
|
559
603
|
|
560
604
|
# Payment can be done through either Credit Card or Electronic Check
|
561
605
|
def add_payment_source(xml, payment_source, options = {})
|
606
|
+
add_safetech_token_data(xml, payment_source, options) if payment_source.is_a?(String)
|
562
607
|
payment_source.is_a?(Check) ? add_echeck(xml, payment_source, options) : add_credit_card(xml, payment_source, options)
|
563
608
|
end
|
564
609
|
|
@@ -576,10 +621,10 @@ module ActiveMerchant #:nodoc:
|
|
576
621
|
end
|
577
622
|
|
578
623
|
def add_credit_card(xml, credit_card, options)
|
579
|
-
xml.tag! :AccountNum, credit_card.number if credit_card
|
580
|
-
xml.tag! :Exp, expiry_date(credit_card) if credit_card
|
624
|
+
xml.tag! :AccountNum, credit_card.number if credit_card.is_a?(CreditCard)
|
625
|
+
xml.tag! :Exp, expiry_date(credit_card) if credit_card.is_a?(CreditCard)
|
581
626
|
add_currency_fields(xml, options[:currency])
|
582
|
-
add_verification_value(xml, credit_card) if credit_card
|
627
|
+
add_verification_value(xml, credit_card) if credit_card.is_a?(CreditCard)
|
583
628
|
end
|
584
629
|
|
585
630
|
def add_verification_value(xml, credit_card)
|
@@ -679,7 +724,7 @@ module ActiveMerchant #:nodoc:
|
|
679
724
|
add_mc_sca_recurring(xml, credit_card, parameters, three_d_secure)
|
680
725
|
add_mc_program_protocol(xml, credit_card, three_d_secure)
|
681
726
|
add_mc_directory_trans_id(xml, credit_card, three_d_secure)
|
682
|
-
add_mc_ucafind(xml, credit_card, three_d_secure)
|
727
|
+
add_mc_ucafind(xml, credit_card, three_d_secure, parameters)
|
683
728
|
end
|
684
729
|
|
685
730
|
def add_mc_sca_merchant_initiated(xml, credit_card, parameters, three_d_secure)
|
@@ -708,10 +753,16 @@ module ActiveMerchant #:nodoc:
|
|
708
753
|
xml.tag!(:MCDirectoryTransID, three_d_secure[:ds_transaction_id]) if three_d_secure[:ds_transaction_id]
|
709
754
|
end
|
710
755
|
|
711
|
-
def add_mc_ucafind(xml, credit_card, three_d_secure)
|
756
|
+
def add_mc_ucafind(xml, credit_card, three_d_secure, options)
|
712
757
|
return unless three_d_secure
|
713
758
|
|
714
|
-
|
759
|
+
if options[:alternate_ucaf_flow]
|
760
|
+
return unless %w(4 6 7).include?(three_d_secure[:eci])
|
761
|
+
|
762
|
+
xml.tag! :UCAFInd, options[:ucaf_collection_indicator] if options[:ucaf_collection_indicator]
|
763
|
+
else
|
764
|
+
xml.tag! :UCAFInd, options[:ucaf_collection_indicator] || '4'
|
765
|
+
end
|
715
766
|
end
|
716
767
|
|
717
768
|
#=====SCA (STORED CREDENTIAL) FIELDS=====
|
@@ -886,13 +937,19 @@ module ActiveMerchant #:nodoc:
|
|
886
937
|
request.call(remote_url(:secondary))
|
887
938
|
end
|
888
939
|
|
889
|
-
|
940
|
+
authorization = authorization_string(response[:tx_ref_num], response[:order_id], response[:safetech_token], response[:card_brand])
|
941
|
+
|
942
|
+
Response.new(
|
943
|
+
success?(response, message_type),
|
944
|
+
message_from(response),
|
945
|
+
response,
|
890
946
|
{
|
891
|
-
authorization:
|
947
|
+
authorization: authorization,
|
892
948
|
test: self.test?,
|
893
949
|
avs_result: OrbitalGateway::AVSResult.new(response[:avs_resp_code]),
|
894
950
|
cvv_result: OrbitalGateway::CVVResult.new(response[:cvv2_resp_code])
|
895
|
-
}
|
951
|
+
}
|
952
|
+
)
|
896
953
|
end
|
897
954
|
|
898
955
|
def remote_url(url = :primary)
|
@@ -981,35 +1038,34 @@ module ActiveMerchant #:nodoc:
|
|
981
1038
|
xml.tag! :OrderID, format_order_id(parameters[:order_id])
|
982
1039
|
xml.tag! :Amount, amount(money)
|
983
1040
|
xml.tag! :Comments, parameters[:comments] if parameters[:comments]
|
984
|
-
|
985
1041
|
add_level2_tax(xml, parameters)
|
986
1042
|
add_level2_advice_addendum(xml, parameters)
|
987
|
-
|
988
1043
|
add_aav(xml, payment_source, three_d_secure)
|
989
1044
|
# CustomerAni, AVSPhoneType and AVSDestPhoneType could be added here.
|
990
|
-
|
991
1045
|
add_soft_descriptors(xml, parameters[:soft_descriptors])
|
992
|
-
add_payment_action_ind(xml, parameters[:payment_action_ind])
|
993
|
-
add_dpanind(xml, payment_source, parameters[:industry_type])
|
994
|
-
add_aevv(xml, payment_source, three_d_secure)
|
995
|
-
add_digital_token_cryptogram(xml, payment_source, three_d_secure)
|
996
|
-
|
997
|
-
xml.tag! :ECPSameDayInd, parameters[:same_day] if parameters[:same_day] && payment_source.is_a?(Check)
|
998
|
-
|
999
1046
|
set_recurring_ind(xml, parameters)
|
1000
1047
|
|
1001
1048
|
# Append Transaction Reference Number at the end for Refund transactions
|
1002
1049
|
add_tx_ref_num(xml, parameters[:authorization]) if action == REFUND && payment_source.nil?
|
1003
|
-
|
1004
1050
|
add_level2_purchase(xml, parameters)
|
1005
1051
|
add_level3_purchase(xml, parameters)
|
1006
1052
|
add_level3_tax(xml, parameters)
|
1007
1053
|
add_line_items(xml, parameters) if parameters[:line_items]
|
1008
|
-
add_ecp_details(xml, payment_source, parameters) if payment_source.is_a?(Check)
|
1009
1054
|
add_card_indicators(xml, parameters)
|
1055
|
+
add_payment_action_ind(xml, parameters[:payment_action_ind])
|
1056
|
+
add_dpanind(xml, payment_source, parameters[:industry_type])
|
1057
|
+
add_aevv(xml, payment_source, three_d_secure)
|
1058
|
+
add_level2_card_and_more_tax(xml, parameters)
|
1059
|
+
add_digital_token_cryptogram(xml, payment_source, three_d_secure)
|
1060
|
+
xml.tag! :ECPSameDayInd, parameters[:same_day] if parameters[:same_day] && payment_source.is_a?(Check)
|
1061
|
+
add_ecp_details(xml, payment_source, parameters) if payment_source.is_a?(Check)
|
1062
|
+
|
1010
1063
|
add_stored_credentials(xml, parameters)
|
1011
1064
|
add_pymt_brand_program_code(xml, payment_source, three_d_secure)
|
1065
|
+
xml.tag! :TokenTxnType, parameters[:token_txn_type] if parameters[:token_txn_type]
|
1012
1066
|
add_mastercard_fields(xml, payment_source, parameters, three_d_secure) if mastercard?(payment_source)
|
1067
|
+
add_card_commodity_code(xml, parameters)
|
1068
|
+
add_level3_vat_fields(xml, parameters)
|
1013
1069
|
end
|
1014
1070
|
end
|
1015
1071
|
xml.target!
|
@@ -1031,6 +1087,9 @@ module ActiveMerchant #:nodoc:
|
|
1031
1087
|
add_level3_purchase(xml, parameters)
|
1032
1088
|
add_level3_tax(xml, parameters)
|
1033
1089
|
add_line_items(xml, parameters) if parameters[:line_items]
|
1090
|
+
add_level2_card_and_more_tax(xml, parameters)
|
1091
|
+
add_card_commodity_code(xml, parameters)
|
1092
|
+
add_level3_vat_fields(xml, parameters)
|
1034
1093
|
end
|
1035
1094
|
end
|
1036
1095
|
xml.target!
|
@@ -121,7 +121,10 @@ module ActiveMerchant #:nodoc:
|
|
121
121
|
|
122
122
|
test_mode = test? || message =~ /TESTMODE/
|
123
123
|
|
124
|
-
Response.new(
|
124
|
+
Response.new(
|
125
|
+
success?(response),
|
126
|
+
message,
|
127
|
+
response,
|
125
128
|
test: test_mode,
|
126
129
|
authorization: response['TrackingNumber'],
|
127
130
|
fraud_review: fraud_review?(response),
|
@@ -129,7 +132,8 @@ module ActiveMerchant #:nodoc:
|
|
129
132
|
postal_match: AVS_POSTAL_CODES[response['AVSPostalResponseCode']],
|
130
133
|
street_match: AVS_ADDRESS_CODES[response['AVSAddressResponseCode']]
|
131
134
|
},
|
132
|
-
cvv_result: CVV2_CODES[response['CVV2ResponseCode']]
|
135
|
+
cvv_result: CVV2_CODES[response['CVV2ResponseCode']]
|
136
|
+
)
|
133
137
|
end
|
134
138
|
|
135
139
|
def url(action)
|
@@ -178,8 +182,7 @@ module ActiveMerchant #:nodoc:
|
|
178
182
|
post['RequestID'] = request_id
|
179
183
|
post['Signature'] = signature(action, post, parameters)
|
180
184
|
|
181
|
-
|
182
|
-
request
|
185
|
+
post.merge(parameters).collect { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join('&')
|
183
186
|
end
|
184
187
|
|
185
188
|
def timestamp
|
@@ -264,9 +264,13 @@ module ActiveMerchant #:nodoc:
|
|
264
264
|
|
265
265
|
def commit(action, request, authorization = nil)
|
266
266
|
response = parse(action, ssl_post(self.live_url, request))
|
267
|
-
Response.new(
|
267
|
+
Response.new(
|
268
|
+
successful?(response),
|
269
|
+
message_from(response),
|
270
|
+
response,
|
268
271
|
test: test?,
|
269
|
-
authorization: authorization || response[:tid]
|
272
|
+
authorization: authorization || response[:tid]
|
273
|
+
)
|
270
274
|
end
|
271
275
|
|
272
276
|
def message_from(response)
|