Fluxo de pagamento — Caminho feliz
Esta página descreve o fluxo de pagamento end-to-end padrão na Fluxis: desde a criação de uma solicitação de pagamento até a detecção on-chain, processamento assíncrono e entrega de webhooks. Para resultados não padrão (pagamento insuficiente, expiração, transações falhas), consulte Fluxos de pagamento — Casos extremos.
Visão geral da arquitetura
O processamento de pagamentos Fluxis abrange quatro serviços cooperativos:
Code
| Service | Role |
|---|---|
| Core API | Cria solicitações de pagamento, atribui endereços vault, gera tokens NASPIP, expõe endpoints REST |
| Cron | Consulta blockchains a cada 3 segundos por eventos ERC-20 Transfer para endereços vault ativos |
| Transaction Worker | Consome a fila SQS transactions e executa o ciclo de vida de pagamento de 3 saltos |
| Crypto Service | Serviço externo para gerenciamento de vaults, consolidação e liquidação (pós-pagamento) |
Comerciantes interagem apenas com a Core API e webhooks em nível de conta. Monitoramento blockchain e confirmação de transações ocorrem de forma assíncrona.
Pré-requisitos
Antes que um pagamento possa ser bem-sucedido, a hierarquia do comerciante deve estar configurada:
Code
- Organization and Account — Consulte Merchant Sign Up.
- Point of Sale — Um PoS
online_fixed(e-commerce) oucashier_fixed(caixa física). Consulte Point of Sale. - Authentication — Bearer token +
x-fluxis-api-keyem rotas protegidas. Consulte Authentication & Configuration. - Webhook (recommended) — Registre em nível de conta:
POST /v1/account/{accountID}/webhook. Consulte Webhooks.
Passo 1 — Criar uma solicitação de pagamento
Crie uma solicitação de pagamento pelo endpoint do Point of Sale — não uma rota independente /v1/payment-requests:
Code
Code
Alternativa de checkout hospedado
Quando o pagador deve escolher o ativo entre as payment_options do PoS, use POST /v1/pos/{posID}/payment-request-checkout. A solicitação de pagamento inicia em status pending e transiciona para created quando o pagador seleciona um UAI. Consulte Creating Payment Requests.
O que a Fluxis faz internamente
Code
Na criação, a Fluxis:
- Valida o PoS e resolve o UAI
- Atribui um endereço vault único do pool pré-implantado
- Define status
createde timestamp de expiração de 8 minutos - Armazena em cache o endereço vault no Redis para buscas rápidas do cron
- Retorna um token NASPIP para exibir QR / link de pagamento
Exemplo de resposta:
Code
Passo 2 — Cliente paga on-chain
O cliente escaneia o token NASPIP (QR code ou link) e envia o valor exato para o endereço vault na rede configurada. A Fluxis não detém custódia neste passo — o pagamento vai diretamente para o smart contract vault.
Sua aplicação deve:
- Exibir o token NASPIP e uma contagem regressiva baseada em
expiration - Consultar
GET /v1/pos/{posID}/payment-request/{paymentRequestID}ou aguardar webhooks - Não cumprir o pedido até o pagamento atingir um status terminal
Passo 3 — Cron detecta a transferência
O serviço cron executa um job de leitura blockchain a cada 3 segundos em redes suportadas (Polygon, Base, Avalanche, Arbitrum):
Code
Detalhes importantes:
- Usa
eth_getLogscom chunking adaptativo para consultar eventos ERC-20Transfereficientemente - Filtra transações onde o destinatário (
to) corresponde a um endereço vault ativo em cache no Redis - Enfileira transações correspondentes na fila SQS
transactionscom tipo de eventotransaction_incoming_payment
Passo 4 — Worker SQS de três saltos
O transaction worker processa cada pagamento por três saltos SQS sequenciais:
Code
Salto 1 — transaction_incoming_payment
- Valida que a solicitação de pagamento está em
createdouprocessing - Atualiza status para
processing - Envia webhook com status
processing - Enfileira salto 2 com atraso de finalidade (padrão 256 segundos na Polygon, configurável por rede)
Salto 2 — transaction_check_update_payment_request
Após o atraso de finalidade:
- Chama
GetTransactionpara verificar status on-chain (pending / confirmed / failed) - Usa o valor da detecção
eth_getLogsdo cron (não deGetTransaction, que falha em transações proxy/router) - Compara valor recebido vs valor esperado:
- Igual →
completed - Menor →
underpaid - Maior →
overpaid
- Igual →
- Envia webhook com status final
- Enfileira salto 3 imediatamente e libera o vault
Salto 3 — transaction_confirm_payment_request
- Executa apenas para pagamentos
completedouoverpaid - Cria registro interno de Transaction (taxas, endereços, entrada de ledger)
- Atualiza status da solicitação de pagamento para
confirmed - Não envia webhook (consulte a matriz de webhooks em Edge Cases)
Pagamentos underpaid
O salto 3 não executa para pagamentos underpaid — nenhuma transação interna é criada. Consulte Edge Cases — Underpaid.
Passo 5 — Notificações webhook
A Fluxis entrega webhooks em nível de conta quando o status da solicitação de pagamento muda durante os saltos 1 e 2:
Code
| Webhook-delivered status | When |
|---|---|
processing | Cron detectou transferência on-chain para o vault |
completed | Confirmado após finalidade; valor corresponde ao esperado |
underpaid | Confirmado após finalidade; recebido menos que o esperado |
overpaid | Confirmado após finalidade; recebido mais que o esperado |
Verifique cada webhook com HMAC-SHA256 antes de processar. Consulte Webhook Signature Verification e Webhooks.
Estados da solicitação de pagamento
Code
| State | Description | Merchant action |
|---|---|---|
pending | Criada via checkout; pagador ainda não selecionou um UAI | Exibir checkout / seletor de ativo |
created | Vault atribuído; aguardando pagamento on-chain (janela de 8 minutos) | Exibir token NASPIP; consultar ou usar webhooks |
processing | Transferência detectada; aguardando finalidade blockchain | Informar cliente que pagamento está sendo confirmado |
completed | Pagamento integral confirmado após finalidade | Cumprir pedido |
confirmed | Transação interna de ledger criada | Pagamento liquidado na contabilidade Fluxis |
underpaid | Confirmado, mas valor menor que o esperado | Consulte Edge Cases |
overpaid | Confirmado, mas valor excede o esperado | Consulte Edge Cases |
expired | Nenhum pagamento recebido antes da expiração | Criar nova solicitação de pagamento |
Não cumprir em processing
Aguarde completed, underpaid ou overpaid antes de cumprir pedidos. O status processing significa que uma transferência foi detectada, mas ainda não atingiu finalidade.
Temporização e expiração
Dois timeouts distintos se aplicam conforme o fluxo:
| Flow | Timeout | Applies to |
|---|---|---|
| Payment request | 8 minutos | Desde atribuição de vault (status created) até expiração |
| Payment intention | 5 minutos | Fluxo PoS caixa (cashier_fixed / cashier_open) antes do comerciante criar a solicitação de pagamento |
Cron de expiração
Um job em segundo plano executa a cada 30 segundos para marcar solicitações de pagamento com status created e expiration < now como expired. Transações transmitidas perto do prazo ainda podem ser detectadas enquanto o vault permanece em cache brevemente após a expiração.
Para o fluxo de caixa, o comerciante cria uma intenção de pagamento via POST /v1/pos/{posID}/payment-intention com janela de 5 minutos. Uma vez confirmada, a Fluxis cria a solicitação de pagamento com a janela padrão de 8 minutos.
Sequência end-to-end
Code
Opções de monitoramento
| Method | Endpoint / setup | Best for |
|---|---|---|
| Webhooks (recommended) | POST /v1/account/{accountID}/webhook | Produção — atualizações de status em tempo real |
| Polling | GET /v1/pos/{posID}/payment-request/{paymentRequestID} | Desenvolvimento ou fallback de webhook |
| Transactions list | GET /v1/transactions?page=1&page_size=50 | Reconciliação após confirmed |
Documentação relacionada
- Creating Payment Requests — Guia de integração com exemplos de API
- Payment Requests — Status, campos e fluxo de checkout
- Payment Flows — Edge Cases — Underpaid, overpaid, expired, transações falhas, reembolsos
- Webhooks — Registro e formato de payload
- Webhook Signature Verification — Verificação HMAC e fluxo de teste
- NASPIP — Formato de token e compatibilidade com wallets
- API Reference — Point of Sale — Documentação interativa de endpoints