Enlaces de pago — Resumen
Un Enlace de pago es una URL compartible que deja al comprador
en un checkout alojado que ya has configurado. Sin SDK, sin
integración de servidor: emítelo en el dashboard, compártelo, y el
mismo webhook payment.settled se dispara cuando los fondos se
confirman on-chain.
Bajo el capó, un Enlace de pago es una CheckoutSession: “Enlace de pago” es solo el nombre del lado dashboard para una sesión que no fue creada por un flujo de SDK iniciado por el comprador. Mismo contrato de webhook, misma liquidación on-chain, mismas tarifas.
Usos comunes:
- Facturar a un cliente puntual sin escribir código
- Páginas de venta donde el equipo de dev no va a cablear un carrito personalizado este trimestre
- Seguimientos B2B: pega el enlace en un email y dalo por hecho
- Páginas de propina de importe fijo estilo “Cómprame un café”
Crea uno
Hoy esto es solo-dashboard:
- Inicia sesión en el dashboard del comerciante
- Pagos → Enlaces de pago → + Nuevo enlace
- Elige una de dos rutas:
- Nueva orden: introduce line items, moneda, información del cliente y metadatos opcionales. El dashboard crea la Order y el Enlace de pago en una sola llamada.
- Orden existente: elige una orden
PENDING(p. ej. el comprador abandonó el enlace anterior). Reemite un enlace fresco respaldado por la misma orden, así que el historial de orden permanece intacto.
- Guarda → el dashboard muestra la URL
https://checkout.infraio.xyz/cst_…con un botón de copiar y descarga de código QR. Los enlaces de modo de prueba usancheckout-dev.infraio.xyzasí que el entorno está codificado en el hostname.
Cada Enlace de pago es de un solo uso hoy: una vez que un comprador
paga, la sesión es COMPLETED. Si una sesión expira antes del
pago (TTL por defecto 30 minutos), abre la página de detalle de
la orden y haz clic en Re-crear enlace para emitir uno fresco
contra la misma orden.
Lo que ve el comprador
- Aterrizan en
checkout.infraio.xyz/<session_key>: la misma UI de checkout alojado que obtendrías de una sesión emitida por SDK. - Pasan por el flujo estándar de elegir-activo → enviar-fondos → esperar-confirmación descrito en Checkout — Resumen.
payment.settledse dispara en tu webhook con la orden, intent, recibo, tx hash on-chain y conteo de confirmaciones: el mismo payload que cualquier otro pago liquidado. Consulta Webhooks para el esquema.
Lo que te da el dashboard
La superficie de Enlaces de pago hoy se envía con:
- Vista de lista: cada enlace que has emitido, paginado por cursor, con estado, importe, número de orden padre, cliente, expiración y apertura de un clic a la URL del comprador.
- Filtros: estado (
ACTIVE/COMPLETED/EXPIRED/CANCELED), rango de fechas y búsqueda de texto completo a través del número de orden, nombre del cliente, email o ref externa. - Exportación CSV: un clic, respeta los filtros actuales.
- Tira KPI: conteos por estado, con scope al entorno actual
(
livevstest) vía la cabeceraX-Environmentpara que los números siempre coincidan con lo que muestra la tabla. - Página de detalle: resumen de orden, historial de sesiones (cada intento para esta orden), historial on-chain con enlaces a block explorer y una acción Re-crear enlace para sesiones que expiraron antes del pago.
Limitaciones hoy
- Sin API programática: los enlaces deben crearse en el
dashboard. El SDK puede crear sesiones equivalentes de un solo
uso vía
POST /b2b/v1/checkout-sessions/quick(consulta Referencia de la API), pero la UX de “URL compartible de larga vida” es solo-dashboard por ahora. - Sin autenticación por comprador: cualquiera con la URL puede pagar. El modelo de un solo uso mitiga esto parcialmente; el vínculo total a la identidad del comprador está en el roadmap abajo.
- El branding es global: el enlace usa tu logo a nivel comerciante, color de marca y radio de borde de Settings → Branding. Los overrides de branding por enlace aún no se exponen en la UI del dashboard.
Roadmap
Elementos que sabemos que queremos, priorizados de mayor a menor:
- Creación programática: un endpoint
POST /b2b/v1/payment-linksque refleje el diálogo de dos pestañas del dashboard y devuelva la mismacheckout_url. Encaja naturalmente con listado + revocación. - Expiración basada en tiempo: el enlace permanece válido hasta una fecha específica, no solo hasta que el TTL de la sesión transcurra. Necesario para flujos de facturación donde “vence en 14 días” es la fecha límite natural.
- Enlaces reutilizables: páginas multi-comprador estilo Stripe (donación, propinas, pestañas recurrentes). Hoy cada enlace es de un solo uso.
- Identidad por comprador: bloquea un enlace a un email o wallet específico para que no pueda reenviarse.
- Generación de QR del lado API: el dashboard renderiza códigos QR del lado cliente hoy; exponer esto en la API para impresión de etiquetas y recibos incrustados está en la lista.
Ver también
- Conceptos → Sesiones: qué está pasando en la capa de sesión e intent mientras un comprador está pagando.
- Checkout → Resumen: qué ve el comprador efectivamente.
- Webhooks → Resumen: el evento
payment.settledal que reacciona tu servidor.