Class: ActiveMerchant::Billing::EvoCaGateway

Inherits:
Gateway
  • Object
show all
Defined in:
lib/active_merchant/billing/gateways/evo_ca.rb

Overview

EVO Canada payment gateway.

EVO returns two different identifiers for most transactions, the authcode and the transactionid. Since transactionid is used more often (i.e. for #capture, #refund, #void and #update) we store it in the Response#authorization attribute. The authcode from the merchant account is accessible via Response#params.

Two different but related response messages are also returned from EVO. The message indicated by EVO's response_code parameter is returned as Response#message (Those messages can be seen in the MESSAGES hash.) The other, shorter message is available via Response#params.

It's recommended to save the contents of the Response#params in your transaction log for future reference.

Sample Use

gateway = ActiveMerchant::Billing::EvoCaGateway.new(username: 'demo', password: 'password')

response = gateway.authorize(1000, credit_card, options)

puts response.authorization          # the transactionid
puts response.params['authcode']     # the authcode from the merchant account
puts response.message                # the 'pretty' response message
puts response.params['responsetext'] # the 'terse' response message

gateway.capture(1000, response.authorization)
gateway.update(response.authorization, shipping_carrier: 'fedex')
gateway.refund(500, response.authorization)

Constant Summary collapse

MESSAGES =
{
  100 => 'Transaction was approved',
  200 => 'Transaction was declined by processor',
  201 => 'Do not honor',
  202 => 'Insufficient funds',
  203 => 'Over limit',
  204 => 'Transaction not allowed',
  220 => 'Incorrect payment data',
  221 => 'No such card issuer',
  222 => 'No card number on file with issuer',
  223 => 'Expired card',
  224 => 'Invalid expiration date',
  225 => 'Invalid card security code',
  240 => 'Call issuer for futher information',
  250 => 'Pick up card',
  251 => 'Lost card',
  252 => 'Stolen card',
  253 => 'Fraudulant card',
  260 => 'Declined with further instructions available',
  261 => 'Declined - stop all recurring payments',
  262 => 'Declined - stop this recurring program',
  263 => 'Declined - updated cardholder data available',
  264 => 'Declined - retry in a few days',
  300 => 'Transaction was rejected by gateway',
  400 => 'Transaction error returned by processor',
  410 => 'Invalid merchant configuration',
  411 => 'Merchant account is inactive',
  420 => 'Communication error',
  421 => 'Communication error with issuer',
  430 => 'Duplicate transaction at processor',
  440 => 'Processor format error',
  441 => 'Invalid transaction information',
  460 => 'Processor feature not available',
  461 => 'Unsupported card type'
}

Constants inherited from Gateway

Gateway::CREDIT_DEPRECATION_MESSAGE, Gateway::CURRENCIES_WITHOUT_FRACTIONS, Gateway::DEBIT_CARDS, Gateway::RECURRING_DEPRECATION_MESSAGE, Gateway::STANDARD_ERROR_CODE

Instance Attribute Summary

Attributes inherited from Gateway

#options

Instance Method Summary collapse

Methods inherited from Gateway

#card_brand, card_brand, #generate_unique_id, inherited, non_fractional_currency?, #scrub, supported_countries, #supported_countries, supported_countries=, supports?, #supports_scrubbing?, #test?

Methods included from CreditCardFormatting

#expdate, #format

Constructor Details

#initialize(options = {}) ⇒ EvoCaGateway

This gateway requires that a valid username and password be passed in the options hash.

Required Options

  • :username

  • :password


89
90
91
92
# File 'lib/active_merchant/billing/gateways/evo_ca.rb', line 89

def initialize(options = {})
  requires!(options, :username, :password)
  super
end

Instance Method Details

#authorize(money, credit_card, options = {}) ⇒ Object

Transaction authorizations are authorized immediately but are not flagged for settlement. These transactions must be flagged for settlement using the capture transaction type. Authorizations typically remain activate for three to seven business days.

Payment source must be a CreditCard.


123
124
125
126
127
128
129
130
131
# File 'lib/active_merchant/billing/gateways/evo_ca.rb', line 123

def authorize(money, credit_card, options = {})
  post = {}
  add_invoice(post, options)
  add_order(post, options)
  add_paymentmethod(post, credit_card)
  add_address(post, options)
  add_customer_data(post, options)
  commit('auth', money, post)
end

#capture(money, authorization, options = {}) ⇒ Object

Transaction captures flag existing authorizations for settlement. Only authorizations can be captured. Captures can be submitted for an amount equal to or less than the original authorization.

The authorization parameter is the transaction ID, retrieved from Response#authorization. See EvoCaGateway#purchase for the options.


140
141
142
143
144
145
146
147
# File 'lib/active_merchant/billing/gateways/evo_ca.rb', line 140

def capture(money, authorization, options = {})
  post = {
    :amount         => amount(money),
    :transactionid  => authorization
  }
  add_order(post, options)
  commit('capture', money, post)
end

#credit(money, credit_card, options = {}) ⇒ Object

Transaction credits apply a negative amount to the cardholder's card. In most situations credits are disabled as transaction refunds should be used instead.

Note that this is different from a #refund (which is usually what you'll be looking for).


166
167
168
169
170
171
172
173
174
# File 'lib/active_merchant/billing/gateways/evo_ca.rb', line 166

def credit(money, credit_card, options = {})
  post = {}
  add_invoice(post, options)
  add_order(post, options)
  add_paymentmethod(post, credit_card)
  add_address(post, options)
  add_customer_data(post, options)
  commit('credit', money, post)
end

#purchase(money, credit_card_or_check, options = {}) ⇒ Object

Transaction sales are submitted and immediately flagged for settlement. These transactions will automatically be settled.

Payment source can be either a CreditCard or Check.

Additional Options

In addition to the standard options, this gateway supports

  • :tracking_number - Shipping tracking number

  • :shipping_carrier - ups/fedex/dhl/usps

  • :po_number - Purchase order

  • :tax - Tax amount

  • :shipping - Shipping cost


107
108
109
110
111
112
113
114
115
# File 'lib/active_merchant/billing/gateways/evo_ca.rb', line 107

def purchase(money, credit_card_or_check, options = {})
  post = {}
  add_invoice(post, options)
  add_order(post, options)
  add_paymentmethod(post, credit_card_or_check)
  add_address(post, options)
  add_customer_data(post, options)
  commit('sale', money, post)
end

#refund(money, identification) ⇒ Object

Transaction refunds will reverse a previously settled transaction. If the transaction has not been settled, it must be voided instead of refunded.

The identification parameter is the transaction ID, retrieved from Response#authorization.


155
156
157
158
# File 'lib/active_merchant/billing/gateways/evo_ca.rb', line 155

def refund(money, identification)
  post = {:transactionid => identification}
  commit('refund', money, post)
end

#update(identification, options) ⇒ Object

Transaction updates can be used to update previous transactions with specific order information, such as a tracking number and shipping carrier. See EvoCaGateway#purchase for options.

The identification parameter is the transaction ID, retrieved from Response#authorization.


194
195
196
197
198
# File 'lib/active_merchant/billing/gateways/evo_ca.rb', line 194

def update(identification, options)
  post = {:transactionid => identification}
  add_order(post, options)
  commit('update', nil, post)
end

#void(identification) ⇒ Object

Transaction voids will cancel an existing sale or captured authorization. In addition, non-captured authorizations can be voided to prevent any future capture. Voids can only occur if the transaction has not been settled.

The identification parameter is the transaction ID, retrieved from Response#authorization.


183
184
185
186
# File 'lib/active_merchant/billing/gateways/evo_ca.rb', line 183

def void(identification)
  post = {:transactionid => identification}
  commit('void', nil, post)
end