Flujo de pago — Camino feliz
Esta página describe el flujo de pago end-to-end estándar en Fluxis: desde crear una solicitud de pago hasta la detección on-chain, el procesamiento asíncrono y la entrega de webhooks. Para resultados no estándar (pago insuficiente, expiración, transacciones fallidas), consulte Flujos de pago — Casos límite.
Descripción general de la arquitectura
El procesamiento de pagos de Fluxis abarca cuatro servicios cooperativos:
Code
| Service | Role |
|---|---|
| Core API | Crea solicitudes de pago, asigna direcciones vault, genera tokens NASPIP, expone endpoints REST |
| Cron | Consulta blockchains cada 3 segundos en busca de eventos ERC-20 Transfer hacia direcciones vault activas |
| Transaction Worker | Consume la cola SQS transactions y ejecuta el ciclo de vida de pago de 3 saltos |
| Crypto Service | Servicio externo para gestión de vaults, consolidación y liquidación (post-pago) |
Los comerciantes interactúan solo con la Core API y webhooks a nivel de cuenta. El monitoreo blockchain y la confirmación de transacciones ocurren de forma asíncrona.
Requisitos previos
Antes de que un pago pueda tener éxito, la jerarquía del comerciante debe estar configurada:
Code
- Organization and Account — Consulte Merchant Sign Up.
- Point of Sale — Un PoS
online_fixed(e-commerce) ocashier_fixed(caja física). Consulte Point of Sale. - Authentication — Bearer token +
x-fluxis-api-keyen rutas protegidas. Consulte Authentication & Configuration. - Webhook (recommended) — Regístrelo a nivel de cuenta:
POST /v1/account/{accountID}/webhook. Consulte Webhooks.
Paso 1 — Crear una solicitud de pago
Cree una solicitud de pago a través del endpoint del Point of Sale — no una ruta independiente /v1/payment-requests:
Code
Code
Alternativa de checkout alojado
Cuando el pagador debe elegir su activo entre las payment_options del PoS, use POST /v1/pos/{posID}/payment-request-checkout. La solicitud de pago comienza en estado pending y transiciona a created una vez que el pagador selecciona un UAI. Consulte Creating Payment Requests.
Qué hace Fluxis internamente
Code
Al crear, Fluxis:
- Valida el PoS y resuelve el UAI
- Asigna una dirección vault única del pool pre-desplegado
- Establece el estado
createdy una marca de expiración de 8 minutos - Almacena en caché la dirección vault en Redis para búsquedas rápidas del cron
- Devuelve un token NASPIP para mostrar QR / enlace de pago
Ejemplo de respuesta:
Code
Paso 2 — El cliente paga on-chain
El cliente escanea el token NASPIP (código QR o enlace) y envía el importe exacto a la dirección vault en la red configurada. Fluxis no tiene custodia durante este paso — el pago va directamente al smart contract vault.
Su aplicación debe:
- Mostrar el token NASPIP y una cuenta regresiva basada en
expiration - Consultar
GET /v1/pos/{posID}/payment-request/{paymentRequestID}o esperar webhooks - No cumplir el pedido hasta que el pago alcance un estado terminal
Paso 3 — Cron detecta la transferencia
El servicio cron ejecuta un trabajo de lectura blockchain cada 3 segundos en redes admitidas (Polygon, Base, Avalanche, Arbitrum):
Code
Detalles clave:
- Usa
eth_getLogscon chunking adaptativo para consultar eventos ERC-20Transfereficientemente - Filtra transacciones donde el destinatario (
to) coincide con una dirección vault activa en caché en Redis - Encola transacciones coincidentes en la cola SQS
transactionscon tipo de eventotransaction_incoming_payment
Paso 4 — Worker SQS de tres saltos
El transaction worker procesa cada pago mediante tres saltos SQS secuenciales:
Code
Salto 1 — transaction_incoming_payment
- Valida que la solicitud de pago esté en
createdoprocessing - Actualiza el estado a
processing - Envía un webhook con estado
processing - Encola el salto 2 con un retraso de finalidad (predeterminado 256 segundos en Polygon, configurable por red)
Salto 2 — transaction_check_update_payment_request
Tras el retraso de finalidad:
- Llama
GetTransactionpara verificar el estado on-chain (pending / confirmed / failed) - Usa el importe de la detección
eth_getLogsdel cron (no deGetTransaction, que falla en transacciones proxy/router) - Compara importe recibido vs importe esperado:
- Igual →
completed - Menor →
underpaid - Mayor →
overpaid
- Igual →
- Envía un webhook con el estado final
- Encola el salto 3 inmediatamente y libera el vault
Salto 3 — transaction_confirm_payment_request
- Se ejecuta solo para pagos
completedooverpaid - Crea un registro interno de Transaction (tarifas, direcciones, entrada de ledger)
- Actualiza el estado de la solicitud de pago a
confirmed - No envía webhook (consulte la matriz de webhooks en Edge Cases)
Pagos underpaid
El salto 3 no se ejecuta para pagos underpaid — no se crea transacción interna. Consulte Edge Cases — Underpaid.
Paso 5 — Notificaciones webhook
Fluxis entrega webhooks a nivel de cuenta cuando cambia el estado de la solicitud de pago durante los saltos 1 y 2:
Code
| Webhook-delivered status | When |
|---|---|
processing | Cron detectó una transferencia on-chain al vault |
completed | Confirmado tras finalidad; el importe coincide con lo esperado |
underpaid | Confirmado tras finalidad; se recibió menos de lo esperado |
overpaid | Confirmado tras finalidad; se recibió más de lo esperado |
Verifique cada webhook con HMAC-SHA256 antes de procesar. Consulte Webhook Signature Verification y Webhooks.
Estados de la solicitud de pago
Code
| State | Description | Merchant action |
|---|---|---|
pending | Creada vía checkout; el pagador aún no ha seleccionado un UAI | Mostrar checkout / selector de activo |
created | Vault asignado; en espera de pago on-chain (ventana de 8 minutos) | Mostrar token NASPIP; consultar o usar webhooks |
processing | Transferencia detectada; en espera de finalidad blockchain | Informar al cliente que el pago se está confirmando |
completed | Pago completo confirmado tras finalidad | Cumplir pedido |
confirmed | Transacción interna de ledger creada | Pago liquidado en contabilidad Fluxis |
underpaid | Confirmado pero el importe es menor al esperado | Consulte Edge Cases |
overpaid | Confirmado pero el importe excede lo esperado | Consulte Edge Cases |
expired | No se recibió pago antes de la expiración | Crear una nueva solicitud de pago |
No cumplir en processing
Espere completed, underpaid o overpaid antes de cumplir pedidos. El estado processing significa que se detectó una transferencia pero aún no alcanzó finalidad.
Tiempos y expiración
Dos timeouts distintos aplican según el flujo:
| Flow | Timeout | Applies to |
|---|---|---|
| Payment request | 8 minutos | Desde asignación de vault (estado created) hasta expiración |
| Payment intention | 5 minutos | Flujo PoS caja (cashier_fixed / cashier_open) antes de que el comerciante cree la solicitud de pago |
Cron de expiración
Un trabajo en segundo plano se ejecuta cada 30 segundos para marcar solicitudes de pago con estado created y expiration < now como expired. Las transacciones transmitidas cerca del plazo aún pueden detectarse mientras el vault permanezca en caché brevemente tras la expiración.
Para el flujo de caja, el comerciante crea una intención de pago vía POST /v1/pos/{posID}/payment-intention con una ventana de 5 minutos. Una vez confirmada, Fluxis crea la solicitud de pago con la ventana estándar de 8 minutos.
Secuencia end-to-end
Code
Opciones de monitoreo
| Method | Endpoint / setup | Best for |
|---|---|---|
| Webhooks (recommended) | POST /v1/account/{accountID}/webhook | Producción — actualizaciones de estado en tiempo real |
| Polling | GET /v1/pos/{posID}/payment-request/{paymentRequestID} | Desarrollo o respaldo de webhook |
| Transactions list | GET /v1/transactions?page=1&page_size=50 | Conciliación tras confirmed |
Documentación relacionada
- Creating Payment Requests — Guía de integración con ejemplos de API
- Payment Requests — Estados, campos y flujo de checkout
- Payment Flows — Edge Cases — Underpaid, overpaid, expired, transacciones fallidas, reembolsos
- Webhooks — Registro y formato de payload
- Webhook Signature Verification — Verificación HMAC y flujo de prueba
- NASPIP — Formato de token y compatibilidad con wallets
- API Reference — Point of Sale — Documentación interactiva de endpoints