Si el cobro representa un adeudo que debes programar y gestionar con recordatorios o reintentos automáticos, sigue
Sincroniza facturas en Quentli.
¿Cuándo usar una sesión de pago?
- Para enviar un link de checkout de un cobro puntual.
- Para cobrar varios conceptos en una misma sesión.
- Para mostrar una sesión que paga facturas existentes.
1. Crea una sesión de pago
Envía un cliente y elige exactamente una de estas tres formas de definir el cobro. No combinesinvoiceIds con importes o
conceptos.
- Importe puntual
- Conceptos
- Facturas existentes
Usa
amount, currency y description para crear un cobro único con un solo concepto.POST /v1/payment-sessions
items y todas las facturas de una sesión deben usar la misma
moneda. La sesión toma el saldo pendiente actual de las facturas al crearla.
Ejemplo desde el servidor
2. Muestra el checkout al cliente
La respuesta incluye laurl del checkout, el objeto paymentSession y las credenciales temporales session. Estas
credenciales se usan con @quentli/js para mostrar el checkout dentro de tu aplicación.
Respuesta
Opción 1: Customer Portal
ConCUSTOMER_PORTAL, el modo predeterminado, redirige al cliente a la URL hospedada por Quentli:
Opción 2: Popup con @quentli/js
Usa displayMode: "EMBEDDED" al crear la sesión y abre el checkout en un popup. El cliente permanece en tu aplicación y
recibes callbacks al completar, cancelar o fallar el flujo.
Opción 3: Iframe con @quentli/js
Usa displayMode: "CUSTOM" para incrustar el checkout en un contenedor de tu página:
Para los modos popup e iframe, entrega
url y session desde tu backend a tu frontend. No guardes las credenciales
de session; son temporales. Llama a quentli.destroy() cuando desmontes el componente o termines de usar la
instancia.
Para
CUSTOMER_PORTAL, normalmente solo necesitas url. Para popup e iframe, session contiene los tokens que requiere
el SDK.
3. Confirma el resultado
No marques el cobro como pagado solo porque el cliente llegue areturnUrl o se invoque onComplete. Procesa el webhook
PAYMENT_COMPLETED y conserva su eventId de forma idempotente. También puedes consultar la sesión sin API key; el
endpoint devuelve null cuando no existe:
PENDING, FINALIZED, CANCELED o EXPIRED.
Resolución del cliente
Quentli busca o crea el cliente usando estos campos, en este orden:externalId: identificador único de tu sistema, guardado comousernameen Quentli.phoneNumber: teléfono en formato E.164.email: correo electrónico del cliente.
externalId tiene prioridad cuando encuentra un cliente.
Usa meta para guardar identificadores externos tanto en el cliente como en la sesión. No envíes meta y el campo deprecado
metadata en la misma solicitud.
Usa forceUpdate con cuidado
Usa forceUpdate: true solo cuando tu sistema sea la fuente de verdad de los datos de contacto. Si otro cliente de la misma
organización tiene el email o phoneNumber enviado, Quentli mueve ese dato al cliente resuelto.
Sin forceUpdate, Quentli no mueve correos ni teléfonos entre clientes y la solicitud falla ante una coincidencia que podría
sobrescribir datos por accidente.