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

286 lines
7.3 KiB
Markdown

# 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:**
```typescript
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
```json
{
"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
```json
{
"$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
```typescript
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:
```jsx
<button>Continuar</button>
```
#### Estado Loading:
```jsx
<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! 🚀