Skip to content

therealsmat/paystack

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Paystack 💵💵

A library for working with Paystack in Elixir with out of the box support for telemetry events.

Elixir CI Coverage Status Hex.pm

Comprehensive documentation available on HexDocs

Requirements

This package requires Elixir v1.12+

Installation

Add the following to your mix.exs file

  {:paystack, "~> 0.7.0"}

Then run mix deps.get to pull in the package

Configuration

Add the following to your config.exs or runtime.exs file

config :paystack, secret_key: System.get_env("PAYSTACK_SECRET_KEY")

Your environment variable does not have to be PAYSTACK_SECRET_KEY, as the package only depends on the config key.

Usage

This package returns responses in the format of {:ok, Paystack.Response{}} | {:error, any}. This means a successful request would look like this;

iex> Paystack.Transaction.initialize(%{ email: "customer@email.com", amount: "20000" })

{:ok,
  %Paystack.Response{
  data: %{
    "access_code" => "0peioxfhpn",
    "authorization_url" => "https://checkout.paystack.com/0peioxfhpn",
    "reference" => "7PVGX8MEk85tgeEpVDtD"
  },
  message: "Authorization URL created",
  meta: nil,
  status_code: 200,
  success: true
}}

An unsuccessful response would look like this;

iex> Paystack.Transaction.initialize(%{ email: "customer@email.com", amount: "20000" })

{:ok,
  %Paystack.Response{
    data: nil,
    message: "Invalid key",
    meta: nil,
    status_code: 401,
    success: false
  }}

while an unexpected response would look like this.

iex> Paystack.Transaction.initialize(%{ email: "customer@email.com", amount: "20000" })

{:error, :nxdomain}

Telemetry

This library executes the following telemetry events:

  • [:paystack, :request, :start] - Executed before sending a request Measurements

    • system_time - The system time
  • [:paystack, :request, :stop] - Executed after sending the final response Measurements

    • duration - The system time in :native unit

    Metadata

    • url - The paystack url requested
    • request_type - The http request type (:get, :post, :put or :delete)
    • status_code - The http response status code e.g 201, 400, 401, e.t.c.
    • response_type - The library's response type (:ok or :error)

Happy coding!

Testing

All modules implement a base behaviour. For instance, the Paystack.Transaction module implements a Paystack.Transaction.Base behaviour which makes it easy to mock with libraries such as https://hex.pm/packages/mox

License

MIT