Current section
Files
Jump to
Current section
Files
lib/razorpay.ex
defmodule Razorpay do
@base_url "https://api.razorpay.com/v1"
@test_url "https://api.razorpay.com"
@client_vsn Mix.Project.config[:version]
def request(method, endpoint \\ "/", opts \\ [])
def request(:get, endpoint, opts) do
url = process_url(endpoint)
url = if opts !== [], do: url <> "?" <> URI.encode_query(opts), else: url
:hackney.request(:get, url, req_headers, "", [basic_auth: auth])
end
def request(:post, endpoint, opts) do
url = process_url(endpoint)
:hackney.request(:post, url, req_headers, {:form, opts},
[basic_auth: auth])
end
def process_response({:ok, status, _, client_ref}, as \\ nil) do
{:ok, res} = :hackney.body(client_ref)
case status do
200 ->
Poison.decode(res, keys: :atoms, as: as)
c when c in [400, 401, 500, 502, 504] ->
res =
Poison.decode!(res, keys: :atoms!,
as: %{error: %Razorpay.Error{}})
{:error, res.error}
end
end
def make_test_request do
request(:get)
|> process_response
end
defp req_headers do
[{"User-Agent", "Razorpay-Elixir/#{@client_vsn}"}]
end
defp key_id do
value =
(Application.get_env(:razorpay, :key_id)
|| System.get_env "RAZORPAY_KEY_ID")
if value, do: value, else: raise Razorpay.Error,
"Razorpay key_id or key_secret is missing"
end
defp key_secret do
value =
(Application.get_env(:razorpay, :key_secret)
|| System.get_env "RAZORPAY_KEY_SECRET")
if value, do: value, else: raise Razorpay.Error,
"Razorpay key_id or key_secret is missing"
end
defp auth do
{key_id, key_secret}
end
defp process_url("/") do
@test_url
end
defp process_url(endpoint) do
@base_url <> endpoint
end
end