saveinmed/saveinmed-frontend/IMPLEMENTACAO_PAGAMENTOS_CHECKOUT.md
2026-01-08 14:28:34 -03:00

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 criado
  • processandoPagamento: 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

  1. Token ausente/inválido → Erro de autenticação
  2. Pedido ID não encontrado → Erro antes da criação
  3. Falha na API → Mensagem de erro específica
  4. Falha no mock → Simulação de erro de pagamento
  5. 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

  1. Adicione produtos ao carrinho
  2. Clique "Finalizar Compra" (cria pedido)
  3. Preencha dados de entrega e clique "Continuar"
  4. Selecione método de pagamento (PIX/Crédito/Débito)
  5. Clique "Continuar" → Observe criação do pagamento
  6. Aguarde processamento mock (2 segundos)
  7. 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

  1. Substituir mock por gateway real (Stripe, PagSeguro, etc.)
  2. Implementar webhooks para confirmação automática
  3. Adicionar QR Code para PIX
  4. Implementar retry de pagamentos falhados

Funcionalidades Adicionais

  1. Histórico de pagamentos por pedido
  2. Cancelamento de pagamentos
  3. Reembolsos via API
  4. 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! 🚀