QR: estado y stream en tiempo real
Dos formas de saber cuándo pagó el cliente. Ambos endpoints son públicos (los consume el navegador directamente, sin key).
GET /qr/stream/:reference (SSE — recomendado)
Stream de Server-Sent Events por transacción. Conéctate con EventSource usando la
reference de WizPay (no el numero_referencia):
const es = new EventSource(`https://api.wizpay.app/qr/stream/${reference}`)
es.addEventListener('confirmed', (e) => { /* ✅ pagado — JSON en e.data */ })
es.addEventListener('expired', () => { /* ⏰ QR vencido */ })
es.addEventListener('invalid', () => { /* ❌ pago inválido */ })
es.onmessage = (e) => { /* connected / heartbeat */ }| Evento | Cuándo llega |
|---|---|
| (mensaje inicial) | { type: "connected", reference, timestamp } al abrir la conexión. |
confirmed | La red bancaria confirmó el pago — la transacción pasa a APROBADO. |
expired | El QR venció sin pagarse. |
invalid | El callback llegó con datos inválidos. |
| (heartbeat) | { type: "heartbeat", timestamp } cada 30 s para mantener viva la conexión. |
La conexión se cierra sola a los 10 minutos (la vida del QR). Si sigue pendiente, genera un QR nuevo.
El simulador de esta página no mantiene streams SSE — pruébalo contra producción con un QR real. El resto del flujo sí es simulable.
GET /qr/status/:numero_referencia (polling)
Consulta el estado del QR en la red bancaria por su numero_referencia (el que devolvió
/qr/generate). Fallback para cuando SSE no está disponible.
Response 200
{
"numeroReferencia": 9509574123,
"estado": "PAGADO",
"codigoRespuesta": "00",
"detalleRespuesta": null
}estado: PENDIENTE → PAGADO (los nombres exactos los define la red bancaria; trata cualquier valor
distinto de PAGADO como pendiente).
Pruébalo
Genera un QR en /qr/generate y pega aquí su numero_referencia: