class ActiveMerchant::Billing::MaxipagoGateway

Constants

API_VERSION

Public Class Methods

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

Public Instance Methods

authorize(money, creditcard, options = {}) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 29
def authorize(money, creditcard, options = {})
  commit(:auth) do |xml|
    add_auth_purchase(xml, money, creditcard, options)
  end
end
capture(money, authorization, options = {}) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 35
def capture(money, authorization, options = {})
  commit(:capture) do |xml|
    add_order_id(xml, authorization)
    add_reference_num(xml, options)
    xml.payment do
      add_amount(xml, money, options)
    end
  end
end
purchase(money, creditcard, options = {}) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 23
def purchase(money, creditcard, options = {})
  commit(:sale) do |xml|
    add_auth_purchase(xml, money, creditcard, options)
  end
end
refund(money, authorization, options = {}) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 52
def refund(money, authorization, options = {})
  commit(:return) do |xml|
    add_order_id(xml, authorization)
    add_reference_num(xml, options)
    xml.payment do
      add_amount(xml, money, options)
    end
  end
end
scrub(transcript) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 73
def scrub(transcript)
  transcript.
    gsub(%r((<merchantKey>)[^<]*(</merchantKey>))i, '\1[FILTERED]\2').
    gsub(%r((<number>)[^<]*(</number>))i, '\1[FILTERED]\2').
    gsub(%r((<cvvNumber>)[^<]*(</cvvNumber>))i, '\1[FILTERED]\2')
end
supports_scrubbing?() click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 69
def supports_scrubbing?
  true
end
verify(creditcard, options = {}) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 62
def verify(creditcard, options = {})
  MultiResponse.run(:use_first_response) do |r|
    r.process { authorize(100, creditcard, options) }
    r.process(:ignore_result) { void(r.authorization, options) }
  end
end
void(authorization, options = {}) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 45
def void(authorization, options = {})
  _, transaction_id = split_authorization(authorization)
  commit(:void) do |xml|
    xml.transactionID transaction_id
  end
end

Private Instance Methods

add_amount(xml, money, options) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 176
def add_amount(xml, money, options)
  xml.chargeTotal(amount(money))
  xml.currencyCode(options[:currency] || currency(money) || default_currency)
end
add_auth_purchase(xml, money, creditcard, options) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 151
def add_auth_purchase(xml, money, creditcard, options)
  add_processor_id(xml)
  xml.fraudCheck('N')
  add_reference_num(xml, options)
  xml.transactionDetail do
    xml.payType do
      xml.creditCard do
        xml.number(creditcard.number)
        xml.expMonth(creditcard.month)
        xml.expYear(creditcard.year)
        xml.cvvNumber(creditcard.verification_value)
      end
    end
  end
  xml.payment do
    add_amount(xml, money, options)
    add_installments(xml, options)
  end
  add_billing_address(xml, creditcard, options)
end
add_billing_address(xml, creditcard, options) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 198
def add_billing_address(xml, creditcard, options)
  address = options[:billing_address]
  return unless address

  xml.billing do
    xml.name creditcard.name
    xml.address address[:address1] if address[:address1]
    xml.address2 address[:address2] if address[:address2]
    xml.city address[:city] if address[:city]
    xml.state address[:state] if address[:state]
    xml.postalcode address[:zip] if address[:zip]
    xml.country address[:country] if address[:country]
    xml.phone address[:phone] if address[:phone]
  end
end
add_installments(xml, options) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 189
def add_installments(xml, options)
  if options.has_key?(:installments) && options[:installments] > 1
    xml.creditInstallment do
      xml.numberOfInstallments options[:installments]
      xml.chargeInterest 'N'
    end
  end
end
add_order_id(xml, authorization) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 214
def add_order_id(xml, authorization)
  order_id, _ = split_authorization(authorization)
  xml.orderID order_id
end
add_processor_id(xml) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 181
def add_processor_id(xml)
  if test?
    xml.processorID(1)
  else
    xml.processorID(@options[:processor_id] || 4)
  end
end
add_reference_num(xml, options) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 172
def add_reference_num(xml, options)
  xml.referenceNum(options[:order_id] || generate_unique_id)
end
authorization_from(response) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 125
def authorization_from(response)
  "#{response[:order_id]}|#{response[:transaction_id]}"
end
build_xml_request(action) { |xml| ... } click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 99
def build_xml_request(action)
  builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8')
  builder.send('transaction-request') do |xml|
    xml.version '3.1.1.15'
    xml.verification do
      xml.merchantId @options[:login]
      xml.merchantKey @options[:password]
    end
    xml.order do
      xml.send("#{action}!") do
        yield(xml)
      end
    end
  end

  builder.to_xml(indent: 2)
end
commit(action) { |doc| ... } click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 82
def commit(action)
  request = build_xml_request(action) { |doc| yield(doc) }
  response = parse(ssl_post(url, request, 'Content-Type' => 'text/xml'))

  Response.new(
    success?(response),
    message_from(response),
    response,
    test: test?,
    authorization: authorization_from(response)
  )
end
message_from(response) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 121
def message_from(response)
  response[:error_message] || response[:response_message] || response[:processor_message] || response[:error_msg]
end
parse(body) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 133
def parse(body)
  xml = REXML::Document.new(body)

  response = {}
  xml.root.elements.to_a.each do |node|
    parse_element(response, node)
  end
  response
end
parse_element(response, node) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 143
def parse_element(response, node)
  if node.has_elements?
    node.elements.each { |element| parse_element(response, element) }
  else
    response[node.name.underscore.to_sym] = node.text
  end
end
split_authorization(authorization) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 129
def split_authorization(authorization)
  authorization.split('|')
end
success?(response) click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 117
def success?(response)
  response[:response_code] == '0'
end
url() click to toggle source
# File lib/active_merchant/billing/gateways/maxipago.rb, line 95
def url
  test? ? self.test_url : self.live_url
end