275 lines
No EOL
7.1 KiB
Markdown
275 lines
No EOL
7.1 KiB
Markdown
# IMPLEMENTAÇÃO DE PAGAMENTOS - CHECKOUT
|
|
|
|
## 🎯 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! 🚀 |