activemerchant 1.79.2 → 1.80.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +33 -0
- data/README.md +10 -2
- data/lib/active_merchant.rb +1 -1
- data/lib/active_merchant/billing/check.rb +4 -4
- data/lib/active_merchant/billing/compatibility.rb +1 -1
- data/lib/active_merchant/billing/credit_card.rb +21 -21
- data/lib/active_merchant/billing/credit_card_formatting.rb +2 -2
- data/lib/active_merchant/billing/credit_card_methods.rb +2 -2
- data/lib/active_merchant/billing/gateway.rb +13 -13
- data/lib/active_merchant/billing/gateways/adyen.rb +31 -15
- data/lib/active_merchant/billing/gateways/allied_wallet.rb +22 -22
- data/lib/active_merchant/billing/gateways/authorize_net.rb +72 -72
- data/lib/active_merchant/billing/gateways/authorize_net_arb.rb +3 -3
- data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +3 -3
- data/lib/active_merchant/billing/gateways/axcessms.rb +51 -51
- data/lib/active_merchant/billing/gateways/balanced.rb +29 -29
- data/lib/active_merchant/billing/gateways/bank_frick.rb +3 -3
- data/lib/active_merchant/billing/gateways/banwire.rb +8 -8
- data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +5 -5
- data/lib/active_merchant/billing/gateways/barclays_epdq_extra_plus.rb +6 -6
- data/lib/active_merchant/billing/gateways/be2bill.rb +2 -2
- data/lib/active_merchant/billing/gateways/beanstream.rb +1 -1
- data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +69 -69
- data/lib/active_merchant/billing/gateways/blue_pay.rb +19 -19
- data/lib/active_merchant/billing/gateways/blue_snap.rb +42 -42
- data/lib/active_merchant/billing/gateways/bogus.rb +10 -10
- data/lib/active_merchant/billing/gateways/borgun.rb +10 -10
- data/lib/active_merchant/billing/gateways/bpoint.rb +1 -1
- data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +2 -2
- data/lib/active_merchant/billing/gateways/braintree_blue.rb +94 -94
- data/lib/active_merchant/billing/gateways/braintree_orange.rb +1 -1
- data/lib/active_merchant/billing/gateways/bridge_pay.rb +39 -39
- data/lib/active_merchant/billing/gateways/cams.rb +12 -12
- data/lib/active_merchant/billing/gateways/card_connect.rb +38 -13
- data/lib/active_merchant/billing/gateways/card_stream.rb +116 -116
- data/lib/active_merchant/billing/gateways/cardknox.rb +7 -7
- data/lib/active_merchant/billing/gateways/cardprocess.rb +1 -1
- data/lib/active_merchant/billing/gateways/cashnet.rb +10 -10
- data/lib/active_merchant/billing/gateways/cc5.rb +3 -5
- data/lib/active_merchant/billing/gateways/cecabank.rb +6 -6
- data/lib/active_merchant/billing/gateways/cenpos.rb +36 -36
- data/lib/active_merchant/billing/gateways/checkout.rb +5 -5
- data/lib/active_merchant/billing/gateways/checkout_v2.rb +31 -31
- data/lib/active_merchant/billing/gateways/clearhaus.rb +5 -5
- data/lib/active_merchant/billing/gateways/commercegate.rb +6 -6
- data/lib/active_merchant/billing/gateways/conekta.rb +24 -19
- data/lib/active_merchant/billing/gateways/creditcall.rb +41 -41
- data/lib/active_merchant/billing/gateways/credorax.rb +104 -103
- data/lib/active_merchant/billing/gateways/culqi.rb +25 -25
- data/lib/active_merchant/billing/gateways/cyber_source.rb +65 -65
- data/lib/active_merchant/billing/gateways/data_cash.rb +4 -4
- data/lib/active_merchant/billing/gateways/dibs.rb +24 -24
- data/lib/active_merchant/billing/gateways/digitzs.rb +35 -35
- data/lib/active_merchant/billing/gateways/ebanx.rb +26 -26
- data/lib/active_merchant/billing/gateways/efsnet.rb +10 -10
- data/lib/active_merchant/billing/gateways/elavon.rb +5 -5
- data/lib/active_merchant/billing/gateways/element.rb +35 -35
- data/lib/active_merchant/billing/gateways/epay.rb +4 -4
- data/lib/active_merchant/billing/gateways/evo_ca.rb +1 -1
- data/lib/active_merchant/billing/gateways/eway.rb +65 -65
- data/lib/active_merchant/billing/gateways/eway_managed.rb +11 -11
- data/lib/active_merchant/billing/gateways/eway_rapid.rb +31 -31
- data/lib/active_merchant/billing/gateways/exact.rb +12 -12
- data/lib/active_merchant/billing/gateways/ezic.rb +13 -13
- data/lib/active_merchant/billing/gateways/fat_zebra.rb +24 -24
- data/lib/active_merchant/billing/gateways/federated_canada.rb +3 -3
- data/lib/active_merchant/billing/gateways/first_giving.rb +16 -16
- data/lib/active_merchant/billing/gateways/first_pay.rb +7 -4
- data/lib/active_merchant/billing/gateways/firstdata_e4.rb +71 -71
- data/lib/active_merchant/billing/gateways/flo2cash.rb +12 -12
- data/lib/active_merchant/billing/gateways/flo2cash_simple.rb +1 -1
- data/lib/active_merchant/billing/gateways/forte.rb +26 -16
- data/lib/active_merchant/billing/gateways/garanti.rb +10 -12
- data/lib/active_merchant/billing/gateways/global_collect.rb +88 -88
- data/lib/active_merchant/billing/gateways/global_transport.rb +4 -4
- data/lib/active_merchant/billing/gateways/hdfc.rb +33 -33
- data/lib/active_merchant/billing/gateways/hps.rb +28 -28
- data/lib/active_merchant/billing/gateways/iats_payments.rb +26 -26
- data/lib/active_merchant/billing/gateways/inspire.rb +15 -15
- data/lib/active_merchant/billing/gateways/instapay.rb +4 -4
- data/lib/active_merchant/billing/gateways/ipp.rb +17 -17
- data/lib/active_merchant/billing/gateways/iridium.rb +207 -207
- data/lib/active_merchant/billing/gateways/iveri.rb +8 -8
- data/lib/active_merchant/billing/gateways/jetpay.rb +134 -134
- data/lib/active_merchant/billing/gateways/jetpay_v2.rb +141 -141
- data/lib/active_merchant/billing/gateways/komoju.rb +15 -15
- data/lib/active_merchant/billing/gateways/kushki.rb +31 -37
- data/lib/active_merchant/billing/gateways/latitude19.rb +64 -64
- data/lib/active_merchant/billing/gateways/linkpoint.rb +22 -22
- data/lib/active_merchant/billing/gateways/litle.rb +4 -4
- data/lib/active_merchant/billing/gateways/mastercard.rb +3 -3
- data/lib/active_merchant/billing/gateways/maxipago.rb +2 -2
- data/lib/active_merchant/billing/gateways/mercado_pago.rb +28 -28
- data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +9 -9
- data/lib/active_merchant/billing/gateways/merchant_one.rb +6 -6
- data/lib/active_merchant/billing/gateways/merchant_partners.rb +24 -24
- data/lib/active_merchant/billing/gateways/merchant_ware.rb +49 -49
- data/lib/active_merchant/billing/gateways/merchant_ware_version_four.rb +36 -36
- data/lib/active_merchant/billing/gateways/merchant_warrior.rb +4 -4
- data/lib/active_merchant/billing/gateways/mercury.rb +28 -28
- data/lib/active_merchant/billing/gateways/metrics_global.rb +7 -7
- data/lib/active_merchant/billing/gateways/micropayment.rb +31 -31
- data/lib/active_merchant/billing/gateways/migs.rb +11 -9
- data/lib/active_merchant/billing/gateways/modern_payments.rb +1 -1
- data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +16 -16
- data/lib/active_merchant/billing/gateways/monei.rb +5 -5
- data/lib/active_merchant/billing/gateways/moneris.rb +26 -26
- data/lib/active_merchant/billing/gateways/moneris_us.rb +81 -37
- data/lib/active_merchant/billing/gateways/money_movers.rb +3 -3
- data/lib/active_merchant/billing/gateways/mundipagg.rb +1 -1
- data/lib/active_merchant/billing/gateways/nab_transact.rb +6 -6
- data/lib/active_merchant/billing/gateways/ncr_secure_pay.rb +3 -3
- data/lib/active_merchant/billing/gateways/netaxept.rb +15 -15
- data/lib/active_merchant/billing/gateways/netbanx.rb +2 -2
- data/lib/active_merchant/billing/gateways/netbilling.rb +1 -1
- data/lib/active_merchant/billing/gateways/netpay.rb +5 -5
- data/lib/active_merchant/billing/gateways/nmi.rb +18 -18
- data/lib/active_merchant/billing/gateways/ogone.rb +22 -22
- data/lib/active_merchant/billing/gateways/omise.rb +3 -3
- data/lib/active_merchant/billing/gateways/openpay.rb +6 -4
- data/lib/active_merchant/billing/gateways/opp.rb +4 -4
- data/lib/active_merchant/billing/gateways/optimal_payment.rb +2 -2
- data/lib/active_merchant/billing/gateways/orbital.rb +61 -61
- data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +4 -4
- data/lib/active_merchant/billing/gateways/pac_net_raven.rb +5 -5
- data/lib/active_merchant/billing/gateways/pagarme.rb +27 -27
- data/lib/active_merchant/billing/gateways/pago_facil.rb +8 -8
- data/lib/active_merchant/billing/gateways/pay_conex.rb +25 -25
- data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +32 -32
- data/lib/active_merchant/billing/gateways/pay_hub.rb +29 -29
- data/lib/active_merchant/billing/gateways/pay_junction.rb +7 -7
- data/lib/active_merchant/billing/gateways/pay_junction_v2.rb +30 -30
- data/lib/active_merchant/billing/gateways/pay_secure.rb +4 -4
- data/lib/active_merchant/billing/gateways/paybox_direct.rb +15 -15
- data/lib/active_merchant/billing/gateways/payeezy.rb +5 -5
- data/lib/active_merchant/billing/gateways/payex.rb +4 -4
- data/lib/active_merchant/billing/gateways/payflow.rb +7 -7
- data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +23 -22
- data/lib/active_merchant/billing/gateways/payflow_express.rb +2 -2
- data/lib/active_merchant/billing/gateways/payment_express.rb +40 -37
- data/lib/active_merchant/billing/gateways/paymentez.rb +11 -3
- data/lib/active_merchant/billing/gateways/paymill.rb +115 -115
- data/lib/active_merchant/billing/gateways/paypal.rb +1 -1
- data/lib/active_merchant/billing/gateways/paypal_digital_goods.rb +1 -1
- data/lib/active_merchant/billing/gateways/payscout.rb +1 -1
- data/lib/active_merchant/billing/gateways/paystation.rb +14 -14
- data/lib/active_merchant/billing/gateways/payu_in.rb +43 -43
- data/lib/active_merchant/billing/gateways/payu_latam.rb +41 -41
- data/lib/active_merchant/billing/gateways/payway.rb +6 -6
- data/lib/active_merchant/billing/gateways/pin.rb +7 -7
- data/lib/active_merchant/billing/gateways/plugnpay.rb +62 -62
- data/lib/active_merchant/billing/gateways/pro_pay.rb +123 -123
- data/lib/active_merchant/billing/gateways/psigate.rb +16 -16
- data/lib/active_merchant/billing/gateways/psl_card.rb +13 -13
- data/lib/active_merchant/billing/gateways/qbms.rb +52 -52
- data/lib/active_merchant/billing/gateways/quantum.rb +5 -5
- data/lib/active_merchant/billing/gateways/quickbooks.rb +10 -10
- data/lib/active_merchant/billing/gateways/quickpay.rb +1 -1
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_v10.rb +11 -11
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_v4to7.rb +3 -3
- data/lib/active_merchant/billing/gateways/qvalent.rb +55 -55
- data/lib/active_merchant/billing/gateways/realex.rb +16 -15
- data/lib/active_merchant/billing/gateways/redsys.rb +128 -121
- data/lib/active_merchant/billing/gateways/s5.rb +5 -5
- data/lib/active_merchant/billing/gateways/safe_charge.rb +16 -16
- data/lib/active_merchant/billing/gateways/sage.rb +20 -20
- data/lib/active_merchant/billing/gateways/sage_pay.rb +32 -32
- data/lib/active_merchant/billing/gateways/sallie_mae.rb +11 -11
- data/lib/active_merchant/billing/gateways/secure_net.rb +19 -19
- data/lib/active_merchant/billing/gateways/secure_pay.rb +5 -5
- data/lib/active_merchant/billing/gateways/secure_pay_au.rb +7 -7
- data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +9 -9
- data/lib/active_merchant/billing/gateways/securion_pay.rb +12 -12
- data/lib/active_merchant/billing/gateways/skip_jack.rb +28 -28
- data/lib/active_merchant/billing/gateways/smart_ps.rb +31 -31
- data/lib/active_merchant/billing/gateways/so_easy_pay.rb +3 -3
- data/lib/active_merchant/billing/gateways/spreedly_core.rb +1 -1
- data/lib/active_merchant/billing/gateways/stripe.rb +63 -63
- data/lib/active_merchant/billing/gateways/swipe_checkout.rb +5 -5
- data/lib/active_merchant/billing/gateways/telr.rb +26 -26
- data/lib/active_merchant/billing/gateways/trans_first.rb +28 -28
- data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +224 -224
- data/lib/active_merchant/billing/gateways/transact_pro.rb +7 -7
- data/lib/active_merchant/billing/gateways/transnational.rb +1 -1
- data/lib/active_merchant/billing/gateways/trexle.rb +5 -5
- data/lib/active_merchant/billing/gateways/trust_commerce.rb +38 -38
- data/lib/active_merchant/billing/gateways/usa_epay.rb +3 -3
- data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +37 -37
- data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +3 -3
- data/lib/active_merchant/billing/gateways/vanco.rb +25 -25
- data/lib/active_merchant/billing/gateways/verifi.rb +40 -40
- data/lib/active_merchant/billing/gateways/viaklix.rb +5 -5
- data/lib/active_merchant/billing/gateways/visanet_peru.rb +64 -36
- data/lib/active_merchant/billing/gateways/webpay.rb +8 -8
- data/lib/active_merchant/billing/gateways/wepay.rb +25 -25
- data/lib/active_merchant/billing/gateways/wirecard.rb +26 -26
- data/lib/active_merchant/billing/gateways/worldpay.rb +15 -15
- data/lib/active_merchant/billing/gateways/worldpay_online_payments.rb +42 -42
- data/lib/active_merchant/billing/gateways/worldpay_us.rb +17 -17
- data/lib/active_merchant/billing/model.rb +2 -2
- data/lib/active_merchant/billing/network_tokenization_credit_card.rb +1 -1
- data/lib/active_merchant/billing/rails.rb +1 -1
- data/lib/active_merchant/connection.rb +10 -8
- data/lib/active_merchant/country.rb +1 -1
- data/lib/active_merchant/net_http_ssl_connection.rb +1 -0
- data/lib/active_merchant/network_connection_retries.rb +12 -12
- data/lib/active_merchant/post_data.rb +1 -1
- data/lib/active_merchant/posts_data.rb +1 -1
- data/lib/active_merchant/version.rb +1 -1
- data/lib/certs/cacert.pem +37 -0
- data/lib/support/gateway_support.rb +2 -2
- data/lib/support/ssl_verify.rb +5 -5
- data/lib/support/ssl_version.rb +7 -7
- metadata +3 -7
- data/lib/active_merchant/billing/gateways/ideal/ideal_base.rb +0 -246
- data/lib/active_merchant/billing/gateways/ideal/ideal_rabobank.pem +0 -13
- data/lib/active_merchant/billing/gateways/ideal/ideal_response.rb +0 -29
- data/lib/active_merchant/billing/gateways/ideal_rabobank.rb +0 -66
|
@@ -48,11 +48,11 @@ module ActiveMerchant #:nodoc:
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
TRANSACTIONS = {
|
|
51
|
-
:purchase =>
|
|
52
|
-
:authorization =>
|
|
53
|
-
:capture =>
|
|
54
|
-
:void =>
|
|
55
|
-
:credit =>
|
|
51
|
+
:purchase => 'Sale',
|
|
52
|
+
:authorization => 'Authorization',
|
|
53
|
+
:capture => 'Capture',
|
|
54
|
+
:void => 'Void',
|
|
55
|
+
:credit => 'Credit'
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
CVV_CODE = {
|
|
@@ -83,7 +83,7 @@ module ActiveMerchant #:nodoc:
|
|
|
83
83
|
def build_request(body, options = {})
|
|
84
84
|
xml = Builder::XmlMarkup.new
|
|
85
85
|
xml.instruct!
|
|
86
|
-
xml.tag! 'XMLPayRequest', 'Timeout' => timeout.to_s, 'version' =>
|
|
86
|
+
xml.tag! 'XMLPayRequest', 'Timeout' => timeout.to_s, 'version' => '2.1', 'xmlns' => XMLNS do
|
|
87
87
|
xml.tag! 'RequestData' do
|
|
88
88
|
xml.tag! 'Vendor', @options[:login]
|
|
89
89
|
xml.tag! 'Partner', @options[:partner]
|
|
@@ -137,8 +137,9 @@ module ActiveMerchant #:nodoc:
|
|
|
137
137
|
|
|
138
138
|
xml.tag! 'Address' do
|
|
139
139
|
xml.tag! 'Street', address[:address1] unless address[:address1].blank?
|
|
140
|
+
xml.tag! 'Street2', address[:address2] unless address[:address2].blank?
|
|
140
141
|
xml.tag! 'City', address[:city] unless address[:city].blank?
|
|
141
|
-
xml.tag! 'State', address[:state].blank? ?
|
|
142
|
+
xml.tag! 'State', address[:state].blank? ? 'N/A' : address[:state]
|
|
142
143
|
xml.tag! 'Country', address[:country] unless address[:country].blank?
|
|
143
144
|
xml.tag! 'Zip', address[:zip] unless address[:zip].blank?
|
|
144
145
|
end
|
|
@@ -149,16 +150,16 @@ module ActiveMerchant #:nodoc:
|
|
|
149
150
|
response = {}
|
|
150
151
|
xml = Nokogiri::XML(data)
|
|
151
152
|
xml.remove_namespaces!
|
|
152
|
-
root = xml.xpath(
|
|
153
|
+
root = xml.xpath('//ResponseData')
|
|
153
154
|
|
|
154
155
|
# REXML::XPath in Ruby 1.8.6 is now unable to match nodes based on their attributes
|
|
155
|
-
tx_result = root.xpath(
|
|
156
|
+
tx_result = root.xpath('.//TransactionResult').first
|
|
156
157
|
|
|
157
|
-
if tx_result && tx_result.attributes['Duplicate'].to_s ==
|
|
158
|
+
if tx_result && tx_result.attributes['Duplicate'].to_s == 'true'
|
|
158
159
|
response[:duplicate] = true
|
|
159
160
|
end
|
|
160
161
|
|
|
161
|
-
root.xpath(
|
|
162
|
+
root.xpath('.//*').each do |node|
|
|
162
163
|
parse_element(response, node)
|
|
163
164
|
end
|
|
164
165
|
|
|
@@ -174,9 +175,9 @@ module ActiveMerchant #:nodoc:
|
|
|
174
175
|
# in an RPPaymentResults element so we'll come here multiple times
|
|
175
176
|
response[node_name] ||= []
|
|
176
177
|
response[node_name] << ( payment_result_response = {} )
|
|
177
|
-
node.xpath(
|
|
178
|
-
when node.xpath(
|
|
179
|
-
node.xpath(
|
|
178
|
+
node.xpath('.//*').each{ |e| parse_element(payment_result_response, e) }
|
|
179
|
+
when node.xpath('.//*').to_a.any?
|
|
180
|
+
node.xpath('.//*').each{|e| parse_element(response, e) }
|
|
180
181
|
when node_name.to_s =~ /amt$/
|
|
181
182
|
# *Amt elements don't put the value in the #text - instead they use a Currency attribute
|
|
182
183
|
response[node_name] = node.attributes['Currency'].to_s
|
|
@@ -189,15 +190,15 @@ module ActiveMerchant #:nodoc:
|
|
|
189
190
|
|
|
190
191
|
def build_headers(content_length)
|
|
191
192
|
headers = {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
193
|
+
'Content-Type' => 'text/xml',
|
|
194
|
+
'Content-Length' => content_length.to_s,
|
|
195
|
+
'X-VPS-Client-Timeout' => timeout.to_s,
|
|
196
|
+
'X-VPS-VIT-Integration-Product' => 'ActiveMerchant',
|
|
197
|
+
'X-VPS-VIT-Runtime-Version' => RUBY_VERSION,
|
|
198
|
+
'X-VPS-Request-ID' => SecureRandom.hex(16)
|
|
198
199
|
}
|
|
199
200
|
|
|
200
|
-
headers.merge!(
|
|
201
|
+
headers.merge!('PAYPAL-NVP' => 'Y') if self.use_paypal_nvp
|
|
201
202
|
headers
|
|
202
203
|
end
|
|
203
204
|
|
|
@@ -223,7 +224,7 @@ module ActiveMerchant #:nodoc:
|
|
|
223
224
|
end
|
|
224
225
|
|
|
225
226
|
def under_fraud_review?(response)
|
|
226
|
-
(response[:result] ==
|
|
227
|
+
(response[:result] == '126')
|
|
227
228
|
end
|
|
228
229
|
end
|
|
229
230
|
end
|
|
@@ -178,7 +178,7 @@ module ActiveMerchant #:nodoc:
|
|
|
178
178
|
end
|
|
179
179
|
if items.any?
|
|
180
180
|
xml.tag! 'ExtData', 'Name' => 'CURRENCY', 'Value' => options[:currency] || currency(money)
|
|
181
|
-
xml.tag! 'ExtData', 'Name' =>
|
|
181
|
+
xml.tag! 'ExtData', 'Name' => 'ITEMAMT', 'Value' => amount(options[:subtotal] || money)
|
|
182
182
|
end
|
|
183
183
|
xml.tag! 'DiscountAmt', amount(options[:discount]) if options[:discount]
|
|
184
184
|
xml.tag! 'TotalAmt', amount(money), 'Currency' => options[:currency] || currency(money)
|
|
@@ -192,7 +192,7 @@ module ActiveMerchant #:nodoc:
|
|
|
192
192
|
end
|
|
193
193
|
|
|
194
194
|
def add_paypal_details(xml, options)
|
|
195
|
-
|
|
195
|
+
xml.tag! 'PayPal' do
|
|
196
196
|
xml.tag! 'EMail', options[:email] unless options[:email].blank?
|
|
197
197
|
xml.tag! 'ReturnURL', options[:return_url] unless options[:return_url].blank?
|
|
198
198
|
xml.tag! 'CancelURL', options[:cancel_return_url] unless options[:cancel_return_url].blank?
|
|
@@ -21,7 +21,8 @@ module ActiveMerchant #:nodoc:
|
|
|
21
21
|
self.homepage_url = 'http://www.paymentexpress.com/'
|
|
22
22
|
self.display_name = 'PaymentExpress'
|
|
23
23
|
|
|
24
|
-
self.live_url =
|
|
24
|
+
self.live_url = 'https://sec.paymentexpress.com/pxpost.aspx'
|
|
25
|
+
self.test_url = 'https://uat.paymentexpress.com/pxpost.aspx'
|
|
25
26
|
|
|
26
27
|
APPROVED = '1'
|
|
27
28
|
|
|
@@ -176,66 +177,66 @@ module ActiveMerchant #:nodoc:
|
|
|
176
177
|
end
|
|
177
178
|
|
|
178
179
|
def add_credentials(xml)
|
|
179
|
-
xml.add_element(
|
|
180
|
-
xml.add_element(
|
|
180
|
+
xml.add_element('PostUsername').text = @options[:login]
|
|
181
|
+
xml.add_element('PostPassword').text = @options[:password]
|
|
181
182
|
end
|
|
182
183
|
|
|
183
184
|
def add_reference(xml, identification)
|
|
184
|
-
xml.add_element(
|
|
185
|
+
xml.add_element('DpsTxnRef').text = identification
|
|
185
186
|
end
|
|
186
187
|
|
|
187
188
|
def add_credit_card(xml, credit_card)
|
|
188
|
-
xml.add_element(
|
|
189
|
-
xml.add_element(
|
|
190
|
-
xml.add_element(
|
|
189
|
+
xml.add_element('CardHolderName').text = credit_card.name
|
|
190
|
+
xml.add_element('CardNumber').text = credit_card.number
|
|
191
|
+
xml.add_element('DateExpiry').text = format_date(credit_card.month, credit_card.year)
|
|
191
192
|
|
|
192
193
|
if credit_card.verification_value?
|
|
193
|
-
xml.add_element(
|
|
194
|
-
xml.add_element(
|
|
194
|
+
xml.add_element('Cvc2').text = credit_card.verification_value
|
|
195
|
+
xml.add_element('Cvc2Presence').text = '1'
|
|
195
196
|
end
|
|
196
197
|
|
|
197
198
|
if requires_start_date_or_issue_number?(credit_card)
|
|
198
|
-
xml.add_element(
|
|
199
|
-
xml.add_element(
|
|
199
|
+
xml.add_element('DateStart').text = format_date(credit_card.start_month, credit_card.start_year) unless credit_card.start_month.blank? || credit_card.start_year.blank?
|
|
200
|
+
xml.add_element('IssueNumber').text = credit_card.issue_number unless credit_card.issue_number.blank?
|
|
200
201
|
end
|
|
201
202
|
end
|
|
202
203
|
|
|
203
204
|
def add_billing_token(xml, token)
|
|
204
205
|
if use_custom_payment_token?
|
|
205
|
-
xml.add_element(
|
|
206
|
+
xml.add_element('BillingId').text = token
|
|
206
207
|
else
|
|
207
|
-
xml.add_element(
|
|
208
|
+
xml.add_element('DpsBillingId').text = token
|
|
208
209
|
end
|
|
209
210
|
end
|
|
210
211
|
|
|
211
212
|
def add_token_request(xml, options)
|
|
212
|
-
xml.add_element(
|
|
213
|
-
xml.add_element(
|
|
213
|
+
xml.add_element('BillingId').text = options[:billing_id] if options[:billing_id]
|
|
214
|
+
xml.add_element('EnableAddBillCard').text = 1
|
|
214
215
|
end
|
|
215
216
|
|
|
216
217
|
def add_amount(xml, money, options)
|
|
217
|
-
xml.add_element(
|
|
218
|
-
xml.add_element(
|
|
218
|
+
xml.add_element('Amount').text = amount(money)
|
|
219
|
+
xml.add_element('InputCurrency').text = options[:currency] || currency(money)
|
|
219
220
|
end
|
|
220
221
|
|
|
221
222
|
def add_transaction_type(xml, action)
|
|
222
|
-
xml.add_element(
|
|
223
|
+
xml.add_element('TxnType').text = TRANSACTIONS[action]
|
|
223
224
|
end
|
|
224
225
|
|
|
225
226
|
def add_invoice(xml, options)
|
|
226
|
-
xml.add_element(
|
|
227
|
-
xml.add_element(
|
|
227
|
+
xml.add_element('TxnId').text = options[:order_id].to_s.slice(0, 16) unless options[:order_id].blank?
|
|
228
|
+
xml.add_element('MerchantReference').text = options[:description].to_s.slice(0, 50) unless options[:description].blank?
|
|
228
229
|
end
|
|
229
230
|
|
|
230
231
|
def add_address_verification_data(xml, options)
|
|
231
232
|
address = options[:billing_address] || options[:address]
|
|
232
233
|
return if address.nil?
|
|
233
234
|
|
|
234
|
-
xml.add_element(
|
|
235
|
-
xml.add_element(
|
|
235
|
+
xml.add_element('EnableAvsData').text = 1
|
|
236
|
+
xml.add_element('AvsAction').text = 1
|
|
236
237
|
|
|
237
|
-
xml.add_element(
|
|
238
|
-
xml.add_element(
|
|
238
|
+
xml.add_element('AvsStreetAddress').text = address[:address1]
|
|
239
|
+
xml.add_element('AvsPostCode').text = address[:zip]
|
|
239
240
|
end
|
|
240
241
|
|
|
241
242
|
# The options hash may contain optional data which will be passed
|
|
@@ -276,16 +277,16 @@ module ActiveMerchant #:nodoc:
|
|
|
276
277
|
# +purchase+, +authorize+, +capture+, +refund+, +store+
|
|
277
278
|
def add_optional_elements(xml, options)
|
|
278
279
|
if client_type = normalized_client_type(options[:client_type])
|
|
279
|
-
xml.add_element(
|
|
280
|
+
xml.add_element('ClientType').text = client_type
|
|
280
281
|
end
|
|
281
282
|
|
|
282
|
-
xml.add_element(
|
|
283
|
-
xml.add_element(
|
|
284
|
-
xml.add_element(
|
|
283
|
+
xml.add_element('TxnData1').text = options[:txn_data1].to_s.slice(0,255) unless options[:txn_data1].blank?
|
|
284
|
+
xml.add_element('TxnData2').text = options[:txn_data2].to_s.slice(0,255) unless options[:txn_data2].blank?
|
|
285
|
+
xml.add_element('TxnData3').text = options[:txn_data3].to_s.slice(0,255) unless options[:txn_data3].blank?
|
|
285
286
|
end
|
|
286
287
|
|
|
287
288
|
def new_transaction
|
|
288
|
-
REXML::Document.new.add_element(
|
|
289
|
+
REXML::Document.new.add_element('Txn')
|
|
289
290
|
end
|
|
290
291
|
|
|
291
292
|
# Take in the request and post it to DPS
|
|
@@ -293,8 +294,10 @@ module ActiveMerchant #:nodoc:
|
|
|
293
294
|
add_credentials(request)
|
|
294
295
|
add_transaction_type(request, action)
|
|
295
296
|
|
|
297
|
+
url = test? ? self.test_url : self.live_url
|
|
298
|
+
|
|
296
299
|
# Parse the XML response
|
|
297
|
-
response = parse(
|
|
300
|
+
response = parse(ssl_post(url, request.to_s))
|
|
298
301
|
|
|
299
302
|
# Return a response
|
|
300
303
|
PaymentExpressResponse.new(response[:success] == APPROVED, message_from(response), response,
|
|
@@ -343,12 +346,12 @@ module ActiveMerchant #:nodoc:
|
|
|
343
346
|
|
|
344
347
|
def normalized_client_type(client_type_from_options)
|
|
345
348
|
case client_type_from_options.to_s.downcase
|
|
346
|
-
when 'web' then
|
|
347
|
-
when 'ivr' then
|
|
348
|
-
when 'moto' then
|
|
349
|
-
when 'unattended' then
|
|
350
|
-
when 'internet' then
|
|
351
|
-
when 'recurring' then
|
|
349
|
+
when 'web' then 'Web'
|
|
350
|
+
when 'ivr' then 'IVR'
|
|
351
|
+
when 'moto' then 'MOTO'
|
|
352
|
+
when 'unattended' then 'Unattended'
|
|
353
|
+
when 'internet' then 'Internet'
|
|
354
|
+
when 'recurring' then 'Recurring'
|
|
352
355
|
else nil
|
|
353
356
|
end
|
|
354
357
|
end
|
|
@@ -358,7 +361,7 @@ module ActiveMerchant #:nodoc:
|
|
|
358
361
|
# add a method to response so we can easily get the token
|
|
359
362
|
# for Validate transactions
|
|
360
363
|
def token
|
|
361
|
-
@params[
|
|
364
|
+
@params['billing_id'] || @params['dps_billing_id']
|
|
362
365
|
end
|
|
363
366
|
end
|
|
364
367
|
end
|
|
@@ -67,8 +67,11 @@ module ActiveMerchant #:nodoc:
|
|
|
67
67
|
commit_transaction('authorize', post)
|
|
68
68
|
end
|
|
69
69
|
|
|
70
|
-
def capture(
|
|
71
|
-
post = {
|
|
70
|
+
def capture(money, authorization, _options = {})
|
|
71
|
+
post = {
|
|
72
|
+
transaction: { id: authorization }
|
|
73
|
+
}
|
|
74
|
+
post[:order] = {amount: amount(money).to_f} if money
|
|
72
75
|
|
|
73
76
|
commit_transaction('capture', post)
|
|
74
77
|
end
|
|
@@ -171,7 +174,12 @@ module ActiveMerchant #:nodoc:
|
|
|
171
174
|
rescue ResponseError => e
|
|
172
175
|
raw_response = e.response.body
|
|
173
176
|
end
|
|
174
|
-
|
|
177
|
+
|
|
178
|
+
begin
|
|
179
|
+
parse(raw_response)
|
|
180
|
+
rescue JSON::ParserError
|
|
181
|
+
{'status' => 'Internal server error'}
|
|
182
|
+
end
|
|
175
183
|
end
|
|
176
184
|
|
|
177
185
|
def commit_transaction(action, parameters)
|
|
@@ -10,7 +10,7 @@ module ActiveMerchant #:nodoc:
|
|
|
10
10
|
self.display_name = 'PAYMILL'
|
|
11
11
|
self.money_format = :cents
|
|
12
12
|
self.default_currency = 'EUR'
|
|
13
|
-
self.live_url =
|
|
13
|
+
self.live_url = 'https://api.paymill.com/v2/'
|
|
14
14
|
|
|
15
15
|
def initialize(options = {})
|
|
16
16
|
requires!(options, :public_key, :private_key)
|
|
@@ -64,7 +64,7 @@ module ActiveMerchant #:nodoc:
|
|
|
64
64
|
|
|
65
65
|
def verify_credentials
|
|
66
66
|
begin
|
|
67
|
-
ssl_get(live_url +
|
|
67
|
+
ssl_get(live_url + 'transactions/nonexistent', headers)
|
|
68
68
|
rescue ResponseError => e
|
|
69
69
|
return false if e.response.code.to_i == 401
|
|
70
70
|
end
|
|
@@ -75,10 +75,10 @@ module ActiveMerchant #:nodoc:
|
|
|
75
75
|
private
|
|
76
76
|
|
|
77
77
|
def add_credit_card(post, credit_card, options)
|
|
78
|
-
post['account.holder'] = (credit_card.try(:name) ||
|
|
78
|
+
post['account.holder'] = (credit_card.try(:name) || '')
|
|
79
79
|
post['account.number'] = credit_card.number
|
|
80
|
-
post['account.expiry.month'] = sprintf(
|
|
81
|
-
post['account.expiry.year'] = sprintf(
|
|
80
|
+
post['account.expiry.month'] = sprintf('%.2i', credit_card.month)
|
|
81
|
+
post['account.expiry.year'] = sprintf('%.4i', credit_card.year)
|
|
82
82
|
post['account.verification'] = credit_card.verification_value
|
|
83
83
|
post['account.email'] = (options[:email] || nil)
|
|
84
84
|
post['presentation.amount3D'] = (options[:money] || nil)
|
|
@@ -122,7 +122,7 @@ module ActiveMerchant #:nodoc:
|
|
|
122
122
|
[
|
|
123
123
|
parsed_data['id'],
|
|
124
124
|
parsed_data['preauthorization'].try(:[], 'id')
|
|
125
|
-
].join(
|
|
125
|
+
].join(';')
|
|
126
126
|
end
|
|
127
127
|
|
|
128
128
|
def action_with_token(action, money, payment_method, options)
|
|
@@ -132,9 +132,9 @@ module ActiveMerchant #:nodoc:
|
|
|
132
132
|
self.send("#{action}_with_token", money, payment_method, options)
|
|
133
133
|
else
|
|
134
134
|
MultiResponse.run do |r|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
135
|
+
r.process { save_card(payment_method, options) }
|
|
136
|
+
r.process { self.send("#{action}_with_token", money, r.authorization, options) }
|
|
137
|
+
end
|
|
138
138
|
end
|
|
139
139
|
end
|
|
140
140
|
|
|
@@ -194,7 +194,7 @@ module ActiveMerchant #:nodoc:
|
|
|
194
194
|
return nil unless params
|
|
195
195
|
|
|
196
196
|
no_blanks = params.reject { |key, value| value.blank? }
|
|
197
|
-
no_blanks.map { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join(
|
|
197
|
+
no_blanks.map { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join('&')
|
|
198
198
|
end
|
|
199
199
|
|
|
200
200
|
def add_amount(post, money, options)
|
|
@@ -203,7 +203,7 @@ module ActiveMerchant #:nodoc:
|
|
|
203
203
|
end
|
|
204
204
|
|
|
205
205
|
def preauth(authorization)
|
|
206
|
-
authorization.split(
|
|
206
|
+
authorization.split(';').last
|
|
207
207
|
end
|
|
208
208
|
|
|
209
209
|
def transaction_id(authorization)
|
|
@@ -211,113 +211,113 @@ module ActiveMerchant #:nodoc:
|
|
|
211
211
|
end
|
|
212
212
|
|
|
213
213
|
RESPONSE_CODES = {
|
|
214
|
-
10001 =>
|
|
215
|
-
10002 =>
|
|
216
|
-
11000 =>
|
|
217
|
-
|
|
218
|
-
20000 =>
|
|
219
|
-
20100 =>
|
|
220
|
-
20101 =>
|
|
221
|
-
20200 =>
|
|
222
|
-
20201 =>
|
|
223
|
-
20202 =>
|
|
224
|
-
20203 =>
|
|
225
|
-
20204 =>
|
|
226
|
-
20300 =>
|
|
227
|
-
22000 =>
|
|
228
|
-
|
|
229
|
-
30000 =>
|
|
230
|
-
30100 =>
|
|
231
|
-
31000 =>
|
|
232
|
-
31100 =>
|
|
233
|
-
31101 =>
|
|
234
|
-
31102 =>
|
|
235
|
-
31103 =>
|
|
236
|
-
31104 =>
|
|
237
|
-
31200 =>
|
|
238
|
-
31201 =>
|
|
239
|
-
31202 =>
|
|
240
|
-
31203 =>
|
|
241
|
-
31204 =>
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
40000 =>
|
|
245
|
-
40001 =>
|
|
246
|
-
40002 =>
|
|
247
|
-
40100 =>
|
|
248
|
-
40101 =>
|
|
249
|
-
40102 =>
|
|
250
|
-
40103 =>
|
|
251
|
-
40104 =>
|
|
252
|
-
40105 =>
|
|
253
|
-
40106 =>
|
|
254
|
-
40200 =>
|
|
255
|
-
40201 =>
|
|
256
|
-
40202 =>
|
|
257
|
-
40300 =>
|
|
258
|
-
40301 =>
|
|
259
|
-
40400 =>
|
|
260
|
-
40401 =>
|
|
261
|
-
40402 =>
|
|
262
|
-
40403 =>
|
|
263
|
-
40410 =>
|
|
264
|
-
40420 =>
|
|
265
|
-
40500 =>
|
|
266
|
-
40510 =>
|
|
267
|
-
42000 =>
|
|
268
|
-
42410 =>
|
|
269
|
-
|
|
270
|
-
50000 =>
|
|
271
|
-
50001 =>
|
|
272
|
-
50002 =>
|
|
273
|
-
50004 =>
|
|
274
|
-
50005 =>
|
|
275
|
-
50100 =>
|
|
276
|
-
50101 =>
|
|
277
|
-
50102 =>
|
|
278
|
-
50103 =>
|
|
279
|
-
50104 =>
|
|
280
|
-
50105 =>
|
|
281
|
-
50200 =>
|
|
282
|
-
50201 =>
|
|
283
|
-
50300 =>
|
|
284
|
-
50400 =>
|
|
285
|
-
50401 =>
|
|
286
|
-
50402 =>
|
|
287
|
-
50403 =>
|
|
288
|
-
50404 =>
|
|
289
|
-
50405 =>
|
|
290
|
-
50406 =>
|
|
291
|
-
50407 =>
|
|
292
|
-
50408 =>
|
|
293
|
-
50409 =>
|
|
294
|
-
50410 =>
|
|
295
|
-
50420 =>
|
|
296
|
-
50430 =>
|
|
297
|
-
50440 =>
|
|
298
|
-
50450 =>
|
|
299
|
-
50500 =>
|
|
300
|
-
50501 =>
|
|
301
|
-
50502 =>
|
|
302
|
-
50600 =>
|
|
303
|
-
50700 =>
|
|
304
|
-
50710 =>
|
|
305
|
-
50711 =>
|
|
306
|
-
50712 =>
|
|
307
|
-
50713 =>
|
|
308
|
-
50714 =>
|
|
309
|
-
50720 =>
|
|
310
|
-
50730 =>
|
|
311
|
-
50800 =>
|
|
312
|
-
50810 =>
|
|
313
|
-
50820 =>
|
|
214
|
+
10001 => 'Undefined response',
|
|
215
|
+
10002 => 'Waiting for something',
|
|
216
|
+
11000 => 'Retry request at a later time',
|
|
217
|
+
|
|
218
|
+
20000 => 'Operation successful',
|
|
219
|
+
20100 => 'Funds held by acquirer',
|
|
220
|
+
20101 => 'Funds held by acquirer because merchant is new',
|
|
221
|
+
20200 => 'Transaction reversed',
|
|
222
|
+
20201 => 'Reversed due to chargeback',
|
|
223
|
+
20202 => 'Reversed due to money-back guarantee',
|
|
224
|
+
20203 => 'Reversed due to complaint by buyer',
|
|
225
|
+
20204 => 'Payment has been refunded',
|
|
226
|
+
20300 => 'Reversal has been canceled',
|
|
227
|
+
22000 => 'Initiation of transaction successful',
|
|
228
|
+
|
|
229
|
+
30000 => 'Transaction still in progress',
|
|
230
|
+
30100 => 'Transaction has been accepted',
|
|
231
|
+
31000 => 'Transaction pending',
|
|
232
|
+
31100 => 'Pending due to address',
|
|
233
|
+
31101 => 'Pending due to uncleared eCheck',
|
|
234
|
+
31102 => 'Pending due to risk review',
|
|
235
|
+
31103 => 'Pending due regulatory review',
|
|
236
|
+
31104 => 'Pending due to unregistered/unconfirmed receiver',
|
|
237
|
+
31200 => 'Pending due to unverified account',
|
|
238
|
+
31201 => 'Pending due to non-captured funds',
|
|
239
|
+
31202 => 'Pending due to international account (accept manually)',
|
|
240
|
+
31203 => 'Pending due to currency conflict (accept manually)',
|
|
241
|
+
31204 => 'Pending due to fraud filters (accept manually)',
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
40000 => 'Problem with transaction data',
|
|
245
|
+
40001 => 'Problem with payment data',
|
|
246
|
+
40002 => 'Invalid checksum',
|
|
247
|
+
40100 => 'Problem with credit card data',
|
|
248
|
+
40101 => 'Problem with CVV',
|
|
249
|
+
40102 => 'Card expired or not yet valid',
|
|
250
|
+
40103 => 'Card limit exceeded',
|
|
251
|
+
40104 => 'Card is not valid',
|
|
252
|
+
40105 => 'Expiry date not valid',
|
|
253
|
+
40106 => 'Credit card brand required',
|
|
254
|
+
40200 => 'Problem with bank account data',
|
|
255
|
+
40201 => 'Bank account data combination mismatch',
|
|
256
|
+
40202 => 'User authentication failed',
|
|
257
|
+
40300 => 'Problem with 3-D Secure data',
|
|
258
|
+
40301 => 'Currency/amount mismatch',
|
|
259
|
+
40400 => 'Problem with input data',
|
|
260
|
+
40401 => 'Amount too low or zero',
|
|
261
|
+
40402 => 'Usage field too long',
|
|
262
|
+
40403 => 'Currency not allowed',
|
|
263
|
+
40410 => 'Problem with shopping cart data',
|
|
264
|
+
40420 => 'Problem with address data',
|
|
265
|
+
40500 => 'Permission error with acquirer API',
|
|
266
|
+
40510 => 'Rate limit reached for acquirer API',
|
|
267
|
+
42000 => 'Initiation of transaction failed',
|
|
268
|
+
42410 => 'Initiation of transaction expired',
|
|
269
|
+
|
|
270
|
+
50000 => 'Problem with back end',
|
|
271
|
+
50001 => 'Country blacklisted',
|
|
272
|
+
50002 => 'IP address blacklisted',
|
|
273
|
+
50004 => 'Live mode not allowed',
|
|
274
|
+
50005 => 'Insufficient permissions (API key)',
|
|
275
|
+
50100 => 'Technical error with credit card',
|
|
276
|
+
50101 => 'Error limit exceeded',
|
|
277
|
+
50102 => 'Card declined',
|
|
278
|
+
50103 => 'Manipulation or stolen card',
|
|
279
|
+
50104 => 'Card restricted',
|
|
280
|
+
50105 => 'Invalid configuration data',
|
|
281
|
+
50200 => 'Technical error with bank account',
|
|
282
|
+
50201 => 'Account blacklisted',
|
|
283
|
+
50300 => 'Technical error with 3-D Secure',
|
|
284
|
+
50400 => 'Declined because of risk issues',
|
|
285
|
+
50401 => 'Checksum was wrong',
|
|
286
|
+
50402 => 'Bank account number was invalid (formal check)',
|
|
287
|
+
50403 => 'Technical error with risk check',
|
|
288
|
+
50404 => 'Unknown error with risk check',
|
|
289
|
+
50405 => 'Unknown bank code',
|
|
290
|
+
50406 => 'Open chargeback',
|
|
291
|
+
50407 => 'Historical chargeback',
|
|
292
|
+
50408 => 'Institution / public bank account (NCA)',
|
|
293
|
+
50409 => 'KUNO/Fraud',
|
|
294
|
+
50410 => 'Personal Account Protection (PAP)',
|
|
295
|
+
50420 => 'Rejected due to acquirer fraud settings',
|
|
296
|
+
50430 => 'Rejected due to acquirer risk settings',
|
|
297
|
+
50440 => 'Failed due to restrictions with acquirer account',
|
|
298
|
+
50450 => 'Failed due to restrictions with user account',
|
|
299
|
+
50500 => 'General timeout',
|
|
300
|
+
50501 => 'Timeout on side of the acquirer',
|
|
301
|
+
50502 => 'Risk management transaction timeout',
|
|
302
|
+
50600 => 'Duplicate operation',
|
|
303
|
+
50700 => 'Cancelled by user',
|
|
304
|
+
50710 => 'Failed due to funding source',
|
|
305
|
+
50711 => 'Payment method not usable, use other payment method',
|
|
306
|
+
50712 => 'Limit of funding source was exceeded',
|
|
307
|
+
50713 => 'Means of payment not reusable (canceled by user)',
|
|
308
|
+
50714 => 'Means of payment not reusable (expired)',
|
|
309
|
+
50720 => 'Rejected by acquirer',
|
|
310
|
+
50730 => 'Transaction denied by merchant',
|
|
311
|
+
50800 => 'Preauthorisation failed',
|
|
312
|
+
50810 => 'Authorisation has been voided',
|
|
313
|
+
50820 => 'Authorisation period expired'
|
|
314
314
|
}
|
|
315
315
|
|
|
316
316
|
def response_message(parsed_response)
|
|
317
|
-
return parsed_response[
|
|
318
|
-
return
|
|
317
|
+
return parsed_response['error'] if parsed_response['error']
|
|
318
|
+
return 'Transaction approved.' if (parsed_response['data'] == [])
|
|
319
319
|
|
|
320
|
-
code = parsed_response[
|
|
320
|
+
code = parsed_response['data']['response_code'].to_i
|
|
321
321
|
RESPONSE_CODES[code] || code.to_s
|
|
322
322
|
end
|
|
323
323
|
|
|
@@ -325,7 +325,7 @@ module ActiveMerchant #:nodoc:
|
|
|
325
325
|
class ResponseParser
|
|
326
326
|
attr_reader :raw_response, :parsed, :succeeded, :message, :options
|
|
327
327
|
|
|
328
|
-
def initialize(raw_response=
|
|
328
|
+
def initialize(raw_response='', options={})
|
|
329
329
|
@raw_response = raw_response
|
|
330
330
|
@options = options
|
|
331
331
|
end
|