Saltar para o conteúdo principal
Quando um emissor ou um adquirente recusa um pagamento, o Therius retorna um status declined na resposta síncrona e dispara um webhook payment.refused. Ambos trazem um objeto refusalCode que diz por que o pagamento falhou e o que fazer em seguida.

O objeto refusalCode

Somente reasonCode e recoveryAction são seguros para construir lógica. originalReasonCode / originalReason são diagnósticos de repasse e seu formato não é estável entre provedores.

recoveryAction

O Therius classifica cada recusa em uma de quatro ações de recuperação para que o seu checkout possa responder sem codificar manualmente uma decisão para os mais de 60 códigos.

retry

A recusa pode se resolver em uma segunda tentativa — uma mensagem malformada ou fora de hora, uma falha do sistema, ou uma resposta genérica do emissor (incluindo “Do not honor”). Refazer o mesmo cartão uma vez é razoável. Sempre limite as novas tentativas a um número fixo pequeno — não faça loops.

switch_method

Refazer este cartão não vai ajudar (fundos insuficientes, cartão expirado, cartão restrito), mas um método de pagamento diferente pode ter sucesso. Peça ao cliente para tentar outro cartão ou um método alternativo.

terminal

Um bloqueio definitivo — cartão a reter/perdido/roubado, conta encerrada, suspeita de fraude, ou uma ordem de revogação. Não ofereça uma nova tentativa nem um método alternativo. Mostre uma mensagem de falha neutra e pare.

update_data

Tentar de novo sem mudanças vai falhar até que um dado informado pelo comprador seja corrigido, como CPF/CNPJ, chave Pix, conta bancária ou nome. Peça ao comprador para corrigir o dado e envie novamente. Usado pelos métodos de pagamento alternativos.
Um reasonCode não reconhecido ou ausente é reportado como switch_method — o padrão seguro, já que refazer cegamente uma recusa não classificada arrisca penalidades por tentativas excessivas das bandeiras de cartão.
As bandeiras de cartão monitoram as tentativas de autorização repetidas em um cartão recusado (Visa VAMP, Mastercard excessive-attempts). Nunca refaça uma recusa terminal, e nunca refaça nenhuma recusa mais do que um número pequeno e fixo de vezes.

Reroteamento automático

A maioria das recusas temporárias é refeita pelo Therius antes de você as ver — o roteamento inteligente leva o pagamento em cascata para a próxima conexão da rota. Portanto, a recusa que você recebe na resposta é o resultado depois de o Therius já ter esgotado as alternativas daquela rota. As recusas definitivas (terminal acima, além de algumas outras como PIN incorreto e falhas de CVV) são retornadas imediatamente e nunca são rerroteadas, porque refazê-las em outro adquirente só acrescentaria violações da bandeira.

Assinaturas e gestão de cobranças

Para as renovações de assinatura, o Therius aplica a mesma classificação internamente: uma recusa terminal para a sequência de gestão de cobranças imediatamente (a assinatura vai para suspended e dispara subscription.suspended), em vez de desperdiçar as novas tentativas restantes em um cartão que o emissor nunca vai aprovar.

Referência de códigos de recusa

Os valores de reasonCode normalizados que o Therius pode retornar, com seu significado e sua recoveryAction padrão. }

Códigos de métodos de pagamento alternativos

As recusas de métodos de pagamento alternativos trazem um reasonCode APM_*. O prefixo é reservado: um valor APM_* nunca é um código de cartão. Uma recusa de método alternativo que o Therius não consegue classificar é reportada como APM_DECLINED, e uma falha técnica como APM_TECHNICAL_ERROR. O código próprio do provedor continua disponível em originalReasonCode.

Pagamentos expirados e cancelados

Quando um pagamento de método alternativo termina como expired ou canceled porque o pagador não pagou ou desistiu, o pagamento traz APM_EXPIRED ou APM_PAYER_CANCELED, e GET /payment/inquiry devolve um refusalCode com recoveryAction: retry. Um cancelamento que você solicita pela API não traz motivo.

Reroteamento automático em métodos alternativos

O roteamento inteligente passa um pagamento de método alternativo para o próximo passo da rota apenas quando a recusa pertence à conexão: método não habilitado, limite do lojista, país ou banco não suportado, problema de configuração, ou provedor indisponível. Recusas causadas pelo pagador ou pelos dados dele, como saldo insuficiente ou documento inválido, são devolvidas diretamente a você, porque outro provedor daria a mesma resposta.
Construa o tratamento exaustivo sobre recoveryAction, não sobre códigos individuais, e trate os quatro valores. Novos códigos APM_* podem ser adicionados com o tempo; um código desconhecido sempre vem com um recoveryAction válido.