Bling.Customers (bling v0.4.1)
Module for interacting with Bling customers. Each method expects the first argument to be an ecto struct.
Link to this section Summary
Functions
Returns the stripe customer for the given database customer.
Creates and returns a url to the stripe billing portal.
Creates a setup intent for the given customer. Defaults to off_session usage.
Creates a customer in stripe from the given database customer. If to_stripe_params/1
is present on your Bling module,
the map returned there will be merged with the params passed to stripe.
Creates a subscription in stripe and stores it in the database. Tries to confirm the payment immediately. If the payment requires further authentication or errors, the subscription will be marked as incomplete and you must use the payment intent to confirm the payment on your frontend.
Returns the defauly payment method for a customer, or nil. The payment method returned is a Bling.PaymentMethod struct.
Returns whether the customer is on a generic trial.
Returns whether the customer has a default payment method.
Returns all Stripe.Invoice structs for a customer.
Returns whether or not the customer is subscribed to a plan, and that plan is valid.
Returns whether or not the customer is subscribed to a specific price and the subscription is valid.
Returns whether or not the customer is subscribed to a specific product and the subscription is valid.
Fetches a single subscription for a customer by plan name.
Creates and returns a url to make a new subscription using stripe checkout.
Fetches all subscriptions for a customer.
Returns true if the customer is on a generic trial or if the specified subscription is on a trial.
Updates the customers default payment method with the provided payment_method_id.
Updates the customer's default payment method with the one stored in stripe.
Link to this section Functions
as_stripe_customer(customer)
Returns the stripe customer for the given database customer.
billing_portal_url(customer, opts \\ [])
Creates and returns a url to the stripe billing portal.
examples
Examples
url = billing_portal_url(customer, stripe: %{ return_url: "http://localhost:4000/users/settings" } })
create_setup_intent(customer, opts \\ [])
Creates a setup intent for the given customer. Defaults to off_session usage.
examples
Examples
intent = Bling.Customers.create_setup_intent(current_user)
# Can pass any valid Stripe.SetupIntent.create/1 params.
intent = Bling.Customers.create_setup_intent(current_user, stripe: %{ payment_method_types: ["card"] })
create_stripe_customer(customer, opts \\ [])
Creates a customer in stripe from the given database customer. If to_stripe_params/1
is present on your Bling module,
the map returned there will be merged with the params passed to stripe.
examples
Examples
# Can pass any valid Stripe.customer.create/1 params.
customer = Bling.Customers.create_stripe_customer(current_user, stripe: %{ name: "Jane Doe" })
create_subscription(customer, opts \\ [])
Creates a subscription in stripe and stores it in the database. Tries to confirm the payment immediately. If the payment requires further authentication or errors, the subscription will be marked as incomplete and you must use the payment intent to confirm the payment on your frontend.
https://stripe.com/docs/billing/subscriptions/overview
examples
Examples
result =
create_subscription(
current_user,
return_url: "http://localhost:4000/billing/user/1/finalize", # the route you configured during installation
prices: [{price_id, quantity}],
plan: "default", # can be omitted
stripe: %{ coupon: "coupon_id" }, # any valid Stripe.Subscription.create/1 params
)
case result do
{:ok, subscription} -> # success, db subscription
{:requires_action, payment_intent} -> # payment requires further authentication
{:error, error} -> # Stripe.Error, card could have been declined
end
default_payment_method(customer)
Returns the defauly payment method for a customer, or nil. The payment method returned is a Bling.PaymentMethod struct.
generic_trial?(customer)
Returns whether the customer is on a generic trial.
Checks the trial_ends_at
column on the customer.
has_default_payment_method?(customer)
Returns whether the customer has a default payment method.
invoices(customer, opts \\ [])
Returns all Stripe.Invoice structs for a customer.
examples
Examples
invoices = invoices(current_user)
# Can pass any valid Stripe.Invoice.list/1 params.
invocies = invoices(current_user, stripe: %{ limit: 10 })
subscribed?(customer, opts \\ [])
Returns whether or not the customer is subscribed to a plan, and that plan is valid.
examples
Examples
# checks if the customer is subscribed to the default plan
Bling.Customers.subscribed?(customer)
# checks if the customer is subscribed to a specific plan
Bling.Customers.subscribed?(customer, plan: "pro")
subscribed_to_price?(customer, price, opts \\ [])
Returns whether or not the customer is subscribed to a specific price and the subscription is valid.
examples
Examples
# checks if the customer is subscribed to a price on the default plan
Bling.Customers.subscribed_to_price?(customer, "price_123")
# checks if the customer is subscribed to a price on a specific plan
Bling.Customers.subscribed_to_price?(customer, "price_123", plan: "pro")
subscribed_to_product?(customer, product, opts \\ [])
Returns whether or not the customer is subscribed to a specific product and the subscription is valid.
examples
Examples
# checks if the customer is subscribed to a product on the default plan
Bling.Customers.subscribed_to_product?(customer, "prod_123")
# checks if the customer is subscribed to a product on a specific plan
Bling.Customers.subscribed_to_product?(customer, "prod_123", plan: "pro")
subscription(customer, opts \\ [])
Fetches a single subscription for a customer by plan name.
examples
Examples
# gets subscription with name "default"
subscription = Bling.Customers.subscription(customer)
# gets subscription with specific name
subscription = Bling.Customers.subscription(customer, plan: "pro")
subscription_checkout_url(customer, opts \\ [])
Creates and returns a url to make a new subscription using stripe checkout.
examples
Examples
url = subscription_checkout_url(customer,
plan: "default",
prices: [{price_id, quantity}]
stripe: %{
cancel_url: "http://localhost:4000/users/settings",
success_url: "http://localhost:4000/users/settings"
})
subscriptions(customer)
Fetches all subscriptions for a customer.
trial?(customer, opts \\ [])
Returns true if the customer is on a generic trial or if the specified subscription is on a trial.
examples
Examples
# checks trial_ends_at on customer and "default" subscription plan
Bling.Customers.trial?(customer)
# checks trial_ends_at on customer and "swimming" subscription plan
Bling.Customers.trial?(customer, plan: "swimming")
update_default_payment_method(customer, payment_method_id)
Updates the customers default payment method with the provided payment_method_id.
update_default_payment_method_from_stripe(customer)
Updates the customer's default payment method with the one stored in stripe.