Packages
stripity_stripe
2.0.0
3.3.2
3.3.1
3.2.0
3.1.1
3.1.0
3.0.0
2.17.3
2.17.2
2.17.1
2.17.0
2.16.0
2.15.1
2.15.0
2.14.1
2.14.0
2.13.0
2.12.1
2.12.0
2.11.0
2.10.0
2.9.0
2.8.0
2.7.2
2.7.1
2.7.0
2.6.0
2.5.0
2.4.0
2.3.0
2.2.3
2.2.2
2.2.1
2.2.0
2.1.0
2.0.1
2.0.0
2.0.0-alpha.11
2.0.0-alpha.10
2.0.0-alpha.9
2.0.0-alpha.8
2.0.0-alpha.7
2.0.0-alpha.6
2.0.0-alpha.5
2.0.0-alpha.4
2.0.0-alpha.3
2.0.0-alpha.2
2.0.0-alpha.1
1.6.2
1.6.1
1.6.0
1.4.0
1.3.0
1.2.0
1.1.0
0.5.0
0.4.0
0.3.0
0.2.0
A Stripe client for Elixir.
Current section
Files
Jump to
Current section
Files
lib/stripe/core_resources/customer.ex
defmodule Stripe.Customer do
@moduledoc """
Work with Stripe customer objects.
You can:
- Create a customer
- Retrieve a customer
- Update a customer
- Delete a customer
Stripe API reference: https://stripe.com/docs/api#customer
"""
use Stripe.Entity
import Stripe.Request
@type t :: %__MODULE__{
id: Stripe.id(),
object: String.t(),
account_balance: integer,
business_vat_id: String.t(),
created: Stripe.timestamp(),
currency: String.t() | nil,
default_source: Stripe.id() | Stripe.Source.t() | nil,
delinquent: boolean | nil,
description: String.t() | nil,
discount: Stripe.Discount.t() | nil,
email: String.t() | nil,
invoice_prefix: String.t() | nil,
livemode: boolean,
metadata: Stripe.Types.metadata(),
shipping: Stripe.Types.shipping() | nil,
sources: Stripe.List.t(Stripe.Source.t()),
subscriptions: Stripe.List.t(Stripe.Subscription.t())
}
defstruct [
:id,
:object,
:account_balance,
:business_vat_id,
:created,
:currency,
:default_source,
:delinquent,
:description,
:discount,
:email,
:invoice_prefix,
:livemode,
:metadata,
:shipping,
:sources,
:subscriptions
]
@plural_endpoint "customers"
@doc """
Create a customer.
"""
@spec create(params, Stripe.options()) :: {:ok, t} | {:error, Stripe.Error.t()}
when params: %{
optional(:account_balance) => integer,
optional(:business_vat_id) => String.t(),
optional(:coupon) => Stripe.id() | Stripe.Coupon.t(),
optional(:default_source) => Stripe.id() | Stripe.Source.t(),
optional(:description) => String.t(),
optional(:email) => String.t(),
optional(:invoice_prefix) => String.t(),
optional(:metadata) => Stripe.Types.metadata(),
optional(:shipping) => Stripe.Types.shipping(),
optional(:source) => Stripe.Source.t()
} | %{}
def create(params, opts \\ []) do
new_request(opts)
|> put_endpoint(@plural_endpoint)
|> put_params(params)
|> put_method(:post)
|> cast_to_id([:coupon, :default_source, :source])
|> make_request()
end
@doc """
Retrieve a customer.
"""
@spec retrieve(Stripe.id() | t, Stripe.options()) :: {:ok, t} | {:error, Stripe.Error.t()}
def retrieve(id, opts \\ []) do
new_request(opts)
|> put_endpoint(@plural_endpoint <> "/#{get_id!(id)}")
|> put_method(:get)
|> make_request()
end
@doc """
Update a customer.
"""
@spec update(Stripe.id() | t, params, Stripe.options()) :: {:ok, t} | {:error, Stripe.Error.t()}
when params: %{
optional(:account_balance) => integer,
optional(:business_vat_id) => String.t(),
optional(:coupon) => Stripe.id() | Stripe.Coupon.t(),
optional(:default_source) => Stripe.id() | Stripe.Source.t(),
optional(:description) => String.t(),
optional(:email) => String.t(),
optional(:invoice_prefix) => String.t(),
optional(:metadata) => Stripe.Types.metadata(),
optional(:shipping) => Stripe.Types.shipping(),
optional(:source) => Stripe.Source.t()
} | %{}
def update(id, params, opts \\ []) do
new_request(opts)
|> put_endpoint(@plural_endpoint <> "/#{get_id!(id)}")
|> put_method(:post)
|> put_params(params)
|> make_request()
end
@doc """
Delete a customer.
"""
@spec delete(Stripe.id() | t, Stripe.options()) :: {:ok, t} | {:error, Stripe.Error.t()}
def delete(id, opts \\ []) do
new_request(opts)
|> put_endpoint(@plural_endpoint <> "/#{get_id!(id)}")
|> put_method(:delete)
|> make_request()
end
@doc """
List all customers.
"""
@spec list(params, Stripe.options()) :: {:ok, Stripe.List.t(t)} | {:error, Stripe.Error.t()}
when params: %{
optional(:created) => String.t() | Stripe.date_query(),
optional(:email) => String.t(),
optional(:ending_before) => t | Stripe.id(),
optional(:limit) => 1..100,
optional(:starting_after) => t | Stripe.id()
} | %{}
def list(params \\ %{}, opts \\ []) do
new_request(opts)
|> put_endpoint(@plural_endpoint)
|> put_method(:get)
|> put_params(params)
|> cast_to_id([:ending_before, :starting_after])
|> make_request()
end
@doc """
Deletes the discount on a customer
"""
@spec delete_discount(Stripe.id() | t, Stripe.options()) ::
{:ok, t} | {:error, Stripe.Error.t()}
def delete_discount(id, opts \\ []) do
new_request(opts)
|> put_endpoint(@plural_endpoint <> "/#{get_id!(id)}/discount")
|> put_method(:delete)
|> make_request()
end
end