"; echo "🔐 Diagnóstico Token WhatsApp"; echo ""; echo "

🔐 DIAGNÓSTICO TOKEN WHATSAPP

"; // Cargar configuración try { require_once 'config/config.php'; } catch (Exception $e) { echo "
❌ Error cargando configuración: " . htmlspecialchars($e->getMessage()) . "
"; exit; } // 1. Verificar constantes de WhatsApp echo "
"; echo "

📋 CONFIGURACIÓN ACTUAL...

"; $whatsapp_constants = [ 'WHATSAPP_TOKEN' => 'Token de acceso de WhatsApp', 'WHATSAPP_PHONE_NUMBER_ID' => 'ID del número de teléfono', 'WHATSAPP_API_URL' => 'URL base de la API', 'WEBHOOK_VERIFY_TOKEN' => 'Token de verificación del webhook' ]; foreach ($whatsapp_constants as $const => $desc) { if (defined($const)) { $value = constant($const); if ($const === 'WHATSAPP_TOKEN') { // Mostrar información detallada del token echo "
✅ $const definido ($desc)
"; echo "
📝 Longitud: " . strlen($value) . " caracteres
"; if ($value === 'TU_TOKEN_DE_WHATSAPP_AQUI') { echo "
❌ CRÍTICO: Token no configurado (valor por defecto)
"; } else { // Verificar formato básico del token if (preg_match('/^[A-Za-z0-9_-]+$/', $value)) { echo "
✅ Formato básico válido (solo caracteres permitidos)
"; } else { echo "
❌ Formato inválido: contiene caracteres no permitidos
"; } // Mostrar primeros y últimos caracteres $preview = substr($value, 0, 10) . '...' . substr($value, -10); echo "
🔍 Vista previa: $preview
"; // Verificar longitud típica if (strlen($value) < 50) { echo "
⚠️ Token parece muy corto (típico > 100 caracteres)
"; } elseif (strlen($value) > 500) { echo "
⚠️ Token parece muy largo (típico < 300 caracteres)
"; } else { echo "
✅ Longitud parece apropiada
"; } } } else { if (in_array($const, ['WEBHOOK_VERIFY_TOKEN'])) { $display_value = str_repeat('*', min(strlen($value), 20)); } else { $display_value = $value; } echo "
✅ $const = '$display_value' ($desc)
"; } } else { echo "
❌ $const no definida ($desc)
"; } } echo "
"; // 2. Test de formato del token if (defined('WHATSAPP_TOKEN') && WHATSAPP_TOKEN !== 'TU_TOKEN_DE_WHATSAPP_AQUI') { echo "
"; echo "

🔍 ANÁLISIS DETALLADO DEL TOKEN...

"; $token = WHATSAPP_TOKEN; // Verificar si parece ser un token de Facebook/Meta if (preg_match('/^[A-Z]{3,5}[A-Za-z0-9_-]{100,}$/', $token)) { echo "
✅ Parece un token válido de Facebook/Meta
"; } else { echo "
⚠️ No tiene el formato típico de token de Facebook/Meta
"; } // Verificar estructura común if (strpos($token, 'EAA') === 0) { echo "
✅ Comienza con 'EAA' (formato esperado)
"; } else { echo "
⚠️ No comienza con 'EAA' (formato típico de Facebook)
"; } // Verificar caracteres $allowed_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-'; $invalid_chars = []; for ($i = 0; $i < strlen($token); $i++) { $char = $token[$i]; if (strpos($allowed_chars, $char) === false) { $invalid_chars[] = $char; } } if (empty($invalid_chars)) { echo "
✅ Solo contiene caracteres permitidos
"; } else { echo "
❌ Caracteres inválidos encontrados: " . implode(', ', array_unique($invalid_chars)) . "
"; } echo "
"; // 3. Test de conexión a la API de WhatsApp echo "
"; echo "

🌐 TEST DE CONEXIÓN API WHATSAPP...

