# 🔗 Testing de Webhooks con ngrok

## ¿Qué es ngrok?
ngrok es una herramienta que crea un túnel seguro para exponer tu servidor local a internet, permitiendo que Culqi envíe webhooks a tu aplicación local.

## 📥 Instalación de ngrok

### Windows:
1. Descargar desde: https://ngrok.com/download
2. Extraer el archivo `ngrok.exe`
3. Colocarlo en una carpeta del PATH o en tu proyecto

### Linux/macOS:
```bash
# Instalar con Homebrew (macOS)
brew install ngrok

# O descargar manualmente
wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz
tar -xzf ngrok-v3-stable-linux-amd64.tgz
sudo mv ngrok /usr/local/bin/
```

## 🚀 Configuración

### 1. Crear cuenta en ngrok:
1. Ir a: https://ngrok.com
2. Registrarse gratuitamente
3. Obtener tu authtoken

### 2. Configurar authtoken:
```bash
ngrok config add-authtoken tu_authtoken_aqui
```

### 3. Iniciar el servidor Laravel:
```bash
php artisan serve --host=127.0.0.1 --port=8000
```

### 4. Crear túnel con ngrok:
```bash
ngrok http 8000
```

### 5. Copiar la URL de ngrok:
```
Forwarding    https://abc123.ngrok.io -> http://localhost:8000
```

## 🔧 Configurar Webhook en Culqi

### En el Panel de Culqi:
1. **Ir a**: Configuración > Webhooks
2. **Hacer clic en**: "Agregar Webhook"
3. **URL**: `https://abc123.ngrok.io/webhook/culqi`
4. **Eventos**:
   - ✅ `charge.succeeded`
   - ✅ `charge.failed`
   - ✅ `charge.expired`
5. **Guardar** y copiar el Webhook Secret

### Actualizar .env:
```env
CULQI_WEBHOOK_SECRET=whsec_tu_webhook_secret_aqui
```

## 🧪 Testing de Webhooks

### 1. Probar con cURL:
```bash
# Simular webhook de pago exitoso
curl -X POST https://abc123.ngrok.io/webhook/culqi \
  -H "Content-Type: application/json" \
  -H "X-Culqi-Signature: tu_signature_aqui" \
  -d '{
    "type": "charge.succeeded",
    "data": {
      "id": "chr_test_123",
      "amount": 5000,
      "currency": "PEN",
      "email": "test@example.com"
    }
  }'
```

### 2. Verificar logs:
```bash
# Ver logs en tiempo real
tail -f storage/logs/laravel.log

# Ver logs específicos de webhooks
tail -f storage/logs/culqi.log
```

### 3. Dashboard de ngrok:
- Ir a: http://localhost:4040
- Ver todas las peticiones HTTP
- Inspeccionar headers y body

## 📊 Monitoreo

### Logs importantes:
```bash
# Logs de Laravel
storage/logs/laravel.log

# Logs específicos de Culqi
storage/logs/culqi.log

# Logs de errores
storage/logs/error.log
```

### Verificar webhooks recibidos:
```bash
# Contar webhooks recibidos
grep "Webhook recibido" storage/logs/laravel.log | wc -l

# Ver últimos webhooks
grep "Webhook recibido" storage/logs/laravel.log | tail -10
```

## 🚨 Solución de Problemas

### Error: "Connection refused"
```bash
# Verificar que Laravel esté corriendo
php artisan serve --host=127.0.0.1 --port=8000

# Verificar que ngrok esté corriendo
ngrok http 8000
```

### Error: "Invalid signature"
```bash
# Verificar webhook secret en .env
echo $CULQI_WEBHOOK_SECRET

# Limpiar caché
php artisan config:clear
```

### Error: "404 Not Found"
```bash
# Verificar ruta del webhook
php artisan route:list | grep webhook

# Verificar que la ruta esté registrada
cat routes/web.php
```

## 🔒 Seguridad

### Mejores prácticas:
1. **Usar HTTPS** (ngrok lo proporciona automáticamente)
2. **Verificar firmas** de webhooks
3. **Validar datos** recibidos
4. **Loggear** todas las peticiones
5. **No compartir** URLs de ngrok públicamente

### Configuración de seguridad:
```php
// En config/culqi.php
'webhook' => [
    'verify_signature' => true,
    'log_requests' => true,
    'timeout' => 30,
],
```

## 📱 Testing en Dispositivos Móviles

### Para testing en móviles:
1. **Obtener IP local**:
   ```bash
   ipconfig  # Windows
   ifconfig  # Linux/macOS
   ```

2. **Iniciar servidor en IP local**:
   ```bash
   php artisan serve --host=0.0.0.0 --port=8000
   ```

3. **Crear túnel ngrok**:
   ```bash
   ngrok http 8000
   ```

4. **Acceder desde móvil**:
   - URL: `https://abc123.ngrok.io`
   - Probar pagos desde el dispositivo móvil

## 🎯 Casos de Uso Comunes

### 1. Testing de pagos exitosos:
- Usar tarjetas válidas
- Verificar que se reciba `charge.succeeded`
- Confirmar que la donación se marque como completada

### 2. Testing de pagos fallidos:
- Usar tarjetas inválidas
- Verificar que se reciba `charge.failed`
- Confirmar que la donación se marque como fallida

### 3. Testing de webhooks duplicados:
- Enviar el mismo webhook múltiples veces
- Verificar que no se procese duplicado

### 4. Testing de timeouts:
- Simular webhook lento
- Verificar manejo de timeouts

## 📞 Soporte

### Recursos útiles:
- **Documentación ngrok**: https://ngrok.com/docs
- **Documentación Culqi**: https://docs.culqi.com
- **Comunidad**: https://community.culqi.com

### Comandos útiles:
```bash
# Ver estado de ngrok
ngrok status

# Ver configuración
ngrok config check

# Reiniciar ngrok
pkill ngrok
ngrok http 8000
```

¡Con esta configuración podrás probar webhooks de Culqi en tu entorno local de forma segura!






