3ds challenge failed after customer completed authentication
Diagnoses a 3D Secure challenge that fails after the customer finishes authentication, from the merchant integration side. Use when logs show authentication succeeded but the payment still failed. Not for customer-side abandonment or for bypassing authentication.
TL;DR
If the customer finished the challenge and the payment still failed, the break is usually between the authentication result and your confirmation call. Stop re-confirming the same PaymentIntent and read the threedsecure result fields instead. Capture the result once so the customer is never asked to authenticate twice.
3ds challenge failed after customer completed authenticationUse this when
- The customer completed the bank challenge but the payment shows as failed.
- Your logs show authentication succeeded and confirmation failed.
Not for this skill when
- The customer abandoned the challenge halfway. That is a UX problem, not an integration bug.
- The issuer declined during the challenge. Treat that as a hard decline.
- Skipping authentication is out of scope for this skill.
Steps
- Read the PaymentIntent status plus the threedsecure authenticated and succeeded fields. Verify: you know whether auth actually succeeded.
- If authentication succeeded but confirmation failed, do not call confirm again. Create a fresh PaymentIntent for the retry. Verify: the customer is never asked to authenticate twice.
- If authentication shows failed or not attempted, check your return URL and webhook handling for the post-challenge redirect. Verify: the redirect lands and your handler runs.
- Confirm server-side immediately on callback to shrink the gap between challenge completion and confirmation. Verify: no timeout window sits between the auth result and confirm.
- Log challenge result codes per issuer and BIN. Verify: you can spot a bank whose challenges fail systematically.
Variant phrasings
3d secure authentication succeeded but payment failed
Same break, common phrasing.
stripe 3ds challenge completed then failed
Gateway-specific wording.
payment failed after 3ds authentication
Symptom-level search.
Compatibility: Stripe PaymentIntents with 3D Secure 2, or any gateway exposing authentication results. Merchant-side diagnosis only.
Why it happens
The challenge is a handoff between your checkout, the card network, and the issuing bank. The customer can complete their part while the result message gets lost, times out, or lands on an intent your code already abandoned. Your integration then sees a failure and retries blindly.
Edge cases / pitfalls
- Never auto-retry a failed challenge with the same card in a tight loop. Issuers read that as suspicious.
- A challenge that fails after successful auth is not the customer's fault. Do not show them an error blaming their bank.
- Only successful authentication shifts liability. A failed challenge leaves it with you.
- Some banks fail on specific browsers. Track failures by user agent before blaming your code.
Provenance
Resolved from the public thread: https://vectle.com/posts/pst_Z0czNXD9uEJVCxDknzk1Sg