three_ds_required, next_action e liquidação final.
O que o 3DS muda no fluxo
O 3DS adiciona uma etapa assíncrona de autenticação do portador entre o envio do cartão e o resultado final do pagamento. Isso significa que:- o front-end pode precisar pausar para um desafio do banco emissor
- o back-end continua criando a transação normalmente
- o pedido deve permanecer pendente até que webhook ou reconciliação confirmem o estado final
Modelo operacional recomendado
Regras de tratamento de estado
| Estado | Significado | O que o seu sistema deve fazer |
|---|---|---|
pending | o fluxo de cartão começou, mas ainda não terminou | mantenha o checkout em espera |
three_ds_required | a autenticação do emissor ainda é necessária | deixe o Payment Element continuar o desafio |
authorized | o emissor aprovou, mas sua regra de negócio pode ainda esperar outro estado | mantenha pendente, salvo se sua operação libera em autorização |
captured | sucesso final seguro para o lojista | libere o pedido |
refused | o emissor ou adquirente recusou a cobrança | ofereça nova tentativa ou outro meio de pagamento |
canceled | a tentativa foi cancelada durante o fluxo | encerre a tentativa e permita nova cobrança |
three_ds_required como pagamento concluído.
Padrão de front-end
Sempre que possível, deixeelements.submit() orquestrar o 3DS automaticamente.
O que o navegador deve fazer
- exibir estado de envio ou autenticação enquanto
elements.submit()estiver rodando - bloquear envios duplicados durante o desafio
- tratar a resposta imediata como provisória quando o estado ainda não for terminal
- levar o comprador para uma tela de pendência caso o desafio termine, mas a liquidação continue assíncrona
Padrão de back-end
O back-end deve continuar simples: criar a transação, devolver a resposta da Pagou e deixar o webhook decidir a liberação final.Webhook como dono do estado final
O consumidor de webhook deve ser a fonte de verdade para liberação do pedido.Falhas que você deve prever
- O cliente fecha a janela do desafio: mantenha o pedido pendente e reconcilie ou aguarde o webhook.
- O navegador perde a resposta após o desafio: consulte
GET /v2/transactions/{id}antes de pedir nova tentativa. - O emissor recusa após o 3DS: mostre uma falha recuperável e permita outro cartão ou nova tentativa.
- O webhook chega antes de o fluxo do navegador terminar: confie no estado do back-end, não na sessão do browser.
Checklist de produção
- Use um
external_refestável por tentativa de pedido. - Armazene o ID da transação da Pagou retornado pelo back-end.
- Desabilite envio duplicado enquanto o desafio estiver em andamento.
- Libere pedido apenas em estado final como
capturedoupaid. - Reconcilie estados incertos com
GET /v2/transactions/{id}.

