Save bank details during a Bancontact payment
Caution
We recommend that you follow the Save payment details during payment guide. If you’ve already integrated with Elements, see the Payment Element migration guide.
Bancontact is a popular single use payment method in Belgium where customers are required to authenticate their payment. Customers pay with Bancontact by redirecting from your website, authorizing the payment, then returning to your website where you get immediate notification on whether the payment succeeded or failed.
You can use Bancontact to save your customer’s IBAN bank details into a SEPA Direct Debit PaymentMethod. You can then use the SEPA Direct Debit PaymentMethod to accept payments or set up a subscription. This reduces friction for your customer as they don’t have to enter their IBAN again. You also receive their verified name and validated IBAN.
Caution
To use Bancontact to set up SEPA Direct Debit payments, you must activate SEPA Direct Debit in the Dashboard. You must also comply with the Bancontact Terms of Service and SEPA Direct Debit Terms of Service.
Accepting Bancontact payments consists of creating a PaymentIntent object to track a payment, collecting payment method details and mandate acknowledgement, and submitting the payment to Stripe for processing. Stripe uses the PaymentIntent to track and handle all the states of the payment until the payment completes. Use the ID of the SEPA Direct Debit PaymentMethod collected from your initial Bancontact PaymentIntent to create future payments.
Set up StripeServer-side
First, you need a Stripe account. Register now.
Use our official libraries for access to the Stripe API from your application:
Create a CustomerServer-side
Create a Customer when they create an account with your business and associate it with your internal representation of their account. This enables you to retrieve and use their saved payment method details later.
Create a PaymentIntentServer-side
Create a PaymentIntent
on your server and specify the amount
to collect, the eur
currency, the customer ID, and off_session as an argument for setup future usage. If you have an existing Payment Intents integration, add bancontact
to the list of payment method types.
The PaymentIntent includes the payment method ID and a client secret, which is used on the client side to securely complete the payment process instead of passing the entire PaymentIntent object.
Collect payment method details and mandate acknowledgementClient-side
Create a payment form on your client to collect the required billing details from the customer.
Submit the payment to StripeClient-side
Create a payment on the client side with the client secret of the PaymentIntent. The client secret is different from your API keys that authenticate Stripe API requests. It should be handled carefully because it can complete the charge. Do not log it, embed it in URLs, or expose it to anyone but the customer.
The return_url
should correspond to a page on your website that provides the status of the payment, by verifying the status of the PaymentIntent
when rendering the return page. When Stripe redirects the customer to the return_url
, the following URL query parameters are provided to verify the status. You may also append your own query parameters to the return_url
. They persist throughout the redirect process.
Parameter | Description |
---|---|
payment_intent | The unique identifier for the PaymentIntent |
payment_intent_client_secret | The client secret of the PaymentIntent object |
Charge the SEPA Direct Debit PaymentMethod later
When you need to charge your customer again, create a new PaymentIntent. Find the ID of the SEPA Direct Debit payment method by retrieving the previous PaymentIntent and expanding the latest_charge
field where you will find the generated_sepa_debit
ID inside of payment_method_details
.
The SEPA Direct Debit payment method ID is the generated_sepa_debit
ID under payment_method_details in the response.
{ "latest_charge": { "payment_method_details": { "bancontact": { "bank_code": "VAPE", "bank_name": "VAN DE PUT & CO", "bics": "VAPEBE22", "iban_last4": "7061", "generated_sepa_debit": "pm_1GrddXGf98efjktuBIi3ag7aJQ", "preferred_language": "en", "verified_name": "Jenny Rosen" }, "type": "bancontact" }, }, "payment_method_options": { "bancontact": {}
Create a PaymentIntent with the SEPA Direct Debit and Customer IDs.