"; if (defined('WHATSAPP_PHONE_NUMBER_ID') && WHATSAPP_PHONE_NUMBER_ID !== 'TU_PHONE_ID_AQUI') { $phone_id = WHATSAPP_PHONE_NUMBER_ID; $api_url = WHATSAPP_API_URL . $phone_id; echo "
🔗 Probando URL: $api_url
"; // Configurar cURL para test $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $api_url, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json' ], CURLOPT_SSL_VERIFYPEER => true, CURLOPT_USERAGENT => 'WhatsApp Bot Validator/1.0' ]); $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $curl_error = curl_error($ch); curl_close($ch); if ($curl_error) { echo "
❌ Error de conexión cURL: " . htmlspecialchars($curl_error) . "
"; } else { echo "
✅ Conexión establecida (HTTP $http_code)
"; if ($response) { $json_response = json_decode($response, true); if ($http_code === 200) { echo "
✅ Token válido - API responde correctamente
"; if ($json_response) { echo "
📋 Respuesta JSON válida
"; if (isset($json_response['id'])) { echo "
✅ Phone Number ID verificado: " . htmlspecialchars($json_response['id']) . "
"; } } } elseif ($http_code === 401) { echo "
❌ ERROR 401: Token inválido o expirado
"; if ($json_response && isset($json_response['error'])) { $error = $json_response['error']; echo "
📝 Mensaje: " . htmlspecialchars($error['message'] ?? 'Sin mensaje') . "
"; echo "
📝 Tipo: " . htmlspecialchars($error['type'] ?? 'Sin tipo') . "
"; echo "
📝 Código: " . htmlspecialchars($error['code'] ?? 'Sin código') . "
"; } } elseif ($http_code === 403) { echo "
❌ ERROR 403: Token válido pero sin permisos
"; } else { echo "
⚠️ Respuesta inesperada (HTTP $http_code)
"; } if ($json_response && isset($json_response['error'])) { echo "
📋 Respuesta completa:
"; echo "
" . htmlspecialchars(json_encode($json_response, JSON_PRETTY_PRINT)) . "
"; } elseif (strlen($response) < 500) { echo "
📋 Respuesta:
"; echo "
" . htmlspecialchars($response) . "
"; } } } } else { echo "
❌ PHONE_NUMBER_ID no configurado correctamente
"; } echo "
"; } // 4. Instrucciones para obtener token válido echo "
"; echo "

📖 CÓMO OBTENER UN TOKEN VÁLIDO

"; echo "
PASOS PARA OBTENER TOKEN:
"; echo "
1. Ve a: Facebook Developers
"; echo "
2. Crea una aplicación de WhatsApp Business
"; echo "
3. Ve a WhatsApp > API Setup
"; echo "
4. Copia el 'Temporary access token'
"; echo "
5. Para producción, genera un token permanente
"; echo "
FORMATO CORRECTO:
"; echo "
✅ Debe comenzar con: EAA
"; echo "
✅ Longitud típica: 100-300 caracteres
"; echo "
✅ Solo letras, números, guiones y guiones bajos
"; if (defined('WHATSAPP_TOKEN') && WHATSAPP_TOKEN === 'TU_TOKEN_DE_WHATSAPP_AQUI') { echo "
⚠️ ACCIÓN REQUERIDA:
"; echo "
Debes reemplazar 'TU_TOKEN_DE_WHATSAPP_AQUI' con tu token real
"; echo "
Edita config/config.php línea ~45 o crea archivo .env
"; } echo "
"; // 5. Verificación de Phone Number ID echo "
"; echo "

📱 VERIFICACIÓN PHONE NUMBER ID

"; if (defined('WHATSAPP_PHONE_NUMBER_ID')) { $phone_id = WHATSAPP_PHONE_NUMBER_ID; if ($phone_id === 'TU_PHONE_ID_AQUI') { echo "
❌ Phone Number ID no configurado
"; } else { echo "
✅ Phone Number ID: $phone_id
"; // Verificar formato (debe ser numérico) if (preg_match('/^\d+$/', $phone_id)) { echo "
✅ Formato correcto (solo números)
"; } else { echo "
❌ Formato incorrecto (debe ser solo números)
"; } // Verificar longitud típica if (strlen($phone_id) >= 10 && strlen($phone_id) <= 20) { echo "
✅ Longitud apropiada
"; } else { echo "
⚠️ Longitud inusual (" . strlen($phone_id) . " dígitos)
"; } } } echo "
"; echo ""; ?>