Accept a Bancontact payment
Learn how to accept Bancontact, a common payment method in Belgium.
Caution
We recommend that you follow the Accept a payment guide unless you need to use manual server-side confirmation, or your integration requires presenting payment methods separately. If you’ve already integrated with Elements, see the Payment Element migration guide.
Bancontact is a single use payment method where customers are required to authenticate their payment. Customers pay with Bancontact by redirecting from your app, authenticating the payment, then returning to your app where you get immediate notification on whether the payment succeeded or failed.
Note
Your use of Bancontact must be in accordance with the Bancontact Terms of Service.
Set up StripeServer-sideClient-side
First, you need a Stripe account. Register now.
Server-side 
This integration requires endpoints on your server that talk to the Stripe API. Use the official libraries for access to the Stripe API from your server:
Client-side 
The Stripe iOS SDK is open source, fully documented, and compatible with apps supporting iOS 13 or above.
Note
For details on the latest SDK release and past versions, see the Releases page on GitHub. To receive notifications when a new release is published, watch releases for the repository.
Configure the SDK with your Stripe publishable key on app start. This enables your app to make requests to the Stripe API.
Create a PaymentIntentServer-sideClient-side
A PaymentIntent is an object that represents your intent to collect payment from a customer and tracks the lifecycle of the payment process through each stage.
Server-side 
Create a PaymentIntent
on your server and specify the amount to collect and the eur
currency (Bancontact does not support other currencies). If you have an existing Payment Intents integration, add bancontact
to the list of payment method types.
The default language of the Bancontact authorization page is English (en
). You can match the preferred language of your customer by setting preferred_
to fr
, nl
, or de
.
Client-side 
On the client, request a PaymentIntent from your server and store its client secret.
Collect payment method detailsClient-side
In your app, collect the required billing details (first and last name) from the customer. Create a STPPaymentIntentParams with the billing details.
Submit the payment to StripeClient-side
Retrieve the client secret from the PaymentIntent you created in step 2 and call STPPaymentHandler confirmPayment. This presents a webview where the customer can complete the payment. Upon completion, the completion block is called with the result of the payment.