class ActiveMerchant::Billing::BarclaysEpdqGateway::Parser

Public Class Methods

new(response) click to toggle source
# File lib/active_merchant/billing/gateways/barclays_epdq.rb, line 132
def initialize(response)
  @response = response
end

Public Instance Methods

find(doc, xpath) click to toggle source
# File lib/active_merchant/billing/gateways/barclays_epdq.rb, line 170
def find(doc, xpath)
  REXML::XPath.first(doc, xpath).try(:text)
end
parse() click to toggle source
# File lib/active_merchant/billing/gateways/barclays_epdq.rb, line 136
def parse
  require 'iconv' unless String.method_defined?(:encode)
  if String.method_defined?(:encode)
    doc = REXML::Document.new(@response.encode("UTF-8", "ISO-8859-1"))
  else
    ic = Iconv.new('UTF-8', 'ISO-8859-1')
    doc = REXML::Document.new(ic.iconv(@response))
  end

  auth_type = find(doc, "//Transaction/Type").to_s

  message = find(doc, "//Message/Text")
  if message.blank?
    message = find(doc, "//Transaction/CardProcResp/CcReturnMsg")
  end

  case auth_type
  when 'Credit', 'Void'
    success = find(doc, "//CcReturnMsg") == "Approved."
  else
    success = find(doc, "//Transaction/AuthCode").present?
  end

  {
    :success => success,
    :message => message,
    :transaction_id => find(doc, "//Transaction/Id"),
    :avs_result => find(doc, "//Transaction/AvsRespCode"),
    :cvv_result => find(doc, "//Transaction/Cvv2Resp"),
    :authorization => find(doc, "//OrderFormDoc/Id"),
    :raw_response => @response
  }
end