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);}import os
from timbro_payments import TimbroPaymentsfrom timbro_payments.types import Payment
timbro = TimbroPayments(api_key=os.environ["TIMBRO_PAYMENTS_SECRET_KEY"])
def find_payment(payment_reference: str) -> Payment | None: page = timbro.payments.list(payment_reference=payment_reference) return page["data"][0] if page["data"] else NoneSi la página está vacía, reenvía la solicitud que guardaste con la misma referencia. No puede crear un segundo pago.
Si ya tienes el identificador
Sección titulada «Si ya tienes el identificador»const payment = await timbro.payments.retrieve("payment_123456789abcdefghjkmnpqr");payment = 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.processingoverifying: 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 tienelastDecline, el último intento fue rechazado y el cliente puede intentarlo de nuevo concheckout.url.canceledoexpired: 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.