# Diagnóstico Técnico - Problema de Redirecionamento PIX
**Data:** 2025  
**Sistema:** Checkout Pro 2025  
**Problema:** Pagamento PIX aprovado não redireciona automaticamente

---

## 🔍 ANÁLISE COMPLETA DO FLUXO

### **1. VERIFICAÇÃO DA CRIAÇÃO DO PAGAMENTO PIX**

**Arquivo:** `backend/process_payment_pix.php`

**Linha 192-206:** Dados do pagamento sendo preparados:
```php
$paymentData = [
    "transaction_amount" => ...,
    "description" => ...,
    "payment_method_id" => "pix",
    "external_reference" => $external_reference,
    "payer" => [...]
];
```

**❌ PROBLEMA CRÍTICO IDENTIFICADO:**

**O campo `notification_url` NÃO está sendo enviado na criação do pagamento PIX!**

O array `$paymentData` não contém a URL de notificação (`notification_url`), o que significa que:
- O Mercado Pago **não sabe para onde enviar** a notificação quando o pagamento for aprovado
- O webhook (`backend/webhook.php`) **nunca será chamado** automaticamente
- A transação no banco **permanece com status 'Pendente'** mesmo após o pagamento ser aprovado

**EVIDÊNCIA:**
- Busca por `notification_url` no arquivo retornou 0 resultados
- Busca por `webhook` no arquivo retornou 0 resultados
- Nenhuma URL de callback está sendo configurada

---

### **2. ANÁLISE DO WEBHOOK (`backend/webhook.php`)**

**Status:** ✅ **LÓGICA CORRETA** (mas não está sendo chamado)

**Linha 45:** Recebe `payment_id` da notificação do Mercado Pago:
```php
$payment_id = $notification['data']['id'];
```

**Linha 54:** Atualiza a transação usando `payment_id`:
```php
UPDATE transacoes SET status = 'Aprovado', notificado = 1 WHERE payment_id = :payment_id
```

**Análise:**
- ✅ A lógica está correta (busca por `payment_id`, que é salvo na linha 226-231 de `process_payment_pix.php`)
- ✅ Entende o status `approved` (linha 52)
- ✅ Possui logs de erro (`error_log` nas linhas 31, 85, 121, 126)
- ❌ **Mas nunca é chamado porque `notification_url` não foi configurado**

**LOG DE ERRO:**
O código possui `error_log`, mas como o webhook nunca é chamado, não haverá logs para analisar.

---

### **3. ANÁLISE DA API DE CONSULTA (`backend/api/check_status.php`)**

**Status:** ✅ **CÓDIGO CORRETO**

**Linha 27:** Query SQL está correta:
```php
SELECT status, produto_id FROM transacoes WHERE id = :id LIMIT 1
```

**Linha 38-41:** Retorna JSON válido:
```php
echo json_encode([
    'status' => $transacao['status'],
    'produto_id' => $transacao['produto_id']
]);
```

**Análise:**
- ✅ Recebe `transacao_id` via `$_GET` (linha 16)
- ✅ Query SQL correta
- ✅ Retorna JSON válido com status
- ✅ O frontend em `pix.php` está verificando `data.status === 'Aprovado'` corretamente

**Teste Mental:**
- Se o banco tiver status = 'Aprovado', a API retorna `{"status": "Aprovado", "produto_id": X}`
- O JavaScript em `pix.php` verifica `data.status === 'Aprovado'` (linha do polling)
- **Mas como o webhook nunca atualiza o banco, o status sempre permanece 'Pendente'**

---

### **4. ANÁLISE DO BANCO DE DADOS**

**Campo `payment_id`:**
- ✅ **Está sendo salvo** na linha 226-231 de `process_payment_pix.php`:
  ```php
  UPDATE transacoes SET payment_id = :payment_id WHERE id = :id
  ```

**Campo `status`:**
- ❌ **Nunca é atualizado para 'Aprovado'** porque o webhook não é chamado

**Estrutura:**
- ✅ A coluna `payment_id` existe (conforme `checkout_pro_2025_completo.sql` linha 122)
- ✅ A coluna `status` existe (linha 119)
- ✅ O webhook busca corretamente por `payment_id`

---

## 🎯 CAUSA RAIZ IDENTIFICADA

