- Muestra el QR para cada (asset, red) del intent.
- Renderiza un selector de moneda / red cuando hay varias opciones.
- Polea el estado vía el callback
checkStatusque tú provees. - Llama a
onSuccess/onError/onExpiresegún el resultado.
checkStatus, que típicamente proxea a un endpoint en tu backend que sí tiene la clave secreta.
Signature
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
target | string | HTMLElement | id del elemento DOM o nodo directo. Pasa ref.current desde React. |
options.intent | PaymentIntent | El envelope que devolvió tu backend tras crear el intent. |
options.checkStatus | () => Promise<StatusInfo> | Callback que el widget invoca para refrescar estado. Tu implementación debe pegarle a tu backend y devolver el resultado normalizado con normalizeIntent. |
options.onSuccess | (info: StatusInfo) => void | Disparado cuando el estado pasa a completed. |
options.onError | (info: StatusInfo) => void | Disparado en estados de fallo del intent. |
options.onExpire | () => void | Disparado cuando el polling supera timeoutMs o cuando el intent expira. |
options.theme | "light" | "dark" | Tema visual. Default: "light". |
options.pollIntervalMs | number | Intervalo entre polls (ms). Default razonable. |
options.timeoutMs | number | Tiempo máximo de polling antes de disparar onExpire. Default: 15 minutos. |
Valor de retorno
Ejemplo
React / Vue
Errores comunes
- El widget queda en blanco. Verifica que importaste
@zopay/js/styles.cssuna vez en tu bundle. - El
checkStatusrecibe un shape distinto del esperado. Pasa siempre la respuesta anormalizeIntentantes de devolverla — el widget consumeStatusInfo, no el envelope crudo de la API. - El polling sigue después de desmontar el componente. Olvidaste llamar a
handle.destroy()en el cleanup de tu efecto.