Skip to main content
Tras /InicioPago, recibes str_url. Aquí explicamos las mejores prácticas para redirigir al usuario.

Opción 1: Redirect HTTP 302 (recomendada)

app.post("/checkout", async (req, res) => {
  const strUrl = await iniciarPago(req.body);
  res.redirect(302, strUrl);
});

Opción 2: Abrir en nueva pestaña

Si prefieres mantener tu página abierta:
<a href="{str_url}" target="_blank" rel="noopener">
  Continuar al pago →
</a>
Con esta opción, tu página pierde contexto del usuario. Asegúrate de:
  • Guardar el str_id_pago en una cookie / localStorage para detectar el retorno.
  • Implementar polling a tu propio endpoint de “consultar estado” cada 30-60s.
  • Tener un fallback visual (“Esperando confirmación de pago…”).

Opción 3: Redirect con formulario POST

Algunos frameworks no permiten redirect directo. Fallback:
<form id="redirFormToZP" action="{str_url}" method="get">
  <button type="submit">Pagar ahora</button>
</form>
<script>
  document.getElementById("redirFormToZP").submit();
</script>

Lo que ve el usuario

El usuario llega al formulario de ZonaPagos donde:
  1. Elige el medio de pago entre los que tienes habilitados (PSE, TC, botón Bancolombia, etc.).
  2. Completa los datos específicos del medio.
    • PSE: elige el banco y es redirigido al sitio del banco.
    • TC: digita número, vencimiento, CVV, cuotas.
  3. Autoriza el cargo en la red.
  4. Es redirigido de vuelta a tu comercio (URL de retorno).

Qué hacer en tu UI mientras tanto

El usuario puede demorar 1-10 minutos en el ciclo de pago. Tu UI debe:
No hacer nada: la redirección HTTP lleva al usuario fuera de tu app. Retorna al recibir el callback.
Si usas nueva pestaña: muestra un spinner o mensaje “Completa el pago en la otra ventana”.
Timeout razonable: si tras 30 minutos no recibes callback, marca el pago como abandonado (no rechazado).

URLs del ciclo de pago

AmbienteDominio
Producciónhttps://www.zonapagos.com/Ciclo_Pago/Pago.aspx?rut=...
Formulario dummiehttps://www.zonapagos.com/dummie_ciclopago/FormulariosWeb/InicioPago_Dummie.aspx
Ideal para soporte: al persistir str_url en tu BD, puedes reenviar el link al usuario si te escribe diciendo “no pude pagar”. Funciona mientras la sesión no haya expirado en ZonaPagos (típicamente 30 minutos).

Consideraciones UX

Dominio visible: los usuarios confían más cuando ven zonapagos.com en la URL. Eso comunica seriedad (entidad vigilada).
Comunica antes del redirect: muestra una pantalla intermedia “Vas a ser redirigido a nuestra pasarela de pagos segura” por 1-2 segundos para reducir la sensación de “salto” abrupto.
Branding coherente: el formulario de ZonaPagos puede personalizarse con el logo y colores de tu comercio. Coordina con tu gerente comercial.

Próximo paso

Recibir el callback →

Qué hacer cuando ZonaPagos devuelve al usuario a tu comercio.