GET

/transaction/{transaction_id} — Consultar estado

Consulta el estado actual de una transacción. Es el endpoint que usarás en polling para saber cuándo el cliente paga.

Endpoint

https://api-integrationcheckout-uat.yappycloud.com/v1https://api-checkout.yappy.cloud/v1/transaction/{transaction_id}

Response 200 OK

{
  "status": {
    "code": "YP-0000",
    "description": "Se ha realizado la ejecución del servicio correctamente"
  },
  "body": {
    "status": "COMPLETED"
  }
}

Estados posibles

EstadoSignificado
PENDINGQR generado. El cliente aún no ha escaneado o no ha confirmado el pago.
COMPLETEDPago confirmado. Fondos acreditados al comercio.
CANCELLEDLa caja invocó la cancelación de la transacción.
REVERSEDAnulación de venta ejecutada (posterior al pago).
FAILEDError de plataforma. Contacta soporte yappy@bgeneral.com.

Estrategia de polling

A diferencia de Botón de Pago (que usa IPN/webhooks), Yappy en Caja requiere consulta recurrente al endpoint de estado:

  • Consulta cada 2–5 segundos después de generar el QR.
  • Detén el polling cuando el estado sea COMPLETED o CANCELLED.
  • Implementa una cancelación automática a los 5 minutos: la orden tiene una vigencia de 5 minutos. Si transcurre ese tiempo sin pago, tu sistema debe invocar PUT /transaction/{id} para cancelar y liberar la caja.
  • Usa backoff exponencial si la API responde con errores temporales.

Implementación de referencia

async function waitForPayment(transactionId, sessionToken, timeoutMs = 300_000) {
  const deadline = Date.now() + timeoutMs;
  const POLL_INTERVAL = 3000;

  while (Date.now() < deadline) {
    const resp = await fetch(
      `{{BASE_URL}}/transaction/${transactionId}`,
      {
        headers: {
          "api-key": process.env.YAPPY_API_KEY,
          "secret-key": process.env.YAPPY_SECRET_KEY,
          "authorization": sessionToken
        }
      }
    );
    const { body } = await resp.json();

    if (body.status === "COMPLETED") return "paid";
    if (body.status === "CANCELLED") return "cancelled";

    await new Promise(r => setTimeout(r, POLL_INTERVAL));
  }

  // 5 min pasaron sin pago: cancelar la transacción
  await cancelTransaction(transactionId, sessionToken);
  return "expired";
}
No hay webhook en Yappy en Caja

A diferencia de Botón de Pago, Yappy en Caja no envía notificaciones push (IPN/webhook). Tu sistema es responsable de consultar el estado periódicamente.

¿Te fue útil esta página?