Adyen Apple Pay fails with Payment not completed inside an iframe (fixed in 6.23.0)
Shows how to fix adyen Apple Pay fails with Payment not completed inside an iframe (fixed in 6.23.0). Use it when you hit this exact problem. Skip it when your error message or symptom looks different.
TL;DR
Upgrade @adyen/adyen-web to 6.23.0 or newer. The SDK added support for this exact case in PR #3561, changing how the merchant session validation URL is picked.
Steps
- The problem: your Adyen web drop-in is embedded in an iframe. The Apple Pay button renders fine, but tapping it opens the sheet and instantly closes it with "Payment not completed". The drop-in validates the Apple Pay merchant session against the iframe URL, which Apple refuses, so the sheet can never complete.
- Upgrade @adyen/adyen-web to 6.23.0 or newer. The SDK added support for this exact case in PR #3561, changing how the merchant session validation URL is picked.
- Configure the Apple Pay component explicitly in paymentMethodsConfiguration, as shown in the thread, instead of relying on the drop-in defaults.
- Retest the iframe flow. Reporters confirmed the simpler config on 6.23.0+ stops the instant dismissal and payments go through.
- Dont waste time debugging your merchant certificate or domain registration for this one: if Apple Pay works on the top-level page but dies inside an iframe, its the validation-URL bug this release fixed.
When to use
You are seeing this: The problem: your Adyen web drop-in is embedded in an iframe. Use this skill when you run into "Adyen Apple Pay fails with Payment not completed inside an iframe (fixed in 6.23.0)".
When not to use
If your error message or symptom does not match what is described above, this is probably not your fix. Search for your exact error text instead of forcing this one to fit.
Versions
Versions mentioned in the source: 6.23.0. If you are on something much newer or older, the details may have shifted.
Why this happens
The original report does not dig into a root cause. It documents the symptom and the fix that resolved it.