# 🚀 Correção HMAC - Executar AGORA

## ✅ Problema Corrigido

- O webhook agora tenta **4 métodos diferentes** de validação HMAC
- Suporta **3 variações** de header de assinatura
- Logs detalhados para identificar problemas
- Script de teste automático incluído

---

## 📋 EXECUTE ESTES COMANDOS NO SERVIDOR

Copie e cole **TUDO DE UMA VEZ**:

```bash
cd /var/www/gestorstream

# Atualizar código
git pull origin main

# Dar permissão aos scripts
chmod +x fix_hmac_webhook.sh
chmod +x test_hmac_validation.php

# Executar correção e teste automático
./fix_hmac_webhook.sh
```

---

## 🎯 O que este script faz:

1. ✅ Faz backup automático
2. ✅ Atualiza código do Git
3. ✅ Limpa cache do Laravel
4. ✅ Verifica se HMAC secret está configurado
5. ✅ Testa webhook SEM HMAC (deve retornar 200)
6. ✅ Testa webhook COM HMAC usando 4 métodos diferentes
7. ✅ Identifica qual método funciona
8. ✅ Mostra logs detalhados

---

## ✅ Resultado Esperado

```
========================================
✅ SUCESSO! HMAC FUNCIONANDO!
========================================

Método que funciona: Secret sem prefixo (Base64 decoded)

Configure no painel do OpenPIX:
- URL: https://gestor.jf.eng.br/api/webhooks/openpix
- Webhook Secret: openpix_EtpEIRxeT+5yt4MM4E8Ern3/WVoLzuRDtlJx15jHrFc=
- Evento: OPENPIX:CHARGE_COMPLETED
```

---

## 🔧 Configuração no Painel OpenPIX

Após o teste passar:

### 1. URL de Webhook
```
https://gestor.jf.eng.br/api/webhooks/openpix
```

### 2. Webhook Secret (HMAC)
```
openpix_EtpEIRxeT+5yt4MM4E8Ern3/WVoLzuRDtlJx15jHrFc=
```

### 3. Evento
```
OPENPIX:CHARGE_COMPLETED
```

### 4. Cabeçalhos HTTP (Configure SOMENTE estes)
- `Content-Type`: `application/json`
- `Accept`: `application/json`
- `X-OpenPix-Signature`: `Gerado por requisição`

### ⚠️ IMPORTANTE: REMOVER ESTES (se estiverem configurados)
- ❌ `authorization`: ~~CosalSqzsmtGVxh9DhD5hVNwwmpKC2QTaEX99N4Vv9rSlEv4LhUoC~~

O header `X-OpenPix-Signature` será gerado **automaticamente** pelo OpenPIX usando o secret configurado.

---

## 🐛 Se ainda der erro 401

### Opção 1: Ver os logs detalhados

```bash
cd /var/www/gestorstream
tail -100 backend/storage/logs/laravel.log | grep -A 15 'HMAC'
```

**Procure por:**
- `signature_received`: O que o OpenPIX enviou
- `expected_signature`: O que o sistema esperava (para cada método)
- `validation_method`: Qual método funcionou (se algum)

### Opção 2: Executar teste HMAC isolado

```bash
cd /var/www/gestorstream
php test_hmac_validation.php
```

Este script testa cada método individualmente e mostra qual funciona.

### Opção 3: Desabilitar HMAC temporariamente

Se precisar que o webhook funcione AGORA enquanto investiga:

```bash
cd /var/www/gestorstream/backend
nano .env

# Adicionar # no início da linha:
#OPENPIX_WEBHOOK_SECRET=openpix_EtpEIRxeT+5yt4MM4E8Ern3/WVoLzuRDtlJx15jHrFc=

# Salvar (Ctrl+O, Enter, Ctrl+X) e limpar cache:
php artisan config:clear
```

Agora o webhook funcionará sem validação HMAC (menos seguro, mas funcional).

---

## 📊 Logs que Indicam Sucesso

Quando funcionar, você verá nos logs:

```log
[2026-01-12 22:30:00] DEBUG: OpenPIX Webhook Headers Debug
  has_secret_config: true
  secret_length: 49
  signature_header: a1b2c3d4e5f6789...
  signature_length: 64

[2026-01-12 22:30:01] INFO: OpenPIX Webhook: Assinatura HMAC validada com sucesso
  validation_method: secret_base64_decoded

[2026-01-12 22:30:02] INFO: OpenPIX Webhook recebido

[2026-01-12 22:30:03] INFO: Payment found for webhook
  payment_id: 123
  status_changed: pending -> approved

[2026-01-12 22:30:04] INFO: Subscription created and activated
```

---

## 📱 Monitorar em Tempo Real

Em outra janela SSH, monitore os webhooks:

```bash
tail -f /var/www/gestorstream/backend/storage/logs/laravel.log | grep --line-buffered -i webhook
```

Deixe isso rodando e crie um pagamento de teste no OpenPIX para ver o webhook chegando.

---

## ✅ Checklist Final

- [ ] `git pull` executado
- [ ] `./fix_hmac_webhook.sh` executado
- [ ] Teste sem HMAC retorna 200 ✅
- [ ] Teste com HMAC retorna 200 ✅
- [ ] Logs mostram "Assinatura HMAC validada com sucesso"
- [ ] Webhook registrado no painel OpenPIX
- [ ] Teste com pagamento real funcionou

---

## 🎯 Resumo das Mudanças

### O que foi corrigido no código:

1. **Suporte a múltiplos headers de assinatura:**
   - `x-webhook-signature`
   - `x-openpix-signature`
   - `X-OpenPix-Signature`

2. **4 métodos de validação HMAC:**
   - Secret direto
   - Secret sem prefixo "openpix_"
   - Secret sem prefixo, decodificado Base64
   - Secret completo decodificado Base64

3. **Logs detalhados:**
   - Mostra signature recebida vs esperada
   - Mostra todos os métodos tentados
   - Facilita debug

4. **Script de teste automatizado:**
   - Testa todos os métodos
   - Identifica qual funciona
   - Fornece instruções específicas

---

**Execute o script e me envie o resultado!** 🚀

Se ainda não funcionar, compartilhe:
1. Output do `./fix_hmac_webhook.sh`
2. Últimas 50 linhas do log: `tail -50 backend/storage/logs/laravel.log`