### **CAUSA PRIMÁRIA:**

**O campo `notification_url` não está sendo enviado na criação do pagamento PIX no arquivo `backend/process_payment_pix.php`.**

**Consequência em Cadeia:**
1. ❌ Mercado Pago cria o pagamento PIX sem saber para onde notificar
2. ❌ Quando o pagamento é aprovado, o Mercado Pago não envia notificação para o servidor
3. ❌ O webhook `backend/webhook.php` nunca é executado
4. ❌ A transação no banco permanece com status 'Pendente'
5. ❌ A API `check_status.php` sempre retorna `{"status": "Pendente"}`
6. ❌ O JavaScript em `pix.php` nunca detecta 'Aprovado', então nunca redireciona

---

## 📊 DIAGRAMA DO PROBLEMA

```
[Cliente paga PIX] 
    ↓
[Mercado Pago aprova] ✅ Dinheiro saiu da conta
    ↓
[Sem notification_url configurado]
    ↓
[Mercado Pago: "Não sei para onde avisar"] ❌
    ↓
[Webhook nunca é chamado] ❌
    ↓
[Banco de dados: status = 'Pendente'] ❌ (deveria ser 'Aprovado')
    ↓
[API check_status.php retorna 'Pendente'] ❌
    ↓
[JavaScript nunca detecta 'Aprovado'] ❌
    ↓
[Tela pix.php nunca redireciona] ❌
```

---

## ✅ SOLUÇÃO NECESSÁRIA

### **CORREÇÃO EM `backend/process_payment_pix.php`:**

Adicionar o campo `notification_url` no array `$paymentData` antes de criar o pagamento:

```php
// Preparar dados do pagamento PIX (Nova estrutura v3)
$paymentData = [
    "transaction_amount" => round((float)$data['transaction_amount'], 2),
    "description" => $data['description'],
    "payment_method_id" => "pix",
    "external_reference" => $external_reference,
    "notification_url" => "https://" . $_SERVER['HTTP_HOST'] . "/backend/webhook.php",  // ✅ ADICIONAR ESTA LINHA
    "payer" => [
        ...
    ]
];
```

**URL Correta:**
- Produção: `https://seudominio.com/backend/webhook.php`
- O Mercado Pago precisa de uma URL **pública e acessível via HTTPS**

---

## 🔧 VERIFICAÇÕES ADICIONAIS RECOMENDADAS

### **1. Verificar se o Webhook está acessível:**
- Testar manualmente: `curl -X POST https://seudominio.com/backend/webhook.php`
- Deve retornar 200 OK (mesmo que sem dados válidos)

### **2. Verificar logs do servidor:**
- Procurar por tentativas de acesso ao webhook nos logs do Apache/Nginx
- Se não houver tentativas, confirma que o Mercado Pago nunca tentou chamar

### **3. Verificar configuração do Mercado Pago:**
- No painel do Mercado Pago, verificar se há uma URL de webhook configurada globalmente
- Se houver, ela pode estar sobrescrevendo ou sendo usada como fallback

### **4. Testar após correção:**
- Criar um novo pagamento PIX de teste
- Verificar se o webhook é chamado (logs do servidor)
- Verificar se o status é atualizado no banco
- Verificar se o redirecionamento funciona

---

## 📝 RESUMO EXECUTIVO

**CAUSA RAIZ:** 
O campo `notification_url` não está sendo enviado na criação do pagamento PIX, impedindo que o Mercado Pago notifique o servidor quando o pagamento for aprovado.

**IMPACTO:**
- Webhook nunca é chamado
- Status nunca muda de 'Pendente' para 'Aprovado'
- Redirecionamento automático nunca acontece
- Usuário precisa verificar manualmente ou aguardar e-mail

**SOLUÇÃO:**
Adicionar `"notification_url" => "https://" . $_SERVER['HTTP_HOST'] . "/backend/webhook.php"` no array `$paymentData` em `process_payment_pix.php`.

**COMPLEXIDADE:** 🟢 **BAIXA** (1 linha de código)

**PRIORIDADE:** 🔴 **CRÍTICA** (afeta todas as vendas PIX)

---

**Relatório gerado por:** Sistema de Análise Técnica  
**Data:** 2025







