data depende do recurso e da versão do webhook:
- Nos eventos
transaction.*da versão 1.1,datatem o mesmo formato da consulta da cobrança, com o estado do momento do evento. O motivo da recusa fica dentro desse objeto. - Nos eventos
purchase.*,datatraz só o resumo da Purchase, sem os cartões e sem o motivo. Consulte a Purchase para ver o motivo.
Um erro de validação dos dados enviados recusa a requisição antes de criar a cobrança ou a Purchase, por isso não gera webhook. Esses erros estão em Erros da API de Charges e Erros da API de Purchases.
Onde está o motivo em cada evento
Campos de erro da cobrança
No eventotransaction.failed da versão 1.1, o objeto data tem o mesmo formato da resposta de GET /v1/charges/{id}, com o estado da cobrança no momento do evento. Os campos de erro são:
transactionRequests lista as tentativas da cobrança em cada provedor, da mais recente para a mais antiga. Quando um Fluxo Inteligente tenta mais de um provedor, cada tentativa recusada traz o próprio providerError.
Exemplo de transaction.failed
Evento gerado no Sandbox por uma cobrança com cartão de final 3 (cartão expirado), conforme Teste sua integração. O exemplo mostra apenas os campos relevantes para o erro:
networkDeniedReason e networkDeniedMessage trazem o código e a mensagem do provedor que processou a cobrança.
Recusa de uma Purchase com múltiplos cartões
O eventopurchase.failed traz só o resumo da Purchase, sem a lista de cartões e sem o motivo. Ao receber o evento, consulte a Purchase e leia payments[].declineReason do cartão recusado.
1
Receba o evento
2
Consulte a Purchase
3
Leia o declineReason do cartão recusado
Trecho da resposta com o cartão recusado:
declineReason traz só o código, sem mensagem, e pode vir ausente. Os valores possíveis estão em Erros da API de Purchases. Quando o cartão tem chargeId, consulte a cobrança em GET /v1/charges/{id} para ver os detalhes da recusa no provedor. Sem chargeId, a cobrança não chegou a ser criada e o motivo disponível é o próprio declineReason.
Como mapear os erros no seu sistema
- Identifique o evento de falha:
transaction.failedpara cobranças epurchase.failedpara Purchases. - Leia o código padronizado:
data.error.declinedCodena cobrança oupayments[].declineReasonna Purchase. - Decida a ação pela tabela de declinedCode, que indica se o código é retentável e o que orientar ao comprador.
- Trate um código que você não conhece, ou a ausência de código, como recusa genérica (
generic). A Malga pode adicionar códigos novos. Nunca conclua que o pagamento foi aprovado só porque não háerroroudeclineReason: use ostatus. - Para cobranças com antifraude, leia também
transactionRequests[].fraudAnalysis.status. - Guarde
networkDeniedReason,networkDeniedMessagee oidda cobrança ou da Purchase para abrir um chamado com o suporte, se precisar.