Ir al contenido

Tu primer pago

El servidor del comercio crea un Payment con importe en unidades menores, referencia de venta y la intención fiscal. Esta llamada usa una clave secreta sólo en el servidor:

import { createTimbroPayments } from "@timbro/payments";
const secretKey = process.env.TIMBRO_PAYMENTS_SECRET_KEY;
if (!secretKey) throw new Error("Missing TIMBRO_PAYMENTS_SECRET_KEY");
const timbro = createTimbroPayments({ secretKey });
const payment = await timbro.payments.create({
idempotencyKey: "create-order-123",
saleReference: "order-123",
amount: { currency: "DOP", minorUnits: 125_000 },
description: "Servicio de mantenimiento",
fiscalDocument: null,
});

Entrega nextAction.url al comprador sin reconstruir el formulario. Los ocho estados canónicos de Payment son requires_customer_action, processing, partially_paid, verifying, succeeded, declined, canceled y expired. verifying es un resultado incierto no terminal: consulta el mismo Payment y no cobres de nuevo. declined es una respuesta válida de creación, no un error HTTP que deba repetirse automáticamente.

La autorización monetaria, la emisión fiscal, la disponibilidad del PDF y la entrega por correo son ciclos observables separados. Un pago succeeded puede coexistir con un FiscalDocument processing, rejected u operator_required.

En TypeScript, conserva la referencia y consulta después de volver de Checkout:

const current = await timbro.payments.retrieve(payment.id);
if (current.status === "verifying") {
// Persist the payment and schedule retrieval; never create a second payment.
}