Vinculação de pagamentos e divergências de valores
Esta seção descreve a regra que o serviço usa para vincular uma transação on-chain recebida a uma cobrança emitida, o que acontece quando o valor diverge e o que o lojista pode fazer nesse caso.
Os status da cobrança, os prazos e as transições de estado estão descritos em Ciclo de vida da cobrança.
A regra de correspondência de valores
Na criação da cobrança, o serviço converte o valor em fiat para cripto e trava os valores resultantes para a cobrança. Eles se tornam o identificador do pagamento: o cliente os vê no formulário de pagamento, e o serviço procura on-chain uma transação exatamente desse valor.
O valor do pagamento deve corresponder exatamente ao valor da cobrança. Não há tolerância. O valor a pagar é formado com 2 casas decimais para as stablecoins USDT e USDC e 8 casas decimais para as demais criptomoedas, e o pagamento recebido é comparado com ele com precisão. Qualquer desvio — pagamento a menor ou a maior, por menor que seja — significa que nenhuma vinculação automática vai acontecer.
Exemplo. Uma cobrança de 100.00 USD é emitida com o valor travado de 100.12 USDT.
| Valor do pagamento recebido | Resultado |
|---|---|
| 100.12 USDT | A cobrança passa automaticamente a Paga |
| 100.11 USDT | Nenhuma vinculação automática |
| 100.50 USDT | Nenhuma vinculação automática |
Se várias cobranças com o mesmo valor em fiat forem emitidas para um mesmo endereço ao mesmo tempo, o serviço atribui a cada uma um valor em cripto ligeiramente diferente. A unicidade é verificada entre todas as suas cobranças em aberto naquela carteira, então um endereço pode ser usado com segurança em vários dos seus projetos — os valores não vão colidir.
As causas mais comuns de divergência são o cliente arredondar o valor à mão ou a taxa de rede ser descontada em um saque de uma exchange. Avise o cliente para transferir exatamente o valor exibido no formulário de pagamento.
O que acontece em uma divergência de valores
O serviço registra que os fundos chegaram, mas não faz nada com a cobrança:
- A cobrança não muda de status. Ela permanece em aberto até o prazo de pagamento. O cliente ainda pode fechá-la com o valor correto enquanto a janela de busca estiver aberta.
- Nenhum webhook é enviado. A notificação para a Webhook URL sai somente no momento em que a cobrança passa a Paga.
- Pagamento parcial não é rastreado. O serviço não reconhece pagamento a menor e não mantém um saldo restante na cobrança.
- Os pagamentos não são somados. Se o cliente completar um pagamento a menor com uma segunda transação pela diferença que falta, os dois pagamentos não são somados. Ambos permanecem como pagamentos separados e não vinculados.
- Pagamento a maior não é reembolsado automaticamente. Os fundos vão direto para a sua carteira; devolver a diferença ao cliente é resolvido fora do serviço.
Não existem no serviço status intermediários como Parcialmente paga ou Paga a maior.
Como o lojista fica sabendo do problema
Se as notificações estiverem ativadas nas configurações do projeto, o lojista recebe um e-mail e uma mensagem do bot do Telegram sobre cada pagamento recebido — tenha ele sido vinculado a uma cobrança ou não.
Disso resulta uma regra simples de diagnóstico: se chegou uma notificação de pagamento recebido mas nenhuma notificação de cobrança paga veio em seguida, o pagamento não foi vinculado por divergência de valores e precisa de tratamento manual.
A regra funciona somente dentro da janela de busca. O serviço monitora as carteiras apenas enquanto pelo menos uma cobrança ainda tem uma busca ativa. Se o cliente pagar quando não existir nenhuma cobrança assim, o pagamento nem entra no sistema — sem notificação e sem como vinculá-lo manualmente.
Você também pode encontrar pagamentos não vinculados por programação. O método payments/list retorna os pagamentos de todas as suas carteiras, e um pagamento não vinculado a uma cobrança vem sem o bloco invoice na resposta. Esses são os candidatos à vinculação manual: compare o valor e o horário com a cobrança esperada e chame invoices/bindPayment.
Vinculação manual de pagamentos
Se você tem certeza de qual pagamento corresponde a qual cobrança, vincule-os manualmente — no painel, na página da cobrança ou na lista de pagamentos, ou pela API com o método invoices/bindPayment.
Condições de vinculação
A vinculação só é possível quando todas as condições valem ao mesmo tempo:
- A cobrança está Em aberto ou Expirada. Cobranças canceladas e já pagas não podem ser vinculadas.
- O pagamento ainda não está vinculado a outra cobrança. Um pagamento pode ser ligado a apenas uma cobrança.
- O pagamento chegou a uma carteira envolvida nessa cobrança.
- O pagamento cai dentro da janela de pagamento disponível — 24 horas antes e 24 horas depois da criação da cobrança.
A janela é mais ampla que a validade da cobrança, o que abre duas possibilidades: você pode vincular um pagamento a uma cobrança já expirada e pode vincular uma cobrança a um pagamento que chegou antes de a cobrança ser criada. O segundo caso é útil quando o cliente enviou o dinheiro por conta própria e a cobrança foi emitida depois de os fundos chegarem.
O que acontece depois da vinculação
- A cobrança passa a Paga — exatamente como na vinculação automática.
- O webhook é sempre enviado. A notificação sai a cada transição para Paga, independentemente de como a vinculação foi feita.
- O valor da cobrança em USD é recalculado pelo pagamento real. O campo
amountFiatUSDé sobrescrito com o valor efetivamente recebido, pela cotação do momento da vinculação. O valor original emamountFiatnão muda. - A taxa é recalculada pelo valor real. Ela é cobrada pela taxa do projeto sobre o valor que você recebeu.