282 lines
7.4 KiB
Markdown
282 lines
7.4 KiB
Markdown
# Implementação Mercado Pago - Checkout SaveInMed
|
|
|
|
## 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.
|
|
|
|
---
|
|
|
|
|
|
## Visão Geral
|
|
|
|
Implementação completa da integração com Mercado Pago na aplicação SaveInMed, seguindo a estrutura da API BFF existente e o curl fornecido.
|
|
|
|
## Arquivos Implementados
|
|
|
|
### 1. Serviço Mercado Pago (`src/services/mercadoPagoService.ts`)
|
|
|
|
**Responsabilidades:**
|
|
- Criar preferências de pagamento via BFF
|
|
- Verificar status de pagamentos
|
|
- Processar notificações de webhook
|
|
- Validar dados antes do envio
|
|
- Formatar valores e dados
|
|
|
|
**Principais Métodos:**
|
|
```typescript
|
|
// Criar preferência de pagamento
|
|
criarPreferencia(pedidoId, itens, dadosComprador)
|
|
|
|
// Verificar status do pagamento
|
|
verificarStatusPagamento(paymentId)
|
|
|
|
// Processar notificação webhook
|
|
processarNotificacao(notificationData)
|
|
|
|
// Validar dados da preferência
|
|
validarDadosPreferencia(pedidoId, itens)
|
|
```
|
|
|
|
**Endpoint BFF Utilizado:**
|
|
- `POST https://bff-dev.saveinmed.com.br/mercadopago/preference`
|
|
- `GET https://bff-dev.saveinmed.com.br/mercadopago/payment/{id}`
|
|
- `POST https://bff-dev.saveinmed.com.br/mercadopago/webhook`
|
|
|
|
### 2. Componente Botão Mercado Pago (`src/components/MercadoPagoButton.tsx`)
|
|
|
|
**Funcionalidades:**
|
|
- Botão estilizado para pagamento via Mercado Pago
|
|
- Validação automática dos dados
|
|
- Estados de loading e erro
|
|
- Redirecionamento automático para o checkout do Mercado Pago
|
|
- Callbacks para sucesso e erro
|
|
|
|
**Props:**
|
|
```typescript
|
|
interface MercadoPagoButtonProps {
|
|
pedidoId: string
|
|
itens: Array<{produto, quantidade}>
|
|
dadosComprador?: {nome, email}
|
|
onSuccess?: (preference_id, init_point) => void
|
|
onError?: (error) => void
|
|
disabled?: boolean
|
|
}
|
|
```
|
|
|
|
### 3. Páginas de Retorno
|
|
|
|
#### Página de Sucesso (`src/app/pagamento/sucesso/page.tsx`)
|
|
- Processa retorno de pagamento aprovado
|
|
- Exibe detalhes do pagamento e pedido
|
|
- Atualiza status do pedido
|
|
- Interface amigável com próximos passos
|
|
|
|
#### Página de Erro (`src/app/pagamento/erro/page.tsx`)
|
|
- Trata erros de pagamento
|
|
- Explica motivos comuns de falha
|
|
- Oferece sugestões e alternativas
|
|
- Botões para tentar novamente ou escolher outro método
|
|
|
|
### 4. Integração no Checkout (`src/app/checkout/page.tsx`)
|
|
|
|
**Modificações Realizadas:**
|
|
- Adicionada opção "Mercado Pago" na seleção de pagamento
|
|
- Lógica específica para processar pagamento via Mercado Pago
|
|
- Botão personalizado na etapa de confirmação
|
|
- Fluxo diferenciado para redirecionamento externo
|
|
|
|
## Estrutura de Dados
|
|
|
|
### Preferência Mercado Pago
|
|
```json
|
|
{
|
|
"back_urls": {
|
|
"failure": "https://saveinmed.com.br/pagamento/erro",
|
|
"success": "https://saveinmed.com.br/pagamento/sucesso"
|
|
},
|
|
"external_reference": "pedido-123",
|
|
"items": [
|
|
{
|
|
"currency_id": "BRL",
|
|
"id": "item-123",
|
|
"quantity": 1,
|
|
"title": "Nome do Produto",
|
|
"unit_price": 99.90
|
|
}
|
|
],
|
|
"notification_url": "https://bff.saveinmed.com.br/mercadopago/webhook",
|
|
"payer": {
|
|
"email": "cliente@example.com",
|
|
"name": "Cliente",
|
|
"surname": "Teste"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Resposta da API
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": {...},
|
|
"preference_id": "123456789-abc123",
|
|
"init_point": "https://www.mercadopago.com.br/checkout/v1/redirect?pref_id=123456789-abc123",
|
|
"sandbox_init_point": "https://sandbox.mercadopago.com.br/checkout/v1/redirect?pref_id=123456789-abc123"
|
|
}
|
|
```
|
|
|
|
## Fluxo de Pagamento
|
|
|
|
### 1. Usuário Seleciona Mercado Pago
|
|
- Na etapa 2 do checkout, seleciona "Mercado Pago"
|
|
- Sistema avança para etapa 3 (confirmação)
|
|
|
|
### 2. Confirmação e Redirecionamento
|
|
- Usuário confirma dados na etapa 3
|
|
- Clica no botão "Pagar via Mercado Pago"
|
|
- Sistema cria preferência via BFF
|
|
- Redireciona para checkout do Mercado Pago
|
|
|
|
### 3. Processamento no Mercado Pago
|
|
- Usuário escolhe método (cartão, PIX, boleto)
|
|
- Completa o pagamento
|
|
- Mercado Pago processa transação
|
|
|
|
### 4. Retorno e Notificação
|
|
- Usuário retorna para URLs configuradas
|
|
- Webhooks notificam status via BFF
|
|
- Sistema atualiza pedido conforme resultado
|
|
|
|
## URLs de Retorno
|
|
|
|
### Sucesso
|
|
`https://saveinmed.com.br/pagamento/sucesso`
|
|
|
|
**Parâmetros recebidos:**
|
|
- `payment_id`: ID do pagamento no Mercado Pago
|
|
- `status`: Status do pagamento (approved, pending, etc.)
|
|
- `external_reference`: ID do pedido no sistema
|
|
- `preference_id`: ID da preferência criada
|
|
|
|
### Erro
|
|
`https://saveinmed.com.br/pagamento/erro`
|
|
|
|
**Parâmetros recebidos:**
|
|
- `payment_id`: ID do pagamento (se disponível)
|
|
- `status`: Status do erro (rejected, cancelled, etc.)
|
|
- `status_detail`: Detalhes específicos do erro
|
|
- `external_reference`: ID do pedido
|
|
|
|
## Webhook de Notificação
|
|
|
|
**Endpoint:** `https://bff.saveinmed.com.br/mercadopago/webhook`
|
|
|
|
**Responsabilidade do BFF:**
|
|
- Receber notificações do Mercado Pago
|
|
- Validar autenticidade das notificações
|
|
- Atualizar status dos pagamentos no sistema
|
|
- Processar ações automáticas (aprovação de pedidos, etc.)
|
|
|
|
## Validações Implementadas
|
|
|
|
### 1. Dados da Preferência
|
|
- Pedido ID obrigatório
|
|
- Pelo menos um item obrigatório
|
|
- Preços maiores que zero
|
|
- Quantidades válidas
|
|
- IDs de produtos presentes
|
|
|
|
### 2. Estados do Botão
|
|
- Desabilitado se dados inválidos
|
|
- Loading durante criação da preferência
|
|
- Erro em caso de falha na API
|
|
|
|
### 3. Tratamento de Erros
|
|
- Mensagens específicas por tipo de erro
|
|
- Sugestões de correção
|
|
- Informações técnicas para debug
|
|
|
|
## Benefícios da Implementação
|
|
|
|
### 1. Para o Usuário
|
|
- Múltiplas opções de pagamento em um só lugar
|
|
- Interface familiar do Mercado Pago
|
|
- Segurança e confiabilidade
|
|
- Parcelamento flexível
|
|
|
|
### 2. Para o Sistema
|
|
- Reduz complexidade de PCI compliance
|
|
- Aproveitamento da infraestrutura do Mercado Pago
|
|
- Notificações automáticas de status
|
|
- Integração via BFF existente
|
|
|
|
### 3. Para o Negócio
|
|
- Maior conversão de vendas
|
|
- Redução de abandono de carrinho
|
|
- Suporte a diversos métodos de pagamento
|
|
- Gestão centralizada via Mercado Pago
|
|
|
|
## Configurações Necessárias
|
|
|
|
### 1. No BFF
|
|
- Configurar credenciais do Mercado Pago
|
|
- Implementar endpoints de preferência e webhook
|
|
- Validar autenticidade das notificações
|
|
|
|
### 2. No Mercado Pago
|
|
- Configurar URLs de retorno
|
|
- Configurar URL de webhook
|
|
- Configurar métodos de pagamento aceitos
|
|
|
|
### 3. No Frontend
|
|
- URLs de sucesso e erro configuradas
|
|
- Componente de botão implementado
|
|
- Serviço de API implementado
|
|
|
|
## Monitoramento e Debug
|
|
|
|
### 1. Logs Implementados
|
|
- Criação de preferências
|
|
- Respostas da API
|
|
- Erros e exceções
|
|
- Redirecionamentos
|
|
|
|
### 2. Informações para Debug
|
|
- IDs de transação
|
|
- Status detalhados
|
|
- Parâmetros de retorno
|
|
- Dados técnicos nas páginas de erro
|
|
|
|
## Próximos Passos
|
|
|
|
### 1. Testes
|
|
- Testar fluxo completo em sandbox
|
|
- Validar webhooks
|
|
- Testar cenários de erro
|
|
|
|
### 2. Monitoramento
|
|
- Implementar métricas de conversão
|
|
- Monitorar erros e falhas
|
|
- Acompanhar performance
|
|
|
|
### 3. Melhorias
|
|
- Implementar retry automático
|
|
- Adicionar analytics
|
|
- Otimizar UX baseado em dados
|
|
|
|
## Conclusão
|
|
|
|
A implementação do Mercado Pago está completa e seguindo as melhores práticas:
|
|
|
|
- ✅ Integração via BFF existente
|
|
- ✅ Componentes reutilizáveis
|
|
- ✅ Tratamento completo de erros
|
|
- ✅ Páginas de retorno implementadas
|
|
- ✅ Validações robustas
|
|
- ✅ Logging detalhado
|
|
- ✅ Interface intuitiva
|
|
|
|
O sistema está pronto para testes e deploy, oferecendo uma experiência de pagamento moderna e segura aos usuários do SaveInMed.
|