class ActiveMerchant::Billing::MerchantESolutionsGateway

Public Class Methods

new(options = {}) click to toggle source
Calls superclass method ActiveMerchant::Billing::Gateway::new
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 21
def initialize(options = {})
  requires!(options, :login, :password)
  super
end

Public Instance Methods

authorize(money, creditcard_or_card_id, options = {}) click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 26
def authorize(money, creditcard_or_card_id, options = {})
  post = {}
  post[:client_reference_number] = options[:customer] if options.has_key?(:customer)
  post[:moto_ecommerce_ind] = options[:moto_ecommerce_ind] if options.has_key?(:moto_ecommerce_ind)
  add_invoice(post, options)
  add_payment_source(post, creditcard_or_card_id, options)
  add_address(post, options)
  add_3dsecure_params(post, options)
  commit('P', money, post)
end
capture(money, transaction_id, options = {}) click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 48
def capture(money, transaction_id, options = {})
  post ={}
  post[:transaction_id] = transaction_id
  post[:client_reference_number] = options[:customer] if options.has_key?(:customer)
  add_invoice(post, options)
  add_3dsecure_params(post, options)
  commit('S', money, post)
end
credit(money, creditcard_or_card_id, options = {}) click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 80
def credit(money, creditcard_or_card_id, options = {})
  post = {}
  post[:client_reference_number] = options[:customer] if options.has_key?(:customer)
  add_invoice(post, options)
  add_payment_source(post, creditcard_or_card_id, options)
  commit('C', money, post)
end
purchase(money, creditcard_or_card_id, options = {}) click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 37
def purchase(money, creditcard_or_card_id, options = {})
  post = {}
  post[:client_reference_number] = options[:customer] if options.has_key?(:customer)
  post[:moto_ecommerce_ind] = options[:moto_ecommerce_ind] if options.has_key?(:moto_ecommerce_ind)
  add_invoice(post, options)
  add_payment_source(post, creditcard_or_card_id, options)
  add_address(post, options)
  add_3dsecure_params(post, options)
  commit('D', money, post)
end
refund(money, identification, options = {}) click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 71
def refund(money, identification, options = {})
  post = {}
  post[:transaction_id] = identification
  post[:client_reference_number] = options[:customer] if options.has_key?(:customer)
  options.delete(:customer)
  options.delete(:billing_address)
  commit('U', money, options.merge(post))
end
scrub(transcript) click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 101
def scrub(transcript)
  transcript.
    gsub(%r((&?profile_key=)\w*(&?)), '\1[FILTERED]\2').
    gsub(%r((&?card_number=)\d*(&?)), '\1[FILTERED]\2').
    gsub(%r((&?cvv2=)\d*(&?)), '\1[FILTERED]\2')
end
store(creditcard, options = {}) click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 57
def store(creditcard, options = {})
  post = {}
  post[:client_reference_number] = options[:customer] if options.has_key?(:customer)
  add_creditcard(post, creditcard, options)
  commit('T', nil, post)
end
supports_scrubbing?() click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 97
def supports_scrubbing?
  true
end
unstore(card_id, options = {}) click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 64
def unstore(card_id, options = {})
  post = {}
  post[:client_reference_number] = options[:customer] if options.has_key?(:customer)
  post[:card_id] = card_id
  commit('X', nil, post)
end
void(transaction_id, options = {}) click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 88
def void(transaction_id, options = {})
  post = {}
  post[:transaction_id] = transaction_id
  post[:client_reference_number] = options[:customer] if options.has_key?(:customer)
  options.delete(:customer)
  options.delete(:billing_address)
  commit('V', nil, options.merge(post))
end

Private Instance Methods

add_3dsecure_params(post, options) click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 141
def add_3dsecure_params(post, options)
  post[:xid] = options[:xid] unless empty?(options[:xid])
  post[:cavv] = options[:cavv] unless empty?(options[:cavv])
  post[:ucaf_collection_ind] = options[:ucaf_collection_ind] unless empty?(options[:ucaf_collection_ind])
  post[:ucaf_auth_data] = options[:ucaf_auth_data] unless empty?(options[:ucaf_auth_data])
end
add_address(post, options) click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 110
def add_address(post, options)
  if address = options[:billing_address] || options[:address]
    post[:cardholder_street_address] = address[:address1].to_s.gsub(/[^\w.]/, '+')
    post[:cardholder_zip] = address[:zip].to_s
  end
end
add_creditcard(post, creditcard, options) click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 135
def add_creditcard(post, creditcard, options)
  post[:card_number]  = creditcard.number
  post[:cvv2] = creditcard.verification_value if creditcard.verification_value?
  post[:card_exp_date]  = expdate(creditcard)
end
add_invoice(post, options) click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 117
def add_invoice(post, options)
  if options.has_key? :order_id
    order_id = options[:order_id].to_s.gsub(/[^\w.]/, '')
    post[:invoice_number] = truncate(order_id, 17)
  end
end
add_payment_source(post, creditcard_or_card_id, options) click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 124
def add_payment_source(post, creditcard_or_card_id, options)
  if creditcard_or_card_id.is_a?(String)
    # using stored card
    post[:card_id] = creditcard_or_card_id
    post[:card_exp_date] = options[:expiration_date] if options[:expiration_date]
  else
    # card info is provided
    add_creditcard(post, creditcard_or_card_id, options)
  end
end
commit(action, money, parameters) click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 157
def commit(action, money, parameters)
  url = test? ? self.test_url : self.live_url
  parameters[:transaction_amount]  = amount(money) if money unless action == 'V'

  response = begin
    parse(ssl_post(url, post_data(action, parameters)))
  rescue ActiveMerchant::ResponseError => e
    { 'error_code' => '404',  'auth_response_text' => e.to_s }
  end

  Response.new(response['error_code'] == '000', message_from(response), response,
    :authorization => response['transaction_id'],
    :test => test?,
    :cvv_result => response['cvv2_result'],
    :avs_result => { :code => response['avs_result'] }
  )
end
message_from(response) click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 175
def message_from(response)
  if response['error_code'] == '000'
    'This transaction has been approved'
  else
    response['auth_response_text']
  end
end
parse(body) click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 148
def parse(body)
  results = {}
  body.split(/&/).each do |pair|
    key, val = pair.split(/=/)
    results[key] = val
  end
  results
end
post_data(action, parameters = {}) click to toggle source
# File lib/active_merchant/billing/gateways/merchant_e_solutions.rb, line 183
def post_data(action, parameters = {})
  post = {}
  post[:profile_id] = @options[:login]
  post[:profile_key] = @options[:password]
  post[:transaction_type] = action if action

  request = post.merge(parameters).map { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join('&')
  request
end