Skip to main content
Cuando llamas paymentForm.init(...), Flex te permite capturar tres funciones callback. La más importante para el resultado del frontend es responseCallback(response).
Toma responseCallback(response) como la entrada principal del resultado en frontend. El JSON que recibes ahí reutiliza la misma estructura del API de Autorización - ecommerce para el método de pago elegido dentro de Flex.

Callbacks disponibles

responseCallback

Se ejecuta cuando el proceso llega a un resultado de negocio y te entrega el JSON de respuesta.

trackingCallback

Se ejecuta por cada evento del flujo, como cambio de método, clics o avance del usuario dentro del formulario.

onErrorCallback

Se ejecuta cuando ocurre un error técnico durante la carga o ejecución del componente.

Ejemplo de implementación

Cómo interpretar responseCallback

El campo response.payment_method te indica qué referencia de PayIn debes usar para interpretar el JSON de respuesta devuelto por Flex.
No uses response.meta.status.code como validador de pago aprobado o denegado. Este código solo indica el resultado del procesamiento del servicio o si la respuesta fue generada correctamente. Para validar el resultado del pago, revisa response.transaction.state y confirma desde backend con Consulta o Notificaciones, según el método de pago.
El objeto response sigue el contrato del API de Autorización con Tarjeta.Si tu flujo usa redirect o autenticación 3DS fuera de la misma pantalla, complementa esta lectura con Consideraciones para métodos con Redirect.
trackingCallback sirve para observabilidad y onErrorCallback para fallos técnicos. Ninguno reemplaza la lógica de negocio que debes construir sobre responseCallback y la confirmación backend.

Ciclo de vida de la instancia

Los ejemplos siguientes usan unmountFlex() del ejemplo responsive. Adapta la limpieza a tu presentación: embebida, popup o expandida.
paymentForm.terminate?.() finaliza los procesos internos, listeners y recursos que mantiene la instancia de Flex. Esta operación es diferente de eliminar el formulario del DOM (flexContainer.innerHTML = "") y aplica a cualquier tipo de presentación.
El operador ?. ejecuta terminate() solo cuando el método existe. Esto evita un error si la versión cargada de Flex no implementa ese método.

Cuándo desmontar según la presentación

En los tres casos, primero procesa cualquier resultado pendiente y luego ejecuta unmountFlex() antes de actualizar la presentación visual.
No modifiques los estilos internos de Flex. Ejecuta unmountFlex() cuando retires el formulario, sin importar si está embebido, dentro de un popup o en una vista expandida.

Pantalla de resultado propia

Cuando configuras settings.display_result_screen: false, Flex no presenta su pantalla final. Tu aplicación debe recibir el response, evaluar el estado de la transacción y mostrar una pantalla de resultado propia.
1

Monta el formulario

paymentForm.init(...) renderiza Flex dentro del contenedor.
2

Recibe el resultado

Flex ejecuta responseCallback(response). Lee el resultado desde response.transaction.state y realiza las validaciones de negocio correspondientes.
3

Muestra tu pantalla

Guarda el response en el estado de tu aplicación y navega o renderiza la pantalla de resultado del comercio.
4

Desmonta Flex

Cuando el resultado ya fue procesado, ejecuta terminate(), limpia el contenedor y actualiza la presentación embebida, popup o expandida.
No ejecutes terminate() antes de recibir y procesar responseCallback(response). Si finalizas la instancia antes, puedes interrumpir el flujo y perder el resultado que Flex todavía no ha entregado.

Limpieza reutilizable

Encapsula la inicialización y el desmontaje en un controlador independiente del framework. Puedes usarlo desde JavaScript puro o conectarlo al ciclo de vida de React, Vue, Angular u otra tecnología.

JavaScript

Ejecuta destroy() antes de retirar el contenedor de la página.

Aplicación SPA

Conecta destroy() al cambio de ruta o al desmontaje de la vista.

Presentación dinámica

Ejecútalo al ocultar el bloque embebido, cerrar el popup o contraer la vista expandida.
container.replaceChildren() vacía el contenido de forma equivalente a container.innerHTML = "", sin depender de un framework específico.
terminate() no devuelve la respuesta del pago. El resultado siempre llega mediante el primer callback de paymentForm.init(...). Revisa Capturar funciones callback para interpretar y confirmar la operación.

Gestionar el cierre con show_close_button

Configura settings.show_close_button: true para mostrar el botón de cierre nativo de Flex. Esta opción funciona en las presentaciones embebida, popup y expandida.
Cuando el comprador pulsa el botón, Flex envía el mensaje cerro el carrito mediante onErrorCallback. Aunque utiliza el callback de error, este mensaje representa una acción voluntaria del comprador y no un fallo técnico.

Mostrar el botón

Activa show_close_button dentro de settings.

Interpretar el evento

Identifica el mensaje exacto cerro el carrito en onErrorCallback.

Cerrar la presentación

Ejecuta onClose() para desmontar Flex y actualizar la interfaz.
Implementa una rama exclusiva para el cierre voluntario y conserva los demás mensajes como errores técnicos:
El flujo de cierre es show_close_buttononErrorCallbackonClose()unmountFlex(). hideFlexPresentation() representa la lógica visual de tu aplicación: retirar el bloque embebido, ocultar el popup o contraer la vista expandida.
Ejecuta onClose() solo cuando el mensaje completo sea cerro el carrito. Cualquier otro valor recibido en onErrorCallback debe continuar por el manejo de errores técnicos.

5. Pruebas y producción

Revisa seguridad, pruebas funcionales y criterios para pasar a producción.