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={})
  ActiveMerchant.deprecated('IPP gateway is now named Bambora Asia-Pacific')
  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 43
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 56
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 30
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 66
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 80
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 76
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 96
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 89
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 100
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 171
def authorization_from(response)
  response[:receipt]
end
commit(action, &block) click to toggle source
# File lib/active_merchant/billing/gateways/ipp.rb, line 121
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 155
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 163
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 167
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 138
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 110
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 159
def success_from(response)
  (response[:response_code] == '0')
end