Accept an iDEAL payment
Learn how to accept iDEAL, a common payment method in the Netherlands.
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.
Accepting iDEAL in your app consists of displaying a webview that sends your customer to their bank’s online portal to authorise the payment. Your customer then returns to your app and you’re immediately notified about whether the payment succeeded or failed.
Note
To accept iDEAL, you must comply with our iDEAL 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
First, create a PaymentIntent
on your server and specify the amount to collect and the eur
currency (iDEAL doesn’t support other currencies). iDEAL doesn’t have a minimum charge amount, so the payment amount
value can be as low as 1. If you already have an integration using the Payment Intents API, add ideal
to the list of payment method types for your PaymentIntent
.
Instead of passing the entire PaymentIntent object to your app, you only need to return its client secret. The PaymentIntent’s client secret is a unique key that lets you confirm the payment and update payment details on the client, without allowing manipulation of sensitive information, like payment amount.
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 your customer’s full name. Create an STPPaymentIntentParams object with this detail.
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 on their bank’s website or app, which calls the completion block with the result of the payment.
Test your integration
Use your test API keys to confirm the PaymentIntent. After confirming, you’re redirected to a test page with options to authorise or fail the payment.
- Click Authorize test payment to test the case when the payment is successful. The PaymentIntent transitions from
requires_
toaction succeeded
. - Click Fail test payment to test the case when the customer fails to authenticate. The PaymentIntent transitions from
requires_
toaction requires_
.payment_ method
Bank reference
Bank name | Value |
---|---|
ABN AMRO | abn_ |
ASN Bank | asn_ |
Bunq | bunq |
ING | ing |
Knab | knab |
N26 | n26 |
Nationale-Nederlanden | nn |
Rabobank | rabobank |
Revolut | revolut |
RegioBank | regiobank |
SNS Bank (De Volksbank) | sns_ |
Triodos Bank | triodos_ |
Van Lanschot | van_ |
Yoursafe | yoursafe |