module BamboozledPanda

Public Class Methods

create_customer(email, source_token) click to toggle source
# File lib/bamboozled_panda.rb, line 65
def self.create_customer(email, source_token)
  raise "Must set secret key with set_key" unless @secret_key

  uri = URI.parse("https://api.pandapay.io/v1/customers")
  request = Net::HTTP::Post.new(uri)
  request.basic_auth(@secret_key, '')
  request.set_form_data(
    "email" => email,
    "source" => source 
  )

  req_options = {
    use_ssl: uri.scheme == "https"
  }

  response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
    http.request(request)
  end

  {code: response.code, body: JSON.parse(response.body)}
end
create_donation(amount, source, email, destination_ein="") click to toggle source

this is used to create a “pool” of money from which we will take when using ‘transfer_to_grant`

# File lib/bamboozled_panda.rb, line 15
def self.create_donation(amount, source, email, destination_ein="")
  raise "Must set secret key with set_key" unless @secret_key

  uri = URI.parse("https://api.pandapay.io/v1/donations")
  request = Net::HTTP::Post.new(uri)
  request.basic_auth(@secret_key, '')
  request.set_form_data(
    "amount" => amount,
    "currency" => "usd",
    "source" => source,
    "receipt_email" => email,
    "destination" => destination_ein
  )

  req_options = {
    use_ssl: uri.scheme == "https"
  }

  response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
    http.request(request)
  end

  {code: response.code, body: JSON.parse(response.body)}
end
create_grant(amount, charity_id = "68-0412350") click to toggle source

I used the id of the California Community College Charity by default This is where we actually send money to a charity PandaPay does not send an email after this function

# File lib/bamboozled_panda.rb, line 43
def self.create_grant(amount, charity_id = "68-0412350")
  raise "Must set secret key with set_key" unless @secret_key

  uri = URI.parse("https://api.pandapay.io/v1/grants")
  request = Net::HTTP::Post.new(uri)
  request.basic_auth(@secret_key, '')
  request.set_form_data(
    "amount" => amount,
    "destination" => charity_id
  )

  req_options = {
    use_ssl: uri.scheme == "https"
  }

  response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
    http.request(request)
  end

  {code: response.code, body: JSON.parse(response.body)}
end
get(resource) click to toggle source
# File lib/bamboozled_panda.rb, line 87
def self.get(resource)
  raise "Must set secret key with set_key" unless @secret_key

  uri = URI.parse("https://api.pandapay.io/v1/#{resource}")
  request = Net::HTTP::Get.new(uri)
  request.basic_auth(@secret_key, '')

  req_options = {
    use_ssl: uri.scheme == "https"
  }

  response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
    http.request(request)
  end

  response
end
get_available_funds() click to toggle source
# File lib/bamboozled_panda.rb, line 120
def self.get_available_funds
  balance = get('balance')
  (JSON.parse(balance.body))["total_unallocated_donations_amount"]
end
get_customers() click to toggle source
# File lib/bamboozled_panda.rb, line 105
def self.get_customers
  customers = get('customers')
  {code: customers.code, body: JSON.parse(customers.body)}
end
get_donations() click to toggle source
# File lib/bamboozled_panda.rb, line 115
def self.get_donations
  donations = get('donations')
  {code: donations.code, body: JSON.parse(donations.body)}
end
get_grants() click to toggle source
# File lib/bamboozled_panda.rb, line 110
def self.get_grants
  grants = get('grants')
  {code: grants.code, body: JSON.parse(grants.body)}
end
set_key(secret_key) click to toggle source

Panda Pay takes 1% + 2.9% + 30c per donation from credit/debit card donations

1% + 25c        per donation from ACH donations, but to get this we need to talk to them more
# File lib/bamboozled_panda.rb, line 10
def self.set_key(secret_key)
  @secret_key = secret_key
end