class OffsitePayments::Integrations::Pxpay::Helper

Attributes

redirect_parameters[R]
token_parameters[R]

Public Class Methods

new(order, account, options = {}) click to toggle source
Calls superclass method
# File lib/offsite_payments/integrations/pxpay.rb, line 23
def initialize(order, account, options = {})
  @token_parameters = {
    'PxPayUserId'       => account,
    'PxPayKey'          => options[:credential2],
    'CurrencyInput'     => options[:currency],
    'MerchantReference' => order,
    'EmailAddress'      => options[:customer_email],
    'TxnData1'          => options[:custom1],
    'TxnData2'          => options[:custom2],
    'TxnData3'          => options[:custom3],
    'AmountInput'       => "%.2f" % options[:amount].to_f.round(2),
    'EnableAddBillCard' => '0',
    'TxnType'           => 'Purchase',
    'UrlSuccess'        => options[:return_url],
    'UrlFail'           => options[:return_url]
  }
  @redirect_parameters = {}

  super

  raise ArgumentError, "error - must specify return_url"        if token_parameters['UrlSuccess'].blank?
  raise ArgumentError, "error - must specify cancel_return_url" if token_parameters['UrlFail'].blank?
end

Public Instance Methods

credential_based_url() click to toggle source
# File lib/offsite_payments/integrations/pxpay.rb, line 47
def credential_based_url
  raw_response = ssl_post(Pxpay.token_url, generate_request)
  result = parse_response(raw_response)

  raise ActionViewHelperError, "error - failed to get token - message was #{result[:redirect]}" unless result[:valid] == "1"

  url = URI.parse(result[:redirect])

  if url.query
    @redirect_parameters = CGI.parse(url.query)
    url.query = nil
  end

  url.to_s
rescue ActiveMerchant::ConnectionError
  raise ActionViewHelperError, "A connection error occurred while contacting the payment gateway. Please try again."
end
form_fields() click to toggle source
# File lib/offsite_payments/integrations/pxpay.rb, line 69
def form_fields
  redirect_parameters
end
form_method() click to toggle source
# File lib/offsite_payments/integrations/pxpay.rb, line 65
def form_method
  "GET"
end

Private Instance Methods

generate_request() click to toggle source
# File lib/offsite_payments/integrations/pxpay.rb, line 74
def generate_request
  xml = REXML::Document.new
  root = xml.add_element('GenerateRequest')

  token_parameters.each do | k, v |
    next if v.blank?

    v = v.to_s.slice(0, 50) if k == "MerchantReference"
    root.add_element(k).text = v
  end

  xml.to_s
end
parse_response(raw_response) click to toggle source
# File lib/offsite_payments/integrations/pxpay.rb, line 88
def parse_response(raw_response)
  xml = REXML::Document.new(raw_response)
  root = REXML::XPath.first(xml, "//Request")
  valid = root.attributes["valid"]
  redirect = root.elements["URI"].try(:text)
  valid, redirect = "0", root.elements["ResponseText"].try(:text) unless redirect

  # example valid response:
  # <Request valid="1"><URI>https://sec.paymentexpress.com/pxpay/pxpay.aspx?userid=PxpayUser&amp;request=REQUEST_TOKEN</URI></Request>
  # <Request valid='1'><Reco>IP</Reco><ResponseText>Invalid Access Info</ResponseText></Request>

  # example invalid response:
  # <Request valid="0"><URI>Invalid TxnType</URI></Request>

  {:valid => valid, :redirect => redirect}
end