Set up a subscription with SEPA Direct Debit
Learn how to create and charge a subscription with SEPA Direct Debit.
A Checkout Session represents the details of your customer’s intent to purchase. You create a Checkout Session when your customer wants to start a subscription. After redirecting your customer to a Checkout Session, Stripe presents a payment form where your customer can complete their purchase. Once your customer has completed a purchase, they will be redirected back to your site.
Set up StripeServer-side
Install the Stripe client of your choice:
Install the Stripe CLI (optional). The CLI provides webhook testing, and you can run it to create your products and prices.
For additional install options, see Get started with the Stripe CLI.
Create the pricing modelDashboardStripe CLI
Create your products and their prices in the Dashboard or with the Stripe CLI.
This example uses a fixed-price service with two different service-level options: Basic and Premium. For each service-level option, you need to create a product and a recurring price. (If you want to add a one-time charge for something like a setup fee, create a third product with a one-time price. To keep things simple, this example doesn’t include a one-time charge.)
In this example, each product bills at monthly intervals. The price for the Basic product is 5 EUR. The price for the Premium product is 15 EUR.
For other pricing models, see Billing examples.
Create a Checkout SessionClient-sideServer-side
Add a checkout button to your website that calls a server-side endpoint to create a Checkout Session.
<html> <head> <title>Checkout</title> </head> <body> <form action="/create-checkout-session" method="POST"> <button type="submit">Checkout</button> </form> </body> </html>
Create a Checkout Session with the ID of an existing Price. Ensure that mode is set to subscription
and you pass at least one recurring price. You can add one-time prices in addition to recurring prices. After creating the Checkout Session, redirect your customer to the URL returned in the response.
When your customer successfully completes their payment, they’re redirected to the success_
, a page on your website that informs the customer that their payment was successful. Make the Session ID available on your success page by including the {CHECKOUT_
template variable in the success_
as in the above example.
When your customer clicks on your logo in a Checkout Session without completing a payment, Checkout redirects them back to your website by navigating to the cancel_
. Typically, this is the page on your website that the customer viewed prior to redirecting to Checkout.
Checkout Sessions expire 24 hours after creation by default.
From your Dashboard, enable the payment methods you want to accept from your customers. Checkout supports several payment methods.
Caution
Don’t rely on the redirect to the success_
alone for detecting payment initiation, as:
- Malicious users could directly access the
success_
without paying and gain access to your goods or services.url - Customers may not always reach the
success_
after a successful payment—they might close their browser tab before the redirect occurs.url
Confirm the payment is successful
When your customer completes a payment, Stripe redirects them to the URL that you specified in the success_
parameter. Typically, this is a page on your website that informs your customer that their payment was successful.
However, SEPA Direct Debit is a delayed notification payment method, which means that funds aren’t immediately available. Because of this, delay order fulfillment until the funds are available. After the payment succeeds, the underlying PaymentIntent status changes from processing
to succeeded
.
You can confirm the payment is successful in several ways:
Test the integration
You can test your integration using the IBANs below. The payment method details are successfully collected for each IBAN but exhibit different behavior when charged.
Test IBANs
OptionalAdding a one-time setup feeServer-side
In addition to passing recurring prices, you can add one-time prices in subscription
mode. These are only included on the initial invoice created by the subscription. This is useful for adding setup fees or other one-time fees associated with a subscription. You can add a one-time price to an existing product or create a new product with a new price.
OptionalCreate prices and products inlineServer-side
In addition to passing existing price IDs, you can create new prices at Checkout session creation. First, define a Product and then create a Checkout Session using the product ID. Make sure to pass price_data with the unit_
, currency
, and recurring
details:
If you also need to create products inline, you can do so with product_data:
OptionalExisting customersServer-side
If you have previously created a Customer object to represent a customer, use the customer argument to pass their Customer ID when creating a Checkout Session. This ensures that all objects created during the Session are associated with the correct Customer object.
When you pass a Customer ID, Stripe also uses the email stored on the Customer object to prefill the email field on the Checkout page. If the customer changes their email on the Checkout page, it will be updated on the Customer object after a successful payment.
OptionalPrefill customer dataServer-side
If you’ve already collected your customer’s email and want to prefill it in the Checkout Session for them, pass customer_email when creating a Checkout Session.
OptionalHandling trialsServer-side
You can use trial_end or trial_period_days on the Checkout session to specify the duration of the trial period. In this example we use trial_
to create a Checkout session for a subscription with a 30 days trial.
Checkout displays the following information automatically for subscriptions with trials:
- Trial period
- Frequency and amount of charges after trial expiration
For more information on compliance requirements, visit the Billing or support guide.
OptionalTax ratesServer-side
You can specify tax rates (Sales, VAT, GST, and others) in Checkout Sessions to apply taxes to subscriptions.
- Use fixed tax rates when you know the exact tax rate to charge your customers before they start the checkout process (for example, you only sell to customers in the UK and always charge 20% VAT).
- With the Prices API, you can use dynamic tax rates when you require more information from your customer (for example, their billing or shipping address) before determining the tax rate to charge. With dynamic tax rates, you create tax rates for different regions (for example, a 20% VAT tax rate for customers in the UK and a 7.25% sales tax rate for customers in California, US) and Stripe attempts to match your customer’s location to one of those tax rates.
You can use Stripe’s data exports to populate the periodic reports required for remittance. Visit Tax reporting and remittance for more information.
OptionalAdding couponsServer-side
You can apply coupons to subscriptions in a Checkout Session by setting discounts. This coupon overrides any coupon on the customer. If you’re creating a subscription with an existing customer, any coupon associated with the customer is applied to the subscription’s invoices.
Adding customer-facing promotion codes
You can also enable user-redeemable Promotion Codes using the allow_promotion_codes parameter in Checkout Sessions. When allow_
is enabled on a Checkout Session, Checkout includes a promotion code redemption box for your customers to use. Create your coupons and promotion codes through the Dashboard or API in order for your customers to redeem them in Checkout.