Skip to content

Latest commit

 

History

History
76 lines (51 loc) · 2.83 KB

1_overview.md

File metadata and controls

76 lines (51 loc) · 2.83 KB

Using Pay with Stripe

Stripe has multiple options for payments

Prices & Plans

Stripe introduced Products & Prices to support more payment options. Previously, they had a concept called Plan that was for subscriptions. Pay supports both Price IDs and Plan IDs when subscribing.

@user.payment_processor.subscribe(plan: "price_1234")
@user.payment_processor.subscribe(plan: "plan_1234")

Multiple subscription items in a single subscription can be passed in as items:

@user.payment_processor.subscribe(
  items: [
    {price: "price_1234"},
    {price: "price_5678"}
  ]
)

See: https://stripe.com/docs/api/subscriptions/create

Promotion Codes

Promotion codes are customer-facing coupon codes that can be applied in several ways.

You can apply a promotion code on the Stripe::Customer to have it automatically apply to all Subscriptions.

@user.payment_processor.update_customer!(promotion_code: "promo_1234")

Promotion codes can also be applied directly to a subscription:

@user.payment_processor.subscribe(plan: "plan_1234", promotion_code: "promo_1234")

Stripe Checkout can also accept promotion codes by enabling the flag:

@checkout_session = current_user.payment_processor.checkout(
  mode: "payment",
  line_items: "price_1ILVZaKXBGcbgpbZQ26kgXWG",
  allow_promotion_codes: true
)

Failed Payments

Subscriptions that fail payments will be set to past_due status.

If all attempts are exhausted, Stripe will either leave the subscription as past_due, canceled, or set it as unpaid depending on the settings in your Stripe account.

We recommend marking subscriptions as unpaid. Pay treats this subscription as inactive. You can display it and allow the user to pay their outstanding invoice in order to resume their subscription.

For metered billing, this is helpful since invoices aren't issued until the customer has used your product. If you allow them to resubscribe without paying the outstanding invoice, they could use your product for free. You should force them to pay the outstanding invoice instead of allowing them to start a new subscription.

For standard billing, the user pre-pays for a month. They can resume the unpaid subscription or start a new subscription without over/under charging them.

Stripe Terminal

Collecting in-person payments with Stripe Terminal is also easy with Pay. You can use the terminal_charge method to create a charge with the card_present payment method type and manual capture to be used with Terminal.

payment_intent = current_user.payment_processor.terminal_charge(10_00)

Next

See Credentials