7.3 KiB
7.3 KiB
IMPLEMENTAÇÃO DE PAGAMENTOS - CHECKOUT
Status (pronto x faltando)
Pronto
- Conteúdo descrito neste documento.
Faltando
- Confirmar no código o estado real das funcionalidades e atualizar esta seção conforme necessário.
🎯 Funcionalidade Implementada
Integração completa de pagamentos na página /checkout com API BFF, incluindo criação de pagamentos e mock de processamento.
🛠️ Arquivos Criados/Modificados
1. Novo Serviço de Pagamentos
src/services/pagamentoApiService.ts
Funcionalidades principais:
- ✅ Criar pagamento:
POST /pagamentos - ✅ Confirmar pagamento:
PATCH /pagamentos/:id/confirmar - ✅ Buscar pagamento:
GET /pagamentos/:id - ✅ Listar por pedido:
GET /pagamentos?pedidos=ID - ✅ Mock de processamento: Simulação temporária
Interface de dados:
interface PagamentoApiData {
status: 'pendente' | 'pago' | 'falhou';
metodo: 'pix' | 'credito' | 'debito';
valor: number;
pedidos: string; // ID do pedido
}
2. Página de Checkout Atualizada
src/app/checkout/page.tsx
Novos estados:
pagamentoId: ID do pagamento criadoprocessandoPagamento: Loading durante criação
Função atualizada:
proximaEtapa(): Agora async, cria pagamento na etapa 2→3
🔄 Fluxo de Pagamento
Etapa 1: Dados de Entrega
Usuário preenche endereço → Clica "Continuar" → Avança para Etapa 2
Etapa 2: Forma de Pagamento
Usuário seleciona método (PIX/Crédito/Débito) →
Clica "Continuar" →
[NOVO] Cria pagamento na API →
[NOVO] Processa mock →
Avança para Etapa 3
Etapa 3: Confirmação
Mostra resumo completo + status do pagamento →
Usuário confirma pedido final
📊 Dados Enviados para API
Payload de Criação
{
"status": "pendente",
"metodo": "pix", // ou "credito", "debito"
"valor": 71.85,
"pedidos": "68efaeb000194d1a94bf"
}
Mapeamento de Métodos
- Interface → API:
"cartao"→"credito""pix"→"pix""boleto"→"debito"
Resposta da API
{
"$id": "pagamento_id_123456",
"status": "pendente",
"metodo": "pix",
"valor": 71.85,
"pedidos": "68efaeb000194d1a94bf",
"$createdAt": "2025-10-15T10:30:00.000Z"
}
🎭 Mock de Processamento
Funcionalidade Temporária
processarPagamentoMock: async (metodo, valor) => {
// Simula delay de 2 segundos
await new Promise(resolve => setTimeout(resolve, 2000));
// 90% de sucesso simulado
const sucesso = Math.random() > 0.1;
if (sucesso) {
return {
success: true,
transactionId: `mock_${Date.now()}_${randomId}`
};
} else {
return {
success: false,
error: 'Falha na simulação do pagamento'
};
}
}
Objetivo: Simular processamento real até integração com gateway de pagamento.
🎨 Interface Atualizada
Botão "Continuar" na Etapa 2
Estado Normal:
<button>Continuar</button>
Estado Loading:
<button disabled>
<spinner /> Processando Pagamento...
</button>
Etapa 3 - Confirmação
Informações do Pagamento:
Forma de Pagamento
├── Método: PIX
├── Valor: R$ 71,85
└── ID do Pagamento: 68efaeb00019...
Status do Pagamento
✅ Pagamento criado com sucesso!
Status: Pendente - Aguardando confirmação
💡 Para PIX: Escaneie o QR Code ou copie o código quando disponível
🔍 Logs de Debug
Console Output Esperado
💳 [CHECKOUT] Criando pagamento: {metodo: "pix", valor: 71.85, pedidoId: "..."}
💳 Criando pagamento na API: {status: "pendente", metodo: "pix", valor: 71.85, pedidos: "..."}
✅ Pagamento criado com sucesso: {$id: "...", status: "pendente", ...}
🎭 [CHECKOUT] Iniciando processamento mock...
🎭 MOCK: Processando pagamento... {metodo: "pix", valor: 71.85}
✅ MOCK: Pagamento processado com sucesso: mock_1729012345_abc123
✅ [CHECKOUT] Pagamento processado (mock): mock_1729012345_abc123
🌐 Requisições de Rede
Criação de Pagamento
POST https://bff-dev.saveinmed.com.br/api/v1/pagamentos
Authorization: Bearer <token>
Content-Type: application/json
{
"status": "pendente",
"metodo": "pix",
"valor": 71.85,
"pedidos": "68efaeb000194d1a94bf"
}
Futura Confirmação (endpoint disponível)
PATCH https://bff-dev.saveinmed.com.br/api/v1/pagamentos/{id}/confirmar
Authorization: Bearer <token>
🛡️ Tratamento de Erros
Cenários Cobertos
- Token ausente/inválido → Erro de autenticação
- Pedido ID não encontrado → Erro antes da criação
- Falha na API → Mensagem de erro específica
- Falha no mock → Simulação de erro de pagamento
- Erro de rede → Erro de conexão
Mensagens de Feedback
- ✅ Sucesso: "Pagamento criado com sucesso!"
- ✅ Mock sucesso: "Pagamento processado! ID: mock_12345..."
- ❌ Erro API: "Erro ao criar pagamento: [mensagem]"
- ❌ Erro mock: "Falha no processamento do pagamento (simulação)"
- ❌ Erro geral: "Erro ao processar pagamento. Tente novamente."
🧪 Como Testar
Teste Completo do Fluxo
- Adicione produtos ao carrinho
- Clique "Finalizar Compra" (cria pedido)
- Preencha dados de entrega e clique "Continuar"
- Selecione método de pagamento (PIX/Crédito/Débito)
- Clique "Continuar" → Observe criação do pagamento
- Aguarde processamento mock (2 segundos)
- Verifique informações na etapa de confirmação
Verificações no Network
- ✅
POST /pagamentos→ Status 200 - ✅ Body com dados corretos
- ✅ Response com ID do pagamento
Verificações na Interface
- ✅ Loading no botão durante processamento
- ✅ Toast de sucesso/erro
- ✅ ID do pagamento na confirmação
- ✅ Status "Pendente" exibido
📱 Estados da Interface
Durante Criação de Pagamento
[Botão] ⟳ Processando Pagamento... (disabled)
[Toast] 💳 Criando pagamento...
Após Sucesso
[Toast] ✅ Pagamento criado com sucesso!
[Toast] ✅ Pagamento processado! ID: mock_...
[Tela] Avança para etapa 3 com informações do pagamento
Após Erro
[Toast] ❌ Erro ao criar pagamento: [detalhes]
[Botão] Volta ao estado normal para retry
🔮 Próximos Passos
Integração Real de Pagamento
- Substituir mock por gateway real (Stripe, PagSeguro, etc.)
- Implementar webhooks para confirmação automática
- Adicionar QR Code para PIX
- Implementar retry de pagamentos falhados
Funcionalidades Adicionais
- Histórico de pagamentos por pedido
- Cancelamento de pagamentos
- Reembolsos via API
- Notificações de status
✅ Resultados
Funcionalidade
- ✅ API BFF integrada para pagamentos
- ✅ Fluxo completo implementado
- ✅ Mock funcional até integração real
- ✅ Estados de loading e feedback
UX/UI
- ✅ Feedback visual durante processamento
- ✅ Informações claras na confirmação
- ✅ Tratamento de erros robusto
- ✅ Flow intuitivo para o usuário
Integração
- ✅ Dados consistentes entre pedido e pagamento
- ✅ Autenticação via JWT
- ✅ Logs detalhados para debug
- ✅ Preparado para gateway real
O sistema de pagamentos está 100% funcional com mock e pronto para integração real com gateways de pagamento! 🚀