Packages
stripity_stripe
2.2.2
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,
created: Stripe.timestamp(),
currency: String.t() | nil,
default_source: Stripe.id() | Stripe.Source.t() | nil,
deleted: boolean | 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()),
tax_info: Stripe.Types.tax_info() | nil,
tax_info_verification: Stripe.Types.tax_info_verification() | nil
}
defstruct [
:id,
:object,
:account_balance,
:created,
:currency,
:default_source,
:deleted,
:delinquent,
:description,
:discount,
:email,
:invoice_prefix,
:livemode,
:metadata,
:shipping,
:sources,
:subscriptions,
:tax_info,
:tax_info_verification
]
@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(: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(),
optional(:tax_info) => Stripe.Types.tax_info()
}
| %{}
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(: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(),
optional(:tax_info) => Stripe.Types.tax_info()
}
| %{}
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)
|> prefix_expansions()
|> 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