Ir al contenido
Documentación

Webhooks y errores

Confirmar un pago sin respuesta

Si tu servidor no recibe una respuesta a tiempo, el pago podría haberse completado. Deja el pedido pendiente y confirma qué pasó antes de intentar cobrar de nuevo. En Python, el error tiene outcome_unknown en True.

Si no recibiste la respuesta al crear el pago

Sección titulada «Si no recibiste la respuesta al crear el pago»

Reenvía la solicitud que guardaste, con el mismo paymentReference y los mismos datos. Timbro te devolverá el mismo pago y su estado actual. Consulta cómo repetir la solicitud sin duplicar el pago.

Para encontrarlo sin reenviar la solicitud, lista los pagos con el filtro exacto paymentReference. La página contiene como máximo ese pago:

import { createTimbroPayments } from "@timbro/payments";
const timbro = createTimbroPayments({ apiKey: process.env.TIMBRO_PAYMENTS_SECRET_KEY! });
export async function findPayment(paymentReference: string) {
const page = await timbro.payments.list({ paymentReference });
return page.data.at(0);
}

Si la página está vacía, reenvía la solicitud que guardaste con la misma referencia. No puede crear un segundo pago.

const payment = await timbro.payments.retrieve("payment_123456789abcdefghjkmnpqr");
  • succeeded: comprueba que la referencia, la moneda y el monto coincidan con el pedido, y márcalo como pagado una sola vez.
  • processing o verifying: espera y consulta el mismo pago de nuevo. No crees otro pago mientras se confirma el resultado.
  • requires_customer_action: el pago sigue abierto. Si tiene lastDecline, el último intento fue rechazado y el cliente puede intentarlo de nuevo con checkout.url.
  • canceled o expired: el pago terminó. Antes de crear otro, revisa si quedó alguna parte pendiente, especialmente en un pago dividido.

Espera entre consultas y usa los webhooks para recibir avisos de cambios. Si el resultado sigue sin confirmarse o tampoco puedes consultarlo, deja el pedido en revisión y escríbenos. Incluye el id del pago, paymentReference, el modo (Prueba o En vivo) y Request-Id, si lo tienes.

El link checkout.url sigue correspondiendo al pago original. El cliente puede abrirlo para ver si el resultado está pendiente o confirmado. Si el pago ya terminó, reenviar su referencia no abre un nuevo pago.