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
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
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