Current section

Files

Jump to
stripity_stripe lib stripe.ex
Raw

lib/stripe.ex

defmodule Stripe do
@moduledoc """
A HTTP client for Stripe.
"""
# Let's build on top of HTTPoison
use Application
use HTTPoison.Base
def start(_type, _args) do
Stripe.Supervisor.start_link
end
@doc """
Creates the URL for our endpoint.
Args:
* endpoint - part of the API we're hitting
Returns string
"""
def process_url(endpoint) do
"https://api.stripe.com/v1/" <> endpoint
end
@doc """
Set our request headers for every request.
"""
def req_headers do
HashDict.new
|> Dict.put("Authorization", "Bearer #{key}")
|> Dict.put("User-Agent", "Stripe/v1 stripe-elixir/0.1.0")
|> Dict.put("Content-Type", "application/x-www-form-urlencoded")
end
@doc """
Converts the binary keys in our response to atoms.
Args:
* body - string binary response
Returns Record or ArgumentError
"""
def process_response_body(body) do
Poison.decode! body
end
@doc """
Boilerplate code to make requests.
Args:
* endpoint - string requested API endpoint
* body - request body
Returns dict
"""
def make_request(method, endpoint, body \\ [], headers \\ [], options \\ []) do
# rb = Enum.map(body, &url_encode_keyvalue(&1))
# |> Enum.join("&")
rb = Stripe.URI.encode_query(body)
rh = req_headers
|> Dict.merge(headers)
|> Dict.to_list
{:ok, response} = case method do
:get -> get( endpoint, rh, options)
:put -> put( endpoint, rb, rh, options)
:head -> head( endpoint, rh, options)
:post -> post( endpoint, rb, rh, options)
:patch -> patch( endpoint, rb, rh, options)
:delete -> delete( endpoint, rh, options)
:options -> options( endpoint, rh, options)
end
response.body
end
@doc """
Grabs STRIPE_SECRET_KEY from system ENV
Returns binary
"""
def key do
Application.get_env(:stripe, :secret_key) ||
System.get_env "STRIPE_SECRET_KEY"
end
defp url_encode_keyvalue({k, v}) do
key = Atom.to_string(k)
"#{key}=#{v}"
end
end