class ActiveMerchant::Billing::FirstGivingGateway

Public Class Methods

new(options = {}) click to toggle source
Calls superclass method ActiveMerchant::Billing::Gateway::new
# File lib/active_merchant/billing/gateways/first_giving.rb, line 15
def initialize(options = {})
  requires!(options, :application_key, :security_token, :charity_id)
  super
end

Public Instance Methods

purchase(money, creditcard, options = {}) click to toggle source
# File lib/active_merchant/billing/gateways/first_giving.rb, line 20
def purchase(money, creditcard, options = {})
  post = {}
  add_invoice(post, options)
  add_creditcard(post, creditcard)
  add_address(post, options)
  add_customer_data(post, options)
  add_donation_data(post, money, options)
  commit('/donation/creditcard', post)
end
refund(money, identifier, options = {}) click to toggle source
# File lib/active_merchant/billing/gateways/first_giving.rb, line 30
def refund(money, identifier, options = {})
  get = {}
  get[:transactionId] = identifier
  get[:tranType]     = 'REFUNDREQUEST'
  commit("/transaction/refundrequest?" + encode(get))
end

Private Instance Methods

add_address(post, options) click to toggle source
# File lib/active_merchant/billing/gateways/first_giving.rb, line 51
def add_address(post, options)
  if(billing_address = (options[:billing_address] || options[:address]))
    post[:billToAddressLine1]  = billing_address[:address1]
    post[:billToCity]          = billing_address[:city]
    post[:billToState]         = billing_address[:state]
    post[:billToZip]           = billing_address[:zip]
    post[:billToCountry]       = billing_address[:country]
  end
end
add_creditcard(post, creditcard) click to toggle source
# File lib/active_merchant/billing/gateways/first_giving.rb, line 65
def add_creditcard(post, creditcard)
  post[:billToFirstName]     = creditcard.first_name
  post[:billToLastName]      = creditcard.last_name
  post[:ccNumber]            = creditcard.number
  post[:ccType]              = creditcard_brand(creditcard.brand)
  post[:ccExpDateMonth]      = creditcard.month
  post[:ccExpDateYear]       = creditcard.year
  post[:ccCardValidationNum] = creditcard.verification_value
end
add_customer_data(post, options) click to toggle source
# File lib/active_merchant/billing/gateways/first_giving.rb, line 46
def add_customer_data(post, options)
  post[:billToEmail] = (options[:email] || "activemerchant@example.com")
  post[:remoteAddr]  = (options[:ip] || "127.0.0.1")
end
add_donation_data(post, money, options) click to toggle source
# File lib/active_merchant/billing/gateways/first_giving.rb, line 39
def add_donation_data(post, money, options)
  post[:amount] = amount(money)
  post[:charityId] = @options[:charity_id]
  post[:description] = (options[:description] || "Purchase")
  post[:currencyCode] = (options[:currency] || currency(money))
end
add_invoice(post, options) click to toggle source
# File lib/active_merchant/billing/gateways/first_giving.rb, line 61
def add_invoice(post, options)
  post[:orderId] = options[:order_id]
end
commit(action, post=nil) click to toggle source
# File lib/active_merchant/billing/gateways/first_giving.rb, line 92
def commit(action, post=nil)
  url = (test? ? self.test_url : self.live_url) + action

  begin
    if post
      response = parse(ssl_post(url, post_data(post), headers))
    else
      response = parse(ssl_get(url, headers))
    end
  rescue ResponseError => e
    response = parse(e.response.body)
  end

  Response.new(
    (response["acknowledgement"] == "Success"),
    (response["friendlyErrorMessage"] || response["verboseErrorMessage"] || response["acknowledgement"]),
    response,
    authorization: response["transactionId"],
    test: test?,
  )
end
creditcard_brand(brand) click to toggle source
# File lib/active_merchant/billing/gateways/first_giving.rb, line 122
def creditcard_brand(brand)
  case brand
  when "visa" then "VI"
  when "master" then "MC"
  when "discover" then "DI"
  when "american_express" then "AX"
  else
    raise "Unhandled credit card brand #{brand}"
  end
end
encode(hash) click to toggle source
# File lib/active_merchant/billing/gateways/first_giving.rb, line 118
def encode(hash)
  hash.collect{|(k,v)| "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}"}.join('&')
end
headers() click to toggle source
# File lib/active_merchant/billing/gateways/first_giving.rb, line 133
def headers
  {
    "User-Agent"        => "ActiveMerchantBindings/#{ActiveMerchant::VERSION}",
    "JG_APPLICATIONKEY" => "#{@options[:application_key]}",
    "JG_SECURITYTOKEN"  => "#{@options[:security_token]}"
  }
end
parse(body) click to toggle source
# File lib/active_merchant/billing/gateways/first_giving.rb, line 75
def parse(body)
  response = {}

  xml = Nokogiri::XML(body)
  element = xml.xpath("//firstGivingDonationApi/firstGivingResponse").first

  element.attributes.each do |name, attribute|
    response[name] = attribute.content
  end
  element.children.each do |child|
    next if child.text?
    response[child.name] = child.text
  end

  response
end
post_data(post) click to toggle source
# File lib/active_merchant/billing/gateways/first_giving.rb, line 114
def post_data(post)
  post.collect { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join("&")
end