Recusas de Pagamento
A criação de uma cobrança na Selectwin é assíncrona. Quando você chama POST /v1/transactions
Visão Geral
A criação de uma cobrança na Selectwin é assíncrona. Quando você chama POST /v1/transactions
(ou cria/renova uma Assinatura), a API responde imediatamente com
201 Created e a transação nasce com status: "pending". A cobrança junto ao adquirente é
processada em segundo plano.
Por isso, uma recusa de cartão normalmente NÃO chega como um erro HTTP síncrono nessa chamada. O resultado da cobrança — incluindo uma recusa — aparece de duas formas:
- No objeto da transação, cujo
statuspassa afailed(recusa). - Em um webhook: a recusa dispara o evento
transaction.failed(ver Catálogo de Eventos).
Por que assim? A orquestração pode tentar mais de uma rota/adquirente antes de concluir o resultado. Acompanhar a transação pelos webhooks é o padrão recomendado — veja Proibição de Polling.
Como acompanhar o resultado da cobrança
| Sinal | Onde aparece | Significado |
|---|---|---|
status: "pending" | resposta 201 da criação | Cobrança ainda em processamento |
status: "approved" | objeto da transação + webhook transaction.approved | Pagamento aprovado |
status: "failed" | objeto da transação + webhook transaction.failed | Cobrança recusada |
Os status possíveis de uma transação incluem pending, pre-authorized, approved, failed,
refused, canceled, refunded, chargeback, dispute, fraud-review, analyzing e awaiting.
O envelope de erro 402 (Payment Required)
Em superfícies síncronas de pagamento, uma falha de processamento pode retornar HTTP 402 com o
envelope de erro padrão (os mesmos campos de qualquer erro — status, statusCode, category,
code, message, resource; ver Tratamento de Erros):
{
"error": {
"status": "Payment Required",
"statusCode": 402,
"category": "payment",
"code": "paymentDeclined",
"message": "The payment was declined by the issuer.",
"resource": "payorch"
}
}Importante: o envelope de erro não carrega os campos
type,displayMessagenemreversible. Esses não fazem parte do contrato de erro público. Trate o resultado peloerror.code(em erros síncronos) e pelostatusda transação + webhooks (no fluxo assíncrono de criação).
Boas Práticas
- Não faça polling para descobrir o resultado — escute os webhooks
transaction.approved/transaction.failed(ver Proibição de Polling). - Keye no
error.code(em respostas de erro síncronas) e nostatusda transação, não no texto demessage(que pode mudar). - Em caso de recusa (
failed), para cobrar de novo inicie uma nova transação — idealmente com outro cartão ou forma de pagamento. - Teste os cenários com os Cartões de Teste (ex.: o cartão de
failed) antes de ir para produção.
Notas
- Erros de configuração/conta (ex.: nenhum provedor configurado para o modo solicitado) retornam
422comcode: "providerNotConfigured"eresource: "payorch". - O catálogo de
error.codepor recurso (com o status HTTP de cada um) está em Catálogo de Códigos de Erro.