Description
Stripy is a micro wrapper intended to be
used for sending requests to Stripe's REST API. It is
made for developers who prefer to work directly with the
official API and provide their own abstractions on top
if such are needed.
Stripy takes care of setting headers, encoding the data,
configuration settings, etc (the usual boring boilerplate);
it also provides a parse/1 helper function for decoding.
Stripy alternatives and similar packages
Based on the "Third Party APIs" category.
Alternatively, view Stripy alternatives based on common mentions on social networks and blogs.
-
MongoosePush
MongoosePush is a simple Elixir RESTful service allowing to send push notification via FCM and/or APNS. -
sparkpost
SparkPost client library for Elixir https://developers.sparkpost.com -
elixtagram
:camera: Instagram API client for the Elixir language (elixir-lang) -
google_sheets
Elixir library for fetching Google Spreadsheet data in CSV format -
pay_pal
:money_with_wings: PayPal REST API client for the Elixir language (elixir-lang) -
cashier
Cashier is an Elixir library that aims to be an easy to use payment gateway, whilst offering the fault tolerance and scalability benefits of being built on top of Erlang/OTP -
amazon_product_advertising_client
An Amazon Product Advertising API client for Elixir -
elixir_ipfs_api
The Elixir library that is used to communicate with the IPFS REST endpoint. -
airbrake
An Elixir notifier to the Airbrake/Errbit. System-wide error reporting enriched with the information from Plug and Phoenix channels.
Clean code begins in your IDE with SonarLint
Do you think we are missing an alternative of Stripy or a related project?
README
Stripy

Stripy is a micro wrapper intended to be used for sending requests to Stripe's REST API. It is made for developers who prefer to work directly with the official API and provide their own abstractions on top if such are needed.
Stripy takes care of setting headers, encoding the data, configuration settings, etc (the usual boring boilerplate); it also makes testing easy by letting you plug your own mock server (see Testing section below).
Some basic examples:
iex> Stripy.req(:get, "subscriptions")
{:ok, %HTTPoison.Response{...}}
iex> Stripy.req(:post, "customers", %{"email" => "[email protected]", "metadata[user_id]" => 1})
{:ok, %HTTPoison.Response{...}}
Where subscriptions
and customers
are REST API resources.
If you prefer to work with a higher-level library, check out "stripity_stripe" or "stripe_elixir" on Hex.
Installation
Add to your mix.exs
as usual:
def deps do
[{:stripy, "~> 2.0"}]
end
If you're not using application inference, then add :stripy
to your applications
list.
Then configure the stripy
app per environment like so:
config :stripy,
secret_key: "sk_test_xxxxxxxxxxxxx", # required
endpoint: "https://api.stripe.com/v1/", # optional
version: "2017-06-05", # optional
httpoison: [recv_timeout: 5000, timeout: 8000] # optional
You may also use environment variables:
config :stripy,
secret_key: {:system, "STRIPE_SECRET_KEY"},
endpoint: {:system, "STRIPE_ENDPOINT"},
version: {:system, "STRIPE_VERSION"}
Testing
You can disable actual calls to the Stripe API like so:
# Usually in your test.exs.
config :stripy,
testing: true
All functions that use Stripy would receive response {:ok, %{status_code: 200, body: "{}"}}
.
To provide your own responses, you need to configure a mock server:
config :stripy,
testing: true,
mock_server: MyApp.StripeMockServer
Here's an example mock server that mocks the /customer
endpoint and returns a basic
object for a customer with id cus_test
defmodule MyApp.StripeMockServer do
@behaviour Stripy.MockServer
@ok_res %{status_code: 200}
@impl Stripy.MockServer
def request(:get, "customers/cus_test", %{}) do
body = Poison.encode!(%{"email" => "[email protected]"})
{:ok, Map.put(@ok_res, :body, body)}
end
end
Now let's quickly write a naive function that gets user's billing email:
def stripe_email(user) do
{:ok, res} = Stripy.req(:get, "customers/#{user.stripe_id}")
res["email"]
end
We can test it like so:
fake_user = %{stripe_id: "cus_test"}
assert stripe_email(fake_user) == "[email protected]"
Custom headers
You can add custom headers to the request by supplying a fourth parameter:
Stripy.req(:post, "charges", %{amount: 1000}, %{"Idempotency-Key" => "123456"})
License
- Stripy: See LICENSE file.
*Note that all licence references and agreements mentioned in the Stripy README section above
are relevant to that project's source code only.