Quando um pagamento falha, o Dodo Payments informa por quê através de um
error_code padronizado e um error_message legível para humanos. Este guia mostra como ler esses campos, decidir se vale a pena tentar novamente e recuperar o pagamento sem expor informações sensíveis aos clientes.Como o Dodo Payments Relata uma Falha
Todo pagamento falho — seja uma compra única ou uma renovação de assinatura — possui os mesmos campos de falha no objeto de pagamento:| Campo | Tipo | Descrição |
|---|---|---|
status | string | failed para um pagamento falho. Outros estados de não sucesso incluem cancelled, requires_customer_action e requires_payment_method. |
error_code | string | null | O motivo da falha padronizado, por exemplo INSUFFICIENT_FUNDS ou PROCESSING_ERROR. Veja a referência de Falhas de Transação para a lista completa. |
error_message | string | null | Uma explicação legível da falha. |
retry_attempt | integer | 0 para a cobrança original. 1 ou superior identifica uma tentativa de renovação de assinatura agendada. |
error_code e error_message são null até que um pagamento realmente falhe. Sempre verifique primeiro status, depois leia os campos de erro.O Webhook payment.failed
A maneira mais confiável de detectar uma falha é o webhook payment.failed. O evento encapsula o objeto de pagamento completo em data:
payment.failed payload
error_code e faz o roteamento com base nele:
Decida Se Deve Tentar Novamente: Soft vs. Hard Declines
Oerror_code informa se vale a pena tentar novamente o mesmo método de pagamento.
| Tipo de declínio | O que significa | O que fazer |
|---|---|---|
| Soft decline | Temporário ou corrigível (por exemplo INSUFFICIENT_FUNDS, PROCESSING_ERROR, NETWORK_ERROR, TRY_AGAIN_LATER). | Tentar novamente após um atraso, ou quando o cliente corrige seu input, pode ter sucesso. |
| Hard decline | Terminal (por exemplo STOLEN_CARD, LOST_CARD, DO_NOT_HONOR, FRAUDULENT). | Não tente novamente o mesmo cartão. Peça ao cliente um método de pagamento diferente. |
error_code.
Lidando com Falhas na Compra ou na Renovação
Como você se recupera depende de se o cliente está presente.- At checkout (customer present)
- On subscription renewal (customer not present)
O cliente está ativamente efetuando a compra. Apresente uma mensagem clara e permita que ele tente novamente imediatamente ou use outro cartão.
requires_payment_method— o cliente nunca forneceu um método de pagamento: não inseriu os dados do cartão ou foi solicitado e não tomou nenhuma ação. Isso geralmente é uma saída de checkout, não um declínio — reengaje o cliente para concluir o pagamento (veja Recuperação de Carrinho Abandonado).requires_customer_action— é necessária autenticação adicional (como 3DS); peça ao cliente para completá-la. Veja manipulação do 3D Secure.
Tentando um Pagamento Falho Novamente
- Assinaturas: Ative Tentativas de Pagamento de Assinatura para recuperar “declínios suaves” sem trabalho de integração. Você também pode acionar a recuperação fazendo com que o cliente atualize seu método de pagamento via a API Update Payment Method, que cobra quaisquer débitos pendentes.
- Pagamentos únicos: Reenviar o checkout ou
payment_linkpara que o cliente possa tentar novamente com um método diferente. Não há tentativa automática para pagamentos únicos.
Apresentando Erros aos Clientes com Segurança
Mostre uma mensagem amigável aos clientes — nunca o motivo rawerror_code.
Customer-facing messaging
Relacionados
Transaction Failures
Cada código de declínio, seu tipo e a ação recomendada.
Error Codes
Erros de lógica de negócios e API que não são declínios de cartões.
Subscription Payment Retries
Recuperação automática de declínios suaves nas renovações de assinaturas.
Subscription Dunning
Sequências de email que recuperam hard declines.
Payment Webhooks
Esquema completo de payload para eventos de pagamento.
Testing Failures
Cartões de teste que simulam declínios e falhas de renovação.