PhoenixKit.Modules.Billing.PaymentMethod (phoenix_kit v1.7.38)

Copy Markdown View Source

Schema for saved payment methods (cards, bank accounts, wallets).

Payment methods are saved via provider setup sessions and can be used for recurring payments without requiring user interaction.

Provider Integration

Each provider stores payment method tokens:

  • Stripe: pm_* payment method IDs + cus_* customer IDs
  • PayPal: Billing agreement IDs
  • Razorpay: Token IDs + customer IDs

Security

  • No raw card data is ever stored
  • Only tokenized references from providers
  • Tokens are provider-specific and non-transferable

Lifecycle

  • Created via setup session (hosted checkout for saving card)
  • Can be set as default for user
  • Can be used for subscription renewals
  • Can be removed (deletes token from provider)
  • Automatically marked expired based on exp_month/exp_year

Summary

Functions

Returns the icon class for the card brand (for UI display).

Creates a changeset for a payment method.

Returns a display string for the payment method (e.g., "Visa ** 4242").

Returns expiration string (e.g., "12/25").

Changeset for marking as expired.

Returns true if the card has expired based on exp_month/exp_year.

Changeset for marking as removed.

Changeset for setting as default payment method.

Returns true if the payment method is usable for charges.

Functions

brand_icon(payment_method)

Returns the icon class for the card brand (for UI display).

changeset(payment_method, attrs)

Creates a changeset for a payment method.

display_name(payment_method)

Returns a display string for the payment method (e.g., "Visa ** 4242").

expiration_string(payment_method)

Returns expiration string (e.g., "12/25").

expire_changeset(payment_method)

Changeset for marking as expired.

expired?(payment_method)

Returns true if the card has expired based on exp_month/exp_year.

remove_changeset(payment_method)

Changeset for marking as removed.

set_default_changeset(payment_method)

Changeset for setting as default payment method.

usable?(pm)

Returns true if the payment method is usable for charges.