Libraries
Elixir Libraries
Accepting credit card payments with Elixir
The following example uses PINXS by Hotdoc:
order = Order.create(#...)
card = %Card{
number: "5520000000000000",
expiry_month: "12",
expiry_year: "20",
name: "Rubius Hagrid",
address_line1: "The Game Keepers Cottage",
address_city: "Hogwarts",
address_country: "England",
cvc: "321"
}
charge = %Charge{
email: "hagrid@hogwarts.wiz",
description: "Dragon eggs",
ip_address: "127.0.0.1",
amount: 50000,
card: card
}
with {:ok, created_order} <- Repo.insert(order),
{:ok, created_charge} <- Charge.create(charge),
{:ok, paid_order} <- Order.mark_paid(created_order, created_charge),
{:ok, _email} <- Mailer.send("receipt", created_charge),
{:ok, _email} <- Mailer.send("notify_fulfullment_team", order)
do {:ok, created_order}
else
{:error, %Changeset{} = changeset} ->
# response appropriately to changeset error
{:error, %PinError{error_code: "insufficient_funds"}} ->
Mailer.send("order_failed", charge)
{:error, other} ->
# handle some other error
error ->
Logger.error("Some unknown error: #{IO.inspect(error)}")
end