";
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 "
";
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 "