aktivemerchant 2.0.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 +7 -0
- data/CHANGELOG +1596 -0
- data/CONTRIBUTORS +511 -0
- data/MIT-LICENSE +20 -0
- data/README.md +18 -0
- data/lib/active_merchant.rb +108 -0
- data/lib/active_merchant/billing.rb +13 -0
- data/lib/active_merchant/billing/apple_pay_payment_token.rb +22 -0
- data/lib/active_merchant/billing/avs_result.rb +98 -0
- data/lib/active_merchant/billing/base.rb +72 -0
- data/lib/active_merchant/billing/check.rb +76 -0
- data/lib/active_merchant/billing/compatibility.rb +120 -0
- data/lib/active_merchant/billing/credit_card.rb +352 -0
- data/lib/active_merchant/billing/credit_card_formatting.rb +24 -0
- data/lib/active_merchant/billing/credit_card_methods.rb +160 -0
- data/lib/active_merchant/billing/cvv_result.rb +38 -0
- data/lib/active_merchant/billing/gateway.rb +268 -0
- data/lib/active_merchant/billing/gateways.rb +17 -0
- data/lib/active_merchant/billing/gateways/adyen.rb +209 -0
- data/lib/active_merchant/billing/gateways/alfabank.rb +117 -0
- data/lib/active_merchant/billing/gateways/app55.rb +176 -0
- data/lib/active_merchant/billing/gateways/authorize_net.rb +419 -0
- data/lib/active_merchant/billing/gateways/authorize_net_arb.rb +417 -0
- data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +976 -0
- data/lib/active_merchant/billing/gateways/balanced.rb +256 -0
- data/lib/active_merchant/billing/gateways/bank_frick.rb +225 -0
- data/lib/active_merchant/billing/gateways/banwire.rb +105 -0
- data/lib/active_merchant/billing/gateways/barclays_epdq.rb +314 -0
- data/lib/active_merchant/billing/gateways/barclays_epdq_extra_plus.rb +15 -0
- data/lib/active_merchant/billing/gateways/be2bill.rb +131 -0
- data/lib/active_merchant/billing/gateways/beanstream.rb +188 -0
- data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +393 -0
- data/lib/active_merchant/billing/gateways/beanstream_interac.rb +54 -0
- data/lib/active_merchant/billing/gateways/blue_pay.rb +506 -0
- data/lib/active_merchant/billing/gateways/bogus.rb +140 -0
- data/lib/active_merchant/billing/gateways/borgun.rb +210 -0
- data/lib/active_merchant/billing/gateways/braintree.rb +19 -0
- data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +9 -0
- data/lib/active_merchant/billing/gateways/braintree_blue.rb +515 -0
- data/lib/active_merchant/billing/gateways/braintree_orange.rb +20 -0
- data/lib/active_merchant/billing/gateways/bridge_pay.rb +189 -0
- data/lib/active_merchant/billing/gateways/card_save.rb +23 -0
- data/lib/active_merchant/billing/gateways/card_stream.rb +220 -0
- data/lib/active_merchant/billing/gateways/cashnet.rb +191 -0
- data/lib/active_merchant/billing/gateways/cc5.rb +201 -0
- data/lib/active_merchant/billing/gateways/cecabank.rb +229 -0
- data/lib/active_merchant/billing/gateways/certo_direct.rb +278 -0
- data/lib/active_merchant/billing/gateways/checkout.rb +213 -0
- data/lib/active_merchant/billing/gateways/commercegate.rb +143 -0
- data/lib/active_merchant/billing/gateways/conekta.rb +209 -0
- data/lib/active_merchant/billing/gateways/cyber_source.rb +709 -0
- data/lib/active_merchant/billing/gateways/data_cash.rb +600 -0
- data/lib/active_merchant/billing/gateways/efsnet.rb +219 -0
- data/lib/active_merchant/billing/gateways/elavon.rb +348 -0
- data/lib/active_merchant/billing/gateways/epay.rb +275 -0
- data/lib/active_merchant/billing/gateways/evo_ca.rb +308 -0
- data/lib/active_merchant/billing/gateways/eway.rb +214 -0
- data/lib/active_merchant/billing/gateways/eway_managed.rb +291 -0
- data/lib/active_merchant/billing/gateways/eway_rapid.rb +524 -0
- data/lib/active_merchant/billing/gateways/exact.rb +218 -0
- data/lib/active_merchant/billing/gateways/fat_zebra.rb +173 -0
- data/lib/active_merchant/billing/gateways/federated_canada.rb +160 -0
- data/lib/active_merchant/billing/gateways/finansbank.rb +23 -0
- data/lib/active_merchant/billing/gateways/first_giving.rb +143 -0
- data/lib/active_merchant/billing/gateways/first_pay.rb +160 -0
- data/lib/active_merchant/billing/gateways/firstdata_e4.rb +355 -0
- data/lib/active_merchant/billing/gateways/garanti.rb +257 -0
- data/lib/active_merchant/billing/gateways/global_transport.rb +183 -0
- data/lib/active_merchant/billing/gateways/hdfc.rb +207 -0
- data/lib/active_merchant/billing/gateways/hps.rb +288 -0
- data/lib/active_merchant/billing/gateways/iats_payments.rb +251 -0
- data/lib/active_merchant/billing/gateways/ideal/ideal_base.rb +246 -0
- data/lib/active_merchant/billing/gateways/ideal/ideal_rabobank.pem +13 -0
- data/lib/active_merchant/billing/gateways/ideal/ideal_response.rb +29 -0
- data/lib/active_merchant/billing/gateways/ideal_rabobank.rb +66 -0
- data/lib/active_merchant/billing/gateways/inspire.rb +213 -0
- data/lib/active_merchant/billing/gateways/instapay.rb +163 -0
- data/lib/active_merchant/billing/gateways/iridium.rb +457 -0
- data/lib/active_merchant/billing/gateways/itransact.rb +448 -0
- data/lib/active_merchant/billing/gateways/jetpay.rb +275 -0
- data/lib/active_merchant/billing/gateways/linkpoint.rb +438 -0
- data/lib/active_merchant/billing/gateways/litle.rb +346 -0
- data/lib/active_merchant/billing/gateways/maxipago.rb +197 -0
- data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +170 -0
- data/lib/active_merchant/billing/gateways/merchant_one.rb +114 -0
- data/lib/active_merchant/billing/gateways/merchant_ware.rb +319 -0
- data/lib/active_merchant/billing/gateways/merchant_ware_version_four.rb +268 -0
- data/lib/active_merchant/billing/gateways/merchant_warrior.rb +195 -0
- data/lib/active_merchant/billing/gateways/mercury.rb +333 -0
- data/lib/active_merchant/billing/gateways/metrics_global.rb +303 -0
- data/lib/active_merchant/billing/gateways/migs.rb +265 -0
- data/lib/active_merchant/billing/gateways/migs/migs_codes.rb +100 -0
- data/lib/active_merchant/billing/gateways/modern_payments.rb +37 -0
- data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +219 -0
- data/lib/active_merchant/billing/gateways/moneris.rb +309 -0
- data/lib/active_merchant/billing/gateways/moneris_us.rb +291 -0
- data/lib/active_merchant/billing/gateways/money_movers.rb +152 -0
- data/lib/active_merchant/billing/gateways/nab_transact.rb +280 -0
- data/lib/active_merchant/billing/gateways/net_registry.rb +198 -0
- data/lib/active_merchant/billing/gateways/netaxept.rb +181 -0
- data/lib/active_merchant/billing/gateways/netbilling.rb +190 -0
- data/lib/active_merchant/billing/gateways/netpay.rb +223 -0
- data/lib/active_merchant/billing/gateways/network_merchants.rb +242 -0
- data/lib/active_merchant/billing/gateways/nmi.rb +256 -0
- data/lib/active_merchant/billing/gateways/ogone.rb +435 -0
- data/lib/active_merchant/billing/gateways/openpay.rb +194 -0
- data/lib/active_merchant/billing/gateways/optimal_payment.rb +313 -0
- data/lib/active_merchant/billing/gateways/orbital.rb +803 -0
- data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +47 -0
- data/lib/active_merchant/billing/gateways/pac_net_raven.rb +207 -0
- data/lib/active_merchant/billing/gateways/pago_facil.rb +122 -0
- data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +261 -0
- data/lib/active_merchant/billing/gateways/pay_junction.rb +390 -0
- data/lib/active_merchant/billing/gateways/pay_secure.rb +112 -0
- data/lib/active_merchant/billing/gateways/pay_u_latam.rb +462 -0
- data/lib/active_merchant/billing/gateways/paybox_direct.rb +188 -0
- data/lib/active_merchant/billing/gateways/payex.rb +412 -0
- data/lib/active_merchant/billing/gateways/payflow.rb +304 -0
- data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +209 -0
- data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +39 -0
- data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +13 -0
- data/lib/active_merchant/billing/gateways/payflow_express.rb +224 -0
- data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +15 -0
- data/lib/active_merchant/billing/gateways/payflow_uk.rb +21 -0
- data/lib/active_merchant/billing/gateways/payment_express.rb +353 -0
- data/lib/active_merchant/billing/gateways/paymill.rb +281 -0
- data/lib/active_merchant/billing/gateways/paypal.rb +117 -0
- data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +670 -0
- data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +65 -0
- data/lib/active_merchant/billing/gateways/paypal/paypal_recurring_api.rb +262 -0
- data/lib/active_merchant/billing/gateways/paypal_ca.rb +13 -0
- data/lib/active_merchant/billing/gateways/paypal_digital_goods.rb +44 -0
- data/lib/active_merchant/billing/gateways/paypal_express.rb +264 -0
- data/lib/active_merchant/billing/gateways/paypal_express_common.rb +30 -0
- data/lib/active_merchant/billing/gateways/payscout.rb +162 -0
- data/lib/active_merchant/billing/gateways/paystation.rb +199 -0
- data/lib/active_merchant/billing/gateways/payway.rb +207 -0
- data/lib/active_merchant/billing/gateways/pin.rb +197 -0
- data/lib/active_merchant/billing/gateways/plugnpay.rb +283 -0
- data/lib/active_merchant/billing/gateways/psigate.rb +216 -0
- data/lib/active_merchant/billing/gateways/psl_card.rb +303 -0
- data/lib/active_merchant/billing/gateways/qbms.rb +292 -0
- data/lib/active_merchant/billing/gateways/quantum.rb +276 -0
- data/lib/active_merchant/billing/gateways/quickpay.rb +367 -0
- data/lib/active_merchant/billing/gateways/realex.rb +298 -0
- data/lib/active_merchant/billing/gateways/redsys.rb +391 -0
- data/lib/active_merchant/billing/gateways/sage.rb +175 -0
- data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +87 -0
- data/lib/active_merchant/billing/gateways/sage/sage_core.rb +114 -0
- data/lib/active_merchant/billing/gateways/sage/sage_vault.rb +149 -0
- data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +102 -0
- data/lib/active_merchant/billing/gateways/sage_pay.rb +398 -0
- data/lib/active_merchant/billing/gateways/sallie_mae.rb +143 -0
- data/lib/active_merchant/billing/gateways/secure_net.rb +252 -0
- data/lib/active_merchant/billing/gateways/secure_pay.rb +201 -0
- data/lib/active_merchant/billing/gateways/secure_pay_au.rb +281 -0
- data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +105 -0
- data/lib/active_merchant/billing/gateways/skip_jack.rb +452 -0
- data/lib/active_merchant/billing/gateways/smart_ps.rb +283 -0
- data/lib/active_merchant/billing/gateways/so_easy_pay.rb +194 -0
- data/lib/active_merchant/billing/gateways/spreedly_core.rb +247 -0
- data/lib/active_merchant/billing/gateways/stripe.rb +411 -0
- data/lib/active_merchant/billing/gateways/swipe_checkout.rb +157 -0
- data/lib/active_merchant/billing/gateways/tns.rb +227 -0
- data/lib/active_merchant/billing/gateways/trans_first.rb +126 -0
- data/lib/active_merchant/billing/gateways/transax.rb +23 -0
- data/lib/active_merchant/billing/gateways/transnational.rb +10 -0
- data/lib/active_merchant/billing/gateways/trust_commerce.rb +416 -0
- data/lib/active_merchant/billing/gateways/usa_epay.rb +25 -0
- data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +1516 -0
- data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +254 -0
- data/lib/active_merchant/billing/gateways/verifi.rb +225 -0
- data/lib/active_merchant/billing/gateways/viaklix.rb +183 -0
- data/lib/active_merchant/billing/gateways/vindicia.rb +385 -0
- data/lib/active_merchant/billing/gateways/webpay.rb +97 -0
- data/lib/active_merchant/billing/gateways/wepay.rb +189 -0
- data/lib/active_merchant/billing/gateways/wirecard.rb +421 -0
- data/lib/active_merchant/billing/gateways/worldpay.rb +331 -0
- data/lib/active_merchant/billing/gateways/worldpay_us.rb +181 -0
- data/lib/active_merchant/billing/model.rb +30 -0
- data/lib/active_merchant/billing/payment_token.rb +21 -0
- data/lib/active_merchant/billing/rails.rb +3 -0
- data/lib/active_merchant/billing/response.rb +91 -0
- data/lib/active_merchant/country.rb +332 -0
- data/lib/active_merchant/empty.rb +20 -0
- data/lib/active_merchant/errors.rb +29 -0
- data/lib/active_merchant/offsite_payments_shim.rb +19 -0
- data/lib/active_merchant/version.rb +3 -0
- data/lib/activemerchant.rb +1 -0
- data/lib/support/gateway_support.rb +71 -0
- data/lib/support/outbound_hosts.rb +25 -0
- data/lib/support/ssl_verify.rb +93 -0
- metadata +400 -0
@@ -0,0 +1,524 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module ActiveMerchant #:nodoc:
|
4
|
+
module Billing #:nodoc:
|
5
|
+
class EwayRapidGateway < Gateway
|
6
|
+
self.test_url = "https://api.sandbox.ewaypayments.com/"
|
7
|
+
self.live_url = "https://api.ewaypayments.com/"
|
8
|
+
|
9
|
+
self.money_format = :cents
|
10
|
+
self.supported_countries = ['AU', 'NZ', 'GB']
|
11
|
+
self.supported_cardtypes = [:visa, :master, :american_express, :diners_club]
|
12
|
+
self.homepage_url = "http://www.eway.com.au/"
|
13
|
+
self.display_name = "eWAY Rapid 3.1"
|
14
|
+
self.default_currency = "AUD"
|
15
|
+
|
16
|
+
class_attribute :partner_id
|
17
|
+
|
18
|
+
def initialize(options = {})
|
19
|
+
requires!(options, :login, :password)
|
20
|
+
super
|
21
|
+
end
|
22
|
+
|
23
|
+
# Public: Run a purchase transaction.
|
24
|
+
#
|
25
|
+
# amount - The monetary amount of the transaction in cents.
|
26
|
+
# payment_method - The payment method or authorization token returned from store.
|
27
|
+
# options - A standard ActiveMerchant options hash:
|
28
|
+
# :transaction_type - One of: Purchase (default), MOTO
|
29
|
+
# or Recurring. For stored card payments (aka - TokenPayments),
|
30
|
+
# this must be either MOTO or Recurring.
|
31
|
+
# :order_id - A merchant-supplied identifier for the
|
32
|
+
# transaction (optional).
|
33
|
+
# :description - A merchant-supplied description of the
|
34
|
+
# transaction (optional).
|
35
|
+
# :currency - Three letter currency code for the
|
36
|
+
# transaction (default: "AUD")
|
37
|
+
# :billing_address - Standard ActiveMerchant address hash
|
38
|
+
# (optional).
|
39
|
+
# :shipping_address - Standard ActiveMerchant address hash
|
40
|
+
# (optional).
|
41
|
+
# :ip - The ip of the consumer initiating the
|
42
|
+
# transaction (optional).
|
43
|
+
# :application_id - A string identifying the application
|
44
|
+
# submitting the transaction
|
45
|
+
# (default: "https://github.com/Shopify/active_merchant")
|
46
|
+
#
|
47
|
+
# Returns an ActiveMerchant::Billing::Response object where authorization is the Transaction ID on success
|
48
|
+
def purchase(amount, payment_method, options={})
|
49
|
+
params = {}
|
50
|
+
add_metadata(params, options)
|
51
|
+
add_invoice(params, amount, options)
|
52
|
+
add_customer_data(params, options)
|
53
|
+
add_credit_card(params, payment_method, options)
|
54
|
+
params['Method'] = payment_method.respond_to?(:number) ? 'ProcessPayment' : 'TokenPayment'
|
55
|
+
commit(url_for('Transaction'), params)
|
56
|
+
end
|
57
|
+
|
58
|
+
def authorize(amount, payment_method, options={})
|
59
|
+
params = {}
|
60
|
+
add_metadata(params, options)
|
61
|
+
add_invoice(params, amount, options)
|
62
|
+
add_customer_data(params, options)
|
63
|
+
add_credit_card(params, payment_method, options)
|
64
|
+
params['Method'] = 'Authorise'
|
65
|
+
commit(url_for('Authorisation'), params)
|
66
|
+
end
|
67
|
+
|
68
|
+
def capture(amount, identification, options = {})
|
69
|
+
params = {}
|
70
|
+
add_metadata(params, options)
|
71
|
+
add_invoice(params, amount, options)
|
72
|
+
add_reference(params, identification)
|
73
|
+
commit(url_for("CapturePayment"), params)
|
74
|
+
end
|
75
|
+
|
76
|
+
def void(identification, options = {})
|
77
|
+
params = {}
|
78
|
+
add_reference(params, identification)
|
79
|
+
commit(url_for("CancelAuthorisation"), params)
|
80
|
+
end
|
81
|
+
|
82
|
+
# Public: Refund a transaction.
|
83
|
+
#
|
84
|
+
# amount - The monetary amount of the transaction in cents
|
85
|
+
# identification - The transaction id which is returned in the
|
86
|
+
# authorization of the successful purchase transaction
|
87
|
+
# options - A standard ActiveMerchant options hash:
|
88
|
+
# :order_id - A merchant-supplied identifier for the
|
89
|
+
# transaction (optional).
|
90
|
+
# :description - A merchant-supplied description of the
|
91
|
+
# transaction (optional).
|
92
|
+
# :currency - Three letter currency code for the
|
93
|
+
# transaction (default: "AUD")
|
94
|
+
# :billing_address - Standard ActiveMerchant address hash
|
95
|
+
# (optional).
|
96
|
+
# :shipping_address - Standard ActiveMerchant address hash
|
97
|
+
# (optional).
|
98
|
+
# :ip - The ip of the consumer initiating the
|
99
|
+
# transaction (optional).
|
100
|
+
# :application_id - A string identifying the application
|
101
|
+
# submitting the transaction
|
102
|
+
# (default: "https://github.com/Shopify/active_merchant")
|
103
|
+
#
|
104
|
+
# Returns an ActiveMerchant::Billing::Response object
|
105
|
+
def refund(amount, identification, options = {})
|
106
|
+
params = {}
|
107
|
+
add_metadata(params, options)
|
108
|
+
add_invoice(params, amount, options, "Refund")
|
109
|
+
add_reference(params["Refund"], identification)
|
110
|
+
add_customer_data(params, options)
|
111
|
+
commit(url_for("Transaction/#{identification}/Refund"), params)
|
112
|
+
end
|
113
|
+
|
114
|
+
# Public: Store card details and return a valid token
|
115
|
+
#
|
116
|
+
# payment_method - The payment method or nil if :customer_token is provided
|
117
|
+
# options - A supplemented ActiveMerchant options hash:
|
118
|
+
# :order_id - A merchant-supplied identifier for the
|
119
|
+
# transaction (optional).
|
120
|
+
# :description - A merchant-supplied description of the
|
121
|
+
# transaction (optional).
|
122
|
+
# :billing_address - Standard ActiveMerchant address hash
|
123
|
+
# (required).
|
124
|
+
# :ip - The ip of the consumer initiating the
|
125
|
+
# transaction (optional).
|
126
|
+
# :application_id - A string identifying the application
|
127
|
+
# submitting the transaction
|
128
|
+
# (default: "https://github.com/Shopify/active_merchant")
|
129
|
+
#
|
130
|
+
# Returns an ActiveMerchant::Billing::Response object where the authorization is the customer_token on success
|
131
|
+
def store(payment_method, options = {})
|
132
|
+
requires!(options, :billing_address)
|
133
|
+
params = {}
|
134
|
+
add_metadata(params, options)
|
135
|
+
add_invoice(params, 0, options)
|
136
|
+
add_customer_data(params, options)
|
137
|
+
add_credit_card(params, payment_method, options)
|
138
|
+
params['Method'] = 'CreateTokenCustomer'
|
139
|
+
commit(url_for("Transaction"), params)
|
140
|
+
end
|
141
|
+
|
142
|
+
# Public: Update a customer's data
|
143
|
+
#
|
144
|
+
# customer_token - The customer token returned in the authorization of
|
145
|
+
# a successful store transaction.
|
146
|
+
# payment_method - The payment method or nil if :customer_token is provided
|
147
|
+
# options - A supplemented ActiveMerchant options hash:
|
148
|
+
# :order_id - A merchant-supplied identifier for the
|
149
|
+
# transaction (optional).
|
150
|
+
# :description - A merchant-supplied description of the
|
151
|
+
# transaction (optional).
|
152
|
+
# :billing_address - Standard ActiveMerchant address hash
|
153
|
+
# (optional).
|
154
|
+
# :ip - The ip of the consumer initiating the
|
155
|
+
# transaction (optional).
|
156
|
+
# :application_id - A string identifying the application
|
157
|
+
# submitting the transaction
|
158
|
+
# (default: "https://github.com/Shopify/active_merchant")
|
159
|
+
#
|
160
|
+
# Returns an ActiveMerchant::Billing::Response object where the authorization is the customer_token on success
|
161
|
+
def update(customer_token, payment_method, options = {})
|
162
|
+
params = {}
|
163
|
+
add_metadata(params, options)
|
164
|
+
add_invoice(params, 0, options)
|
165
|
+
add_customer_data(params, options)
|
166
|
+
add_credit_card(params, payment_method, options)
|
167
|
+
add_customer_token(params, customer_token)
|
168
|
+
params['Method'] = 'UpdateTokenCustomer'
|
169
|
+
commit(url_for("Transaction"), params)
|
170
|
+
end
|
171
|
+
|
172
|
+
private
|
173
|
+
|
174
|
+
def add_metadata(params, options)
|
175
|
+
params['RedirectUrl'] = options[:redirect_url] || 'http://example.com'
|
176
|
+
params['CustomerIP'] = options[:ip] if options[:ip]
|
177
|
+
params['TransactionType'] = options[:transaction_type] || 'Purchase'
|
178
|
+
params['DeviceID'] = options[:application_id] || application_id
|
179
|
+
if partner = options[:partner_id] || partner_id
|
180
|
+
params['PartnerID'] = truncate(partner, 50)
|
181
|
+
end
|
182
|
+
params
|
183
|
+
end
|
184
|
+
|
185
|
+
def add_invoice(params, money, options, key = "Payment")
|
186
|
+
currency_code = options[:currency] || currency(money)
|
187
|
+
params[key] = {
|
188
|
+
'TotalAmount' => localized_amount(money, currency_code),
|
189
|
+
'InvoiceReference' => truncate(options[:order_id]),
|
190
|
+
'InvoiceDescription' => truncate(options[:description], 64),
|
191
|
+
'CurrencyCode' => currency_code,
|
192
|
+
}
|
193
|
+
end
|
194
|
+
|
195
|
+
def add_reference(params, reference)
|
196
|
+
params['TransactionID'] = reference
|
197
|
+
end
|
198
|
+
|
199
|
+
def add_customer_data(params, options)
|
200
|
+
params['Customer'] ||= {}
|
201
|
+
add_address(params['Customer'], (options[:billing_address] || options[:address]), {:email => options[:email]})
|
202
|
+
params['ShippingAddress'] = {}
|
203
|
+
add_address(params['ShippingAddress'], options[:shipping_address], {:skip_company => true})
|
204
|
+
end
|
205
|
+
|
206
|
+
def add_address(params, address, options={})
|
207
|
+
return unless address
|
208
|
+
|
209
|
+
if address[:name]
|
210
|
+
parts = address[:name].split(/\s+/)
|
211
|
+
params['FirstName'] = parts.shift if parts.size > 1
|
212
|
+
params['LastName'] = parts.join(" ")
|
213
|
+
end
|
214
|
+
params['Title'] = address[:title]
|
215
|
+
params['CompanyName'] = address[:company] unless options[:skip_company]
|
216
|
+
params['Street1'] = truncate(address[:address1])
|
217
|
+
params['Street2'] = truncate(address[:address2])
|
218
|
+
params['City'] = truncate(address[:city])
|
219
|
+
params['State'] = address[:state]
|
220
|
+
params['PostalCode'] = address[:zip]
|
221
|
+
params['Country'] = address[:country].to_s.downcase
|
222
|
+
params['Phone'] = address[:phone]
|
223
|
+
params['Fax'] = address[:fax]
|
224
|
+
params['Email'] = options[:email]
|
225
|
+
end
|
226
|
+
|
227
|
+
def add_credit_card(params, credit_card, options)
|
228
|
+
return unless credit_card
|
229
|
+
params['Customer'] ||= {}
|
230
|
+
if credit_card.respond_to? :number
|
231
|
+
card_details = params['Customer']['CardDetails'] = {}
|
232
|
+
card_details['Name'] = truncate(credit_card.name)
|
233
|
+
card_details['Number'] = credit_card.number
|
234
|
+
card_details['ExpiryMonth'] = "%02d" % (credit_card.month || 0)
|
235
|
+
card_details['ExpiryYear'] = "%02d" % (credit_card.year || 0)
|
236
|
+
card_details['CVN'] = credit_card.verification_value
|
237
|
+
else
|
238
|
+
add_customer_token(params, credit_card)
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
def add_customer_token(params, token)
|
243
|
+
params['Customer'] ||= {}
|
244
|
+
params['Customer']['TokenCustomerID'] = token
|
245
|
+
end
|
246
|
+
|
247
|
+
def url_for(action)
|
248
|
+
(test? ? test_url : live_url) + action
|
249
|
+
end
|
250
|
+
|
251
|
+
def commit(url, params)
|
252
|
+
headers = {
|
253
|
+
"Authorization" => ("Basic " + Base64.strict_encode64(@options[:login].to_s + ":" + @options[:password].to_s).chomp),
|
254
|
+
"Content-Type" => "application/json"
|
255
|
+
}
|
256
|
+
request = params.to_json
|
257
|
+
raw = parse(ssl_post(url, request, headers))
|
258
|
+
|
259
|
+
succeeded = success?(raw)
|
260
|
+
ActiveMerchant::Billing::Response.new(
|
261
|
+
succeeded,
|
262
|
+
message_from(succeeded, raw),
|
263
|
+
raw,
|
264
|
+
:authorization => authorization_from(raw),
|
265
|
+
:test => test?,
|
266
|
+
:avs_result => avs_result_from(raw),
|
267
|
+
:cvv_result => cvv_result_from(raw)
|
268
|
+
)
|
269
|
+
rescue ActiveMerchant::ResponseError => e
|
270
|
+
return ActiveMerchant::Billing::Response.new(false, e.response.message, {:status_code => e.response.code}, :test => test?)
|
271
|
+
end
|
272
|
+
|
273
|
+
def parse(data)
|
274
|
+
JSON.parse(data)
|
275
|
+
end
|
276
|
+
|
277
|
+
def success?(response)
|
278
|
+
if response['ResponseCode'] == "00"
|
279
|
+
true
|
280
|
+
elsif response['TransactionStatus']
|
281
|
+
(response['TransactionStatus'] == true)
|
282
|
+
elsif response["Succeeded"]
|
283
|
+
(response["Succeeded"] == true)
|
284
|
+
else
|
285
|
+
false
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
def parse_errors(message)
|
290
|
+
errors = message.split(',').collect{|code| MESSAGES[code.strip]}.flatten.join(',')
|
291
|
+
errors.presence || message
|
292
|
+
end
|
293
|
+
|
294
|
+
def message_from(succeeded, response)
|
295
|
+
if response['Errors']
|
296
|
+
parse_errors(response['Errors'])
|
297
|
+
elsif response['ResponseMessage']
|
298
|
+
parse_errors(response['ResponseMessage'])
|
299
|
+
elsif response['ResponseCode']
|
300
|
+
ActiveMerchant::Billing::EwayGateway::MESSAGES[response['ResponseCode']]
|
301
|
+
elsif succeeded
|
302
|
+
"Succeeded"
|
303
|
+
else
|
304
|
+
"Failed"
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
def authorization_from(response)
|
309
|
+
# Note: TransactionID is always null for store requests, but TokenCustomerID is also sent back for purchase from
|
310
|
+
# stored card transactions so we give precendence to TransactionID
|
311
|
+
response['TransactionID'] || response['Customer']['TokenCustomerID']
|
312
|
+
end
|
313
|
+
|
314
|
+
def avs_result_from(response)
|
315
|
+
verification = response['Verification'] || {}
|
316
|
+
code = case verification['Address']
|
317
|
+
when "Valid"
|
318
|
+
"M"
|
319
|
+
when "Invalid"
|
320
|
+
"N"
|
321
|
+
else
|
322
|
+
"I"
|
323
|
+
end
|
324
|
+
{:code => code}
|
325
|
+
end
|
326
|
+
|
327
|
+
def cvv_result_from(response)
|
328
|
+
verification = response['Verification'] || {}
|
329
|
+
case verification['CVN']
|
330
|
+
when "Valid"
|
331
|
+
"M"
|
332
|
+
when "Invalid"
|
333
|
+
"N"
|
334
|
+
else
|
335
|
+
"P"
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
339
|
+
def truncate(value, max_size = 50)
|
340
|
+
return nil unless value
|
341
|
+
value.to_s[0, max_size]
|
342
|
+
end
|
343
|
+
|
344
|
+
MESSAGES = {
|
345
|
+
'A2000' => 'Transaction Approved Successful',
|
346
|
+
'A2008' => 'Honour With Identification Successful',
|
347
|
+
'A2010' => 'Approved For Partial Amount Successful',
|
348
|
+
'A2011' => 'Approved, VIP Successful',
|
349
|
+
'A2016' => 'Approved, Update Track 3 Successful',
|
350
|
+
'D4401' => 'Refer to Issuer Failed',
|
351
|
+
'D4402' => 'Refer to Issuer, special Failed',
|
352
|
+
'D4403' => 'No Merchant Failed',
|
353
|
+
'D4404' => 'Pick Up Card Failed',
|
354
|
+
'D4405' => 'Do Not Honour Failed',
|
355
|
+
'D4406' => 'Error Failed',
|
356
|
+
'D4407' => 'Pick Up Card, Special Failed',
|
357
|
+
'D4409' => 'Request In Progress Failed',
|
358
|
+
'D4412' => 'Invalid Transaction Failed',
|
359
|
+
'D4413' => 'Invalid Amount Failed',
|
360
|
+
'D4414' => 'Invalid Card Number Failed',
|
361
|
+
'D4415' => 'No Issuer Failed',
|
362
|
+
'D4419' => 'Re-enter Last Transaction Failed',
|
363
|
+
'D4421' => 'No Action Taken Failed',
|
364
|
+
'D4422' => 'Suspected Malfunction Failed',
|
365
|
+
'D4423' => 'Unacceptable Transaction Fee Failed',
|
366
|
+
'D4425' => 'Unable to Locate Record On File Failed',
|
367
|
+
'D4430' => 'Format Error Failed ',
|
368
|
+
'D4431' => 'Bank Not Supported By Switch Failed',
|
369
|
+
'D4433' => 'Expired Card, Capture Failed ',
|
370
|
+
'D4434' => 'Suspected Fraud, Retain Card Failed',
|
371
|
+
'D4435' => 'Card Acceptor, Contact Acquirer, Retain Card Failed',
|
372
|
+
'D4436' => 'Restricted Card, Retain Card Failed',
|
373
|
+
'D4437' => 'Contact Acquirer Security Department, Retain Card Failed',
|
374
|
+
'D4438' => 'PIN Tries Exceeded, Capture Failed',
|
375
|
+
'D4439' => 'No Credit Account Failed',
|
376
|
+
'D4440' => 'Function Not Supported Failed',
|
377
|
+
'D4441' => 'Lost Card Failed',
|
378
|
+
'D4442' => 'No Universal Account Failed',
|
379
|
+
'D4443' => 'Stolen Card Failed',
|
380
|
+
'D4444' => 'No Investment Account Failed',
|
381
|
+
'D4451' => 'Insufficient Funds Failed',
|
382
|
+
'D4452' => 'No Cheque Account Failed',
|
383
|
+
'D4453' => 'No Savings Account Failed',
|
384
|
+
'D4454' => 'Expired Card Failed',
|
385
|
+
'D4455' => 'Incorrect PIN Failed',
|
386
|
+
'D4456' => 'No Card Record Failed',
|
387
|
+
'D4457' => 'Function Not Permitted to Cardholder Failed',
|
388
|
+
'D4458' => 'Function Not Permitted to Terminal Failed',
|
389
|
+
'D4459' => 'Suspected Fraud Failed',
|
390
|
+
'D4460' => 'Acceptor Contact Acquirer Failed',
|
391
|
+
'D4461' => 'Exceeds Withdrawal Limit Failed',
|
392
|
+
'D4462' => 'Restricted Card Failed',
|
393
|
+
'D4463' => 'Security Violation Failed',
|
394
|
+
'D4464' => 'Original Amount Incorrect Failed',
|
395
|
+
'D4466' => 'Acceptor Contact Acquirer, Security Failed',
|
396
|
+
'D4467' => 'Capture Card Failed',
|
397
|
+
'D4475' => 'PIN Tries Exceeded Failed',
|
398
|
+
'D4482' => 'CVV Validation Error Failed',
|
399
|
+
'D4490' => 'Cut off In Progress Failed',
|
400
|
+
'D4491' => 'Card Issuer Unavailable Failed',
|
401
|
+
'D4492' => 'Unable To Route Transaction Failed',
|
402
|
+
'D4493' => 'Cannot Complete, Violation Of The Law Failed',
|
403
|
+
'D4494' => 'Duplicate Transaction Failed',
|
404
|
+
'D4496' => 'System Error Failed',
|
405
|
+
'D4497' => 'MasterPass Error Failed',
|
406
|
+
'D4498' => 'PayPal Create Transaction Error Failed',
|
407
|
+
'D4499' => 'Invalid Transaction for Auth/Void Failed',
|
408
|
+
'S5000' => 'System Error',
|
409
|
+
'S5085' => 'Started 3dSecure',
|
410
|
+
'S5086' => 'Routed 3dSecure',
|
411
|
+
'S5087' => 'Completed 3dSecure',
|
412
|
+
'S5088' => 'PayPal Transaction Created',
|
413
|
+
'S5099' => 'Incomplete (Access Code in progress/incomplete)',
|
414
|
+
'S5010' => 'Unknown error returned by gateway',
|
415
|
+
'V6000' => 'Validation error',
|
416
|
+
'V6001' => 'Invalid CustomerIP',
|
417
|
+
'V6002' => 'Invalid DeviceID',
|
418
|
+
'V6003' => 'Invalid Request PartnerID',
|
419
|
+
'V6004' => 'Invalid Request Method',
|
420
|
+
'V6010' => 'Invalid TransactionType, account not certified for eCome only MOTO or Recurring available',
|
421
|
+
'V6011' => 'Invalid Payment TotalAmount',
|
422
|
+
'V6012' => 'Invalid Payment InvoiceDescription',
|
423
|
+
'V6013' => 'Invalid Payment InvoiceNumber',
|
424
|
+
'V6014' => 'Invalid Payment InvoiceReference',
|
425
|
+
'V6015' => 'Invalid Payment CurrencyCode',
|
426
|
+
'V6016' => 'Payment Required',
|
427
|
+
'V6017' => 'Payment CurrencyCode Required',
|
428
|
+
'V6018' => 'Unknown Payment CurrencyCode',
|
429
|
+
'V6021' => 'EWAY_CARDHOLDERNAME Required',
|
430
|
+
'V6022' => 'EWAY_CARDNUMBER Required',
|
431
|
+
'V6023' => 'EWAY_CARDCVN Required',
|
432
|
+
'V6033' => 'Invalid Expiry Date',
|
433
|
+
'V6034' => 'Invalid Issue Number',
|
434
|
+
'V6035' => 'Invalid Valid From Date',
|
435
|
+
'V6040' => 'Invalid TokenCustomerID',
|
436
|
+
'V6041' => 'Customer Required',
|
437
|
+
'V6042' => 'Customer FirstName Required',
|
438
|
+
'V6043' => 'Customer LastName Required',
|
439
|
+
'V6044' => 'Customer CountryCode Required',
|
440
|
+
'V6045' => 'Customer Title Required ',
|
441
|
+
'V6046' => 'TokenCustomerID Required',
|
442
|
+
'V6047' => 'RedirectURL Required',
|
443
|
+
'V6048' => 'Invalid Checkout URL',
|
444
|
+
'V6051' => 'Invalid Customer FirstName',
|
445
|
+
'V6052' => 'Invalid Customer LastName',
|
446
|
+
'V6053' => 'Invalid Customer CountryCode',
|
447
|
+
'V6058' => 'Invalid Customer Title ',
|
448
|
+
'V6059' => 'Invalid RedirectURL',
|
449
|
+
'V6060' => 'Invalid TokenCustomerID',
|
450
|
+
'V6061' => 'Invalid Customer Reference',
|
451
|
+
'V6062' => 'Invalid Customer CompanyName',
|
452
|
+
'V6063' => 'Invalid Customer JobDescription',
|
453
|
+
'V6064' => 'Invalid Customer Street1',
|
454
|
+
'V6065' => 'Invalid Customer Street2',
|
455
|
+
'V6066' => 'Invalid Customer City',
|
456
|
+
'V6067' => 'Invalid Customer State',
|
457
|
+
'V6068' => 'Invalid Customer PostalCode',
|
458
|
+
'V6069' => 'Invalid Customer Email ',
|
459
|
+
'V6070' => 'Invalid Customer Phone',
|
460
|
+
'V6071' => 'Invalid Customer Mobile',
|
461
|
+
'V6072' => 'Invalid Customer Comments',
|
462
|
+
'V6073' => 'Invalid Customer Fax',
|
463
|
+
'V6074' => 'Invalid Customer URL',
|
464
|
+
'V6075' => 'Invalid ShippingAddress FirstName',
|
465
|
+
'V6076' => 'Invalid ShippingAddress LastName',
|
466
|
+
'V6077' => 'Invalid ShippingAddress Street1',
|
467
|
+
'V6078' => 'Invalid ShippingAddress Street2',
|
468
|
+
'V6079' => 'Invalid ShippingAddress City',
|
469
|
+
'V6080' => 'Invalid ShippingAddress State',
|
470
|
+
'V6081' => 'Invalid ShippingAddress PostalCode',
|
471
|
+
'V6082' => 'Invalid ShippingAddress Email',
|
472
|
+
'V6083' => 'Invalid ShippingAddress Phone',
|
473
|
+
'V6084' => 'Invalid ShippingAddress Country',
|
474
|
+
'V6085' => 'Invalid ShippingAddress ShippingMethod',
|
475
|
+
'V6086' => 'Invalid ShippingAddress Fax',
|
476
|
+
'V6091' => 'Unknown Customer CountryCode',
|
477
|
+
'V6092' => 'Unknown ShippingAddress CountryCode',
|
478
|
+
'V6100' => 'Invalid EWAY_CARDNAME',
|
479
|
+
'V6101' => 'Invalid EWAY_CARDEXPIRYMONTH',
|
480
|
+
'V6102' => 'Invalid EWAY_CARDEXPIRYYEAR ',
|
481
|
+
'V6103' => 'Invalid EWAY_CARDSTARTMONTH',
|
482
|
+
'V6104' => 'Invalid EWAY_CARDSTARTYEAR',
|
483
|
+
'V6105' => 'Invalid EWAY_CARDISSUENUMBER ',
|
484
|
+
'V6106' => 'Invalid EWAY_CARDCVN',
|
485
|
+
'V6107' => 'Invalid EWAY_ACCESSCODE',
|
486
|
+
'V6108' => 'Invalid CustomerHostAddress',
|
487
|
+
'V6109' => 'Invalid UserAgent',
|
488
|
+
'V6110' => 'Invalid EWAY_CARDNUMBER',
|
489
|
+
'V6111' => 'Unauthorised API Access, Account Not PCI Certified',
|
490
|
+
'V6112' => 'Redundant card details other than expiry year and month',
|
491
|
+
'V6113' => 'Invalid transaction for refund',
|
492
|
+
'V6114' => 'Gateway validation error',
|
493
|
+
'V6115' => 'Invalid DirectRefundRequest, Transaction ID',
|
494
|
+
'V6116' => 'Invalid card data on original TransactionID',
|
495
|
+
'V6117' => 'Invalid CreateAccessCodeSharedRequest, FooterText',
|
496
|
+
'V6118' => 'Invalid CreateAccessCodeSharedRequest, HeaderText',
|
497
|
+
'V6119' => 'Invalid CreateAccessCodeSharedRequest, Language',
|
498
|
+
'V6120' => 'Invalid CreateAccessCodeSharedRequest, LogoUrl ',
|
499
|
+
'V6121' => 'Invalid TransactionSearch, Filter Match Type',
|
500
|
+
'V6122' => 'Invalid TransactionSearch, Non numeric Transaction ID',
|
501
|
+
'V6123' => 'Invalid TransactionSearch,no TransactionID or AccessCode specified',
|
502
|
+
'V6124' => 'Invalid Line Items. The line items have been provided however the totals do not match the TotalAmount field',
|
503
|
+
'V6125' => 'Selected Payment Type not enabled',
|
504
|
+
'V6126' => 'Invalid encrypted card number, decryption failed',
|
505
|
+
'V6127' => 'Invalid encrypted cvn, decryption failed',
|
506
|
+
'V6128' => 'Invalid Method for Payment Type',
|
507
|
+
'V6129' => 'Transaction has not been authorised for Capture/Cancellation',
|
508
|
+
'V6130' => 'Generic customer information error ',
|
509
|
+
'V6131' => 'Generic shipping information error',
|
510
|
+
'V6132' => 'Transaction has already been completed or voided, operation not permitted',
|
511
|
+
'V6133' => 'Checkout not available for Payment Type',
|
512
|
+
'V6134' => 'Invalid Auth Transaction ID for Capture/Void',
|
513
|
+
'V6135' => 'PayPal Error Processing Refund',
|
514
|
+
'V6140' => 'Merchant account is suspended',
|
515
|
+
'V6141' => 'Invalid PayPal account details or API signature',
|
516
|
+
'V6142' => 'Authorise not available for Bank/Branch',
|
517
|
+
'V6150' => 'Invalid Refund Amount',
|
518
|
+
'V6151' => 'Refund amount greater than original transaction',
|
519
|
+
'V6152' => 'Original transaction already refunded for total amount',
|
520
|
+
'V6153' => 'Card type not support by merchant',
|
521
|
+
}
|
522
|
+
end
|
523
|
+
end
|
524
|
+
end
|