SelectwinDOCS

Recusas de Pagamento (Erros de Cartão)

Quando uma cobrança no cartão é recusada pelo emissor/adquirente (ex.: fundos insuficientes, cartão vencido, senha incorreta), a API retorna HTTP 402 com um envelope de erro específico de pagamento. D

Visão Geral

Quando uma cobrança no cartão é recusada pelo emissor/adquirente (ex.: fundos insuficientes, cartão vencido, senha incorreta), a API retorna HTTP 402 com um envelope de erro específico de pagamento. Diferente dos erros genéricos (ver Tratamento de Erros), o envelope de recusa carrega o motivo da recusa (code), uma mensagem pronta para o comprador (displayMessage, em pt-BR) e um flag de retentabilidade (reversible).

Recusas acontecem nas operações que cobram cartão: criação e captura de Transações e cobranças de Assinaturas.

Envelope de Recusa (HTTP 402)

{
  "error": {
    "status": "Request Failed",
    "statusCode": 402,
    "category": "payment",
    "code": "insufficientFundsError",
    "type": "cardError",
    "message": "The request was valid, but the payment process failed.",
    "details": "Please verify your payment information and try again.",
    "params": [
      { "payment": "Saldo insuficiente para realizar esta compra. Verifique seu limite disponível." }
    ],
    "displayMessage": "Saldo insuficiente para realizar esta compra. Verifique seu limite disponível.",
    "reversible": false
  }
}

Campos

CampoTipoDescrição
error.codestringMotivo da recusa, estável e legível por máquina — use-o na sua lógica (ex.: insufficientFundsError).
error.categorystringSempre payment para recusas de cartão.
error.typestringClasse do erro: cardError, invalidRequestError ou processingError.
error.message / error.detailsstringTexto técnico (inglês) — não mostre ao comprador.
error.displayMessagestringMensagem em pt-BR pronta para exibir ao portador do cartão.
error.paramsarrayDetalhe da recusa por campo (ex.: payment → mensagem).
error.reversiblebooleanSe o adquirente indica que a cobrança pode ser retentada (ver abaixo).
error.status / error.statusCodestring / integer"Request Failed" / 402.

Regra de ouro: trate a recusa pelo error.code e mostre o error.displayMessage ao comprador. Nunca exiba message/details (são técnicos, em inglês).

Catálogo de Códigos de Recusa (type: "cardError")

codedisplayMessage (pt-BR)Causa típica
insufficientFundsErrorSaldo insuficiente para realizar esta compra. Verifique seu limite disponível.Limite/saldo insuficiente
cardDeclinedSeu cartão foi recusado pelo banco. Entre em contato com sua instituição financeira para mais detalhes.Recusa genérica do emissor
expiredCardErrorSeu cartão está vencido. Use um cartão válido ou atualize a data de validade.Cartão vencido
invalidCardNumberNúmero do cartão inválido. Verifique os dados digitados e tente novamente.Número de cartão inválido
invalidExpiryMonthO mês de validade do cartão está incorreto. Verifique os dados e tente novamente.Mês de validade inválido
invalidExpiryYearO ano de validade do cartão está incorreto. Verifique os dados e tente novamente.Ano de validade inválido
invalidPinCodeA senha do cartão está incorreta. Verifique a senha e tente novamente.Senha (PIN) incorreta
authorizationRefusedTransação não autorizada. Entre em contato com seu banco ou tente outro cartão.Autorização recusada pelo emissor
cardCustomerNotAssociatedNenhum cartão ativo encontrado. Adicione um cartão válido para continuar.Sem cartão ativo associado

Quando o motivo não é reconhecido, o padrão é code: "cardDeclined" com displayMessage: "Contate a administradora do cartão e tente pagar novamente."

Retentabilidade (reversible)

O flag error.reversible reflete o que o adquirente informa e determina o que acontece com a transação:

reversibleStatus da transaçãoComportamento
falsefailed (terminal)Recusa definitiva. Para cobrar de novo, inicie uma nova transação (idealmente com outro cartão/forma de pagamento).
trueawaitingFalha potencialmente transitória — a transação é mantida e o sistema reprocessa automaticamente em segundo plano. Acompanhe o resultado pelos webhooks.

Como a recusa também aparece de forma assíncrona

Além da resposta 402, o resultado da cobrança se reflete na transação e nos webhooks:

  • Status da transação: failed (recusa terminal) ou awaiting (recusa reversível, em reprocessamento).
  • Webhook: uma recusa terminal dispara o evento transaction.failed (ver Catálogo de Eventos).
  • Detalhe do adquirente na transação: os dados da tentativa ficam disponíveis no objeto da transação, incluindo acquirer.responseCode (código do emissor) e acquirer.buyerMessage (a mesma mensagem do displayMessage).

Boas Práticas

  1. Keye no error.code, não no texto — message/displayMessage podem mudar.
  2. Mostre error.displayMessage ao comprador; ele já vem localizado e seguro para exibição.
  3. Não retente recusas reversible: false automaticamente no mesmo cartão — peça outro meio de pagamento. Para reversible: true, deixe o reprocessamento em segundo plano agir e escute os webhooks.
  4. Trate insufficientFundsError, expiredCardError e invalidCardNumber com mensagens de orientação ao comprador (corrigir dados, usar outro cartão).
  5. Teste os cenários com os Cartões de Teste (ex.: o cartão de failed) antes de ir para produção.

Notas

  • Outros códigos com type: "invalidRequestError" (também 402) indicam problemas de operação/conta do vendedor, não do cartão do comprador: insufficientEscrowFundsError (saldo do vendedor para transferência), captureTransactionError, voidTransactionError, noActionTaken, sellerAuthorizationRefused (vendedor ainda não habilitado a cobrar).
  • Erros de geração de boleto por dados inválidos retornam 422 com type: "processingError" e code: "serverApiError".

On this page