class ActiveMerchant::Billing::IppGateway

Constants

STANDARD_ERROR_CODE_MAPPING

Public Class Methods

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

Public Instance Methods

authorize(money, payment, options={}) click to toggle source
# File lib/active_merchant/billing/gateways/ipp.rb, line 42
def authorize(money, payment, options={})
  commit("SubmitSinglePayment") do |xml|
    xml.Transaction do
      xml.CustRef options[:order_id]
      add_amount(xml, money)
      xml.TrnType "2"
      add_credit_card(xml, payment)
      add_credentials(xml)
      xml.TrnSource options[:ip]
    end
  end
end
capture(money, authorization, options={}) click to toggle source
# File lib/active_merchant/billing/gateways/ipp.rb, line 55
def capture(money, authorization, options={})
  commit("SubmitSingleCapture") do |xml|
    xml.Capture do
      xml.Receipt authorization
      add_amount(xml, money)
      add_credentials(xml)
    end
  end
end
purchase(money, payment, options={}) click to toggle source
# File lib/active_merchant/billing/gateways/ipp.rb, line 29
def purchase(money, payment, options={})
  commit("SubmitSinglePayment") do |xml|
    xml.Transaction do
      xml.CustRef options[:order_id]
      add_amount(xml, money)
      xml.TrnType "1"
      add_credit_card(xml, payment)
      add_credentials(xml)
      xml.TrnSource options[:ip]
    end
  end
end
refund(money, authorization, options={}) click to toggle source
# File lib/active_merchant/billing/gateways/ipp.rb, line 65
def refund(money, authorization, options={})
  commit("SubmitSingleRefund") do |xml|
    xml.Refund do
      xml.Receipt authorization
      add_amount(xml, money)
      add_credentials(xml)
    end
  end
end
scrub(transcript) click to toggle source
# File lib/active_merchant/billing/gateways/ipp.rb, line 79
def scrub(transcript)
  transcript.
    gsub(%r((<CardNumber>)[^<]+(<))i, '\1[FILTERED]\2').
    gsub(%r((<CVN>)[^<]+(<))i, '\1[FILTERED]\2').
    gsub(%r((<Password>)[^<]+(<))i, '\1[FILTERED]\2')
end
supports_scrubbing?() click to toggle source
# File lib/active_merchant/billing/gateways/ipp.rb, line 75
def supports_scrubbing?
  true
end

Private Instance Methods

add_amount(xml, money) click to toggle source
# File lib/active_merchant/billing/gateways/ipp.rb, line 95
def add_amount(xml, money)
  xml.Amount amount(money)
end
add_credentials(xml) click to toggle source
# File lib/active_merchant/billing/gateways/ipp.rb, line 88
def add_credentials(xml)
  xml.Security do
    xml.UserName @options[:username]
    xml.Password @options[:password]
  end
end
add_credit_card(xml, payment) click to toggle source
# File lib/active_merchant/billing/gateways/ipp.rb, line 99
def add_credit_card(xml, payment)
  xml.CreditCard :Registered => "False" do
    xml.CardNumber payment.number
    xml.ExpM format(payment.month, :two_digits)
    xml.ExpY format(payment.year, :four_digits)
    xml.CVN payment.verification_value
    xml.CardHolderName payment.name
  end
end
authorization_from(response) click to toggle source
# File lib/active_merchant/billing/gateways/ipp.rb, line 170
def authorization_from(response)
  response[:receipt]
end
commit(action, &block) click to toggle source
# File lib/active_merchant/billing/gateways/ipp.rb, line 120
def commit(action, &block)
  headers = {
    "Content-Type" => "text/xml; charset=utf-8",
    "SOAPAction" => "http://www.ippayments.com.au/interface/api/dts/#{action}",
  }
  response = parse(ssl_post(commit_url, new_submit_xml(action, &block), headers))

  Response.new(
    success_from(response),
    message_from(response),
    response,
    authorization: authorization_from(response),
    error_code: error_code_from(response),
    test: test?,
  )
end
commit_url() click to toggle source
# File lib/active_merchant/billing/gateways/ipp.rb, line 154
def commit_url
  (test? ? test_url : live_url)
end
error_code_from(response) click to toggle source
# File lib/active_merchant/billing/gateways/ipp.rb, line 162
def error_code_from(response)
  STANDARD_ERROR_CODE_MAPPING[response[:declined_code]]
end
message_from(response) click to toggle source
# File lib/active_merchant/billing/gateways/ipp.rb, line 166
def message_from(response)
  response[:declined_message]
end
new_submit_xml(action) { |inner_xml| ... } click to toggle source
# File lib/active_merchant/billing/gateways/ipp.rb, line 137
def new_submit_xml(action)
  xml = Builder::XmlMarkup.new(indent: 2)
  xml.instruct!
  xml.soap :Envelope, "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance", "xmlns:xsd" => "http://www.w3.org/2001/XMLSchema", "xmlns:soap" => "http://schemas.xmlsoap.org/soap/envelope/" do
    xml.soap :Body do
      xml.__send__(action, "xmlns" => "http://www.ippayments.com.au/interface/api/dts") do
        xml.trnXML do
          inner_xml = Builder::XmlMarkup.new(indent: 2)
          yield(inner_xml)
          xml.cdata!(inner_xml.target!)
        end
      end
    end
  end
  xml.target!
end
parse(body) click to toggle source
# File lib/active_merchant/billing/gateways/ipp.rb, line 109
def parse(body)
  element = Nokogiri::XML(body).root.first_element_child.first_element_child

  response = {}
  doc = Nokogiri::XML(element)
  doc.root.elements.each do |e|
    response[e.name.underscore.to_sym] = e.inner_text
  end
  response
end
success_from(response) click to toggle source
# File lib/active_merchant/billing/gateways/ipp.rb, line 158
def success_from(response)
  (response[:response_code] == "0")
end