Cómo mostrar un checkout de pagos QR en React
Cómo renderizar el checkout de TAYPI en una app React usando Checkout.js y manejar el estado del pago.
Cómo renderizar el checkout de TAYPI en una app React usando Checkout.js y manejar el estado del pago.
Incorporar pagos con código QR en tu aplicación React es más sencillo de lo que imaginas. Con herramientas como Checkout.js, puedes renderizar un checkout pagos QR React de forma rápida y segura, permitiendo que tus clientes paguen con Yape, Plin y cualquier billetera interoperable sin salir de tu plataforma. En esta guía te explicamos cómo integrar el checkout de una pasarela peruana en tu frontend React y manejar el estado del pago en tiempo real.
Los pagos con QR interoperable están transformando el e-commerce y el comercio digital en Perú. Para los desarrolladores frontend, ofrecer un flujo de pago que no requiera redirigir a páginas externas ni depender de capturas de pantalla es una ventaja enorme.
Con un checkout pagos QR React, obtienes:
Al eliminar las “capturas falsas” y las confirmaciones tardías, el checkout QR mejora la conversión y reduce la fricción. Si ya tienes un backend en Node.js, PHP o .NET, integrar un checkout de pagos QR en React te permite ofrecer un flujo de pago moderno que cumple con la regulación peruana de prevención de lavado de activos (PLAFT) y está respaldado por la infraestructura supervisada por la SBS.
Aprende qué son los pagos QR interoperables y por qué están cambiando el comercio peruano.
Antes de escribir código, conviene entender el recorrido completo de un cobro con QR. La integración se divide en tres partes:
checkout_url y la imagen del QR dinámico, que expira en 15 minutos.checkout_url si prefieres un enfoque más simple.Este flujo aprovecha la idempotencia de la API, evitando cobros duplicados, y utiliza firmas HMAC-SHA256 para garantizar la integridad de cada solicitud. La pasarela no procesa tarjetas, solo billeteras, por lo que cada transacción es definitiva y no genera contracargos.
Profundiza en la seguridad de los pagos digitales y qué debe cumplir tu comercio.
Checkout.js es un script ligero que encapsula toda la lógica del frontend de pago: genera el QR dinámico, muestra instrucciones para el usuario y actualiza el estado automáticamente. En React, puedes integrarlo en un componente funcional con useEffect y un ref.
Aquí tienes un esquema típico de integración (el código exacto debes consultarlo en la documentación de tu pasarela, pero el patrón es similar):
import { useEffect, useRef } from 'react';
const QrCheckout = ({ paymentId, token, containerId }) => {
const containerRef = useRef(null);
useEffect(() => {
// Cargar el script de Checkout.js dinámicamente
const script = document.createElement('script');
script.src = 'https://cdn.taypi.pe/checkout.js'; // ejemplo de ruta
script.async = true;
script.onload = () => {
// Inicializar el checkout en el contenedor
if (window.Checkout) {
window.Checkout.render({
container: `#${containerId}`,
payment_id: paymentId,
token: token,
// opciones adicionales: idioma, tema, etc.
});
}
};
document.body.appendChild(script);
return () => {
document.body.removeChild(script);
};
}, [paymentId, token, containerId]);
return <div id={containerId} ref={containerRef} />;
};
Algunos puntos importantes:
paymentId y el token los obtienes desde tu backend después de crear el cobro.Si prefieres no usar un script externo, puedes redirigir al checkout_url que devuelve la API. Sin embargo, Checkout.js te da una experiencia más integrada, sin sacar al usuario de tu app React.
Una vez que el cliente escanea y paga, el estado del cobro debe reflejarse en tu interfaz. La pasarela notifica a tu backend mediante un webhook en tiempo real con la confirmación bancaria. Tu trabajo como desarrollador frontend es mostrar ese resultado.
El enfoque recomendado es:
GET /api/payments/:id). Este endpoint devuelve si el pago está pendiente, confirmado o expirado.Recuerda que el QR dinámico expira a los 15 minutos. Si el usuario no ha pagado en ese lapso, debes mostrar un mensaje de vencimiento y ofrecer la opción de generar un nuevo cobro. Con Checkout.js, la expiración se maneja automáticamente; si construyes tu propia UI, deberás controlar ese temporizador en tu componente React.
Descubre cómo funcionan los webhooks de pago en tiempo real y cómo integrarlos.
| Característica | Checkout.js (embebido) | Redirección al checkout_url |
|---|---|---|
| Experiencia de usuario | Se mantiene dentro de tu app React | El usuario sale de tu dominio |
| Personalización visual | Limitada al tema del script | Puede ser más genérica |
| Tiempo de implementación | Mínimo, casi plug & play | Aún más rápido, solo un enlace |
| Control del flujo post-pago | Depende de eventos del script y polling | Depende de webhooks y URL de retorno |
| Ideal para | Aplicaciones SPA que quieren retener al usuario | Sitios web con menos énfasis en UX nativa |
Si tu prioridad es una integración rápida y profesional sin construir todo el frontend desde cero, Checkout.js es la opción más eficiente. Te permite añadir un checkout pagos QR React con pocas líneas de código y con el respaldo de la seguridad de la pasarela.
Independientemente de si usas Checkout.js o una implementación personalizada, sigue estas recomendaciones:
Conoce la importancia de la idempotencia en APIs de pago y cómo implementarla.
Checkout.js es una biblioteca JavaScript que te permite embeber el flujo de pago con QR directamente en tu sitio o aplicación web. Recibe un identificador de cobro y un token desde tu backend, y renderiza automáticamente el código QR dinámico junto con las instrucciones para el usuario. Se encarga además de mostrar el estado del pago y manejar la expiración del QR.
Checkout.js ofrece opciones básicas de personalización (como colores y logotipo) según la configuración de tu comercio en la plataforma de la pasarela. Si necesitas un control total del diseño, puedes usar la imagen del QR que devuelve la API y construir tu propia interfaz en React, aunque eso implica programar también la lógica de expiración y el polling del estado.
Si usas Checkout.js, el temporizador y la invalidación del QR se gestionan automáticamente. Si optas por una UI personalizada, debes guardar la fecha de creación del cobro y restarle la fecha actual en intervalos de 1 segundo usando setInterval. Cuando el tiempo restante llegue a cero, deshabilitas el escaneo y muestras un aviso al usuario.
Sí, siempre que sigas las prácticas recomendadas. La seguridad no depende de React sino de cómo gestionas las claves, la creación de cobros desde el backend y la verificación de las notificaciones de pago. La pasarela utiliza cifrado TLS 1.3, firmas HMAC-SHA256 y QR de un solo uso, además de cumplir con la normativa PLAFT y operar sobre la infraestructura supervisada por la SBS.
La confirmación oficial llega a tu backend mediante un webhook. Tu frontend puede obtener el estado actual consultando un endpoint de tu API que refleje esa información. Nunca debes considerar un pago como exitoso basándote solo en lo que muestra el frontend, ya que podría manipularse. El webhook es la única confirmación válida.
Integrar un checkout pagos QR React en tu aplicación es un proceso directo con las herramientas adecuadas. Checkout.js te ahorra tiempo de desarrollo y te proporciona una experiencia de pago segura y fluida para tus usuarios, mientras que el backend se encarga de la creación del cobro y la confirmación vía webhook.
Si buscas una pasarela de pagos peruana que ofrezca QR interoperable, cero contracargos, activación inmediata y una integración pensada para developers, considera explorar TAYPI. Puedes empezar hoy mismo desde su documentación para desarrolladores y tener un checkout funcional en cuestión de horas.
Explora la documentación técnica y comienza tu integración.
¿Listo para implementar pagos QR en tu app React sin fricciones? Crea tu cuenta gratis en TAYPI y accede al entorno sandbox para empezar a probar.
Crea tu cuenta gratis y genera tu primer QR en minutos.
Abrir cuenta gratis