Overview
3D Secure is handled automatically insideconfirmPayment, with no separate call. If the customer’s bank requires a challenge, the SDK shows it in-page and resumes when they finish. Frictionless authentications need no UI at all.
When a challenge is required, the customer sees their bank’s authentication screen (OTP, biometric, etc.) inside a secure iframe. You choose where it appears.
Rendering in your own container
Put a container in your checkout (only needed if you do not want the default modal), then pass it tothreeDS.container and drive your UI from onStatusChange. That is why the callback matters: it is how you show a spinner during authentication and hide it when the challenge appears.
Lifecycle status
onStatusChange reports the payment’s progress:
There are two paths through the lifecycle:
- Frictionless:
submitting->authenticating-> terminal. Norequires_action, the customer sees nothing. - Challenge:
submitting->requires_action->authenticating-> terminal. The customer completes the OTP in between.
Challenge window size
The EMVCo challenge window dimensions, passed toconfirmPayment as acsWindowSize. This only applies to the challenge path and is ignored when the authentication is frictionless.