up
This commit is contained in:
@@ -93,6 +93,7 @@ header('Content-Type: application/json; charset=utf-8');
|
||||
$mediaId = $_GET['id'] ?? $_POST['id'] ?? null;
|
||||
$providedUrl = $_GET['url'] ?? $_POST['url'] ?? null;
|
||||
$download = isset($_GET['download']) && $_GET['download'] === '1';
|
||||
$debug = isset($_GET['debug']) && $_GET['debug'] === '1';
|
||||
|
||||
if (!$mediaId && !$providedUrl) {
|
||||
http_response_code(400);
|
||||
@@ -239,6 +240,112 @@ if ($providedUrl) {
|
||||
}
|
||||
}
|
||||
|
||||
// === MODO DEBUG: muestra diagnóstico en lugar de redirigir/descargar ===
|
||||
if ($debug) {
|
||||
header('Content-Type: text/html; charset=utf-8');
|
||||
$tokenRaw = getConfigFromDB('whatsapp_token', '');
|
||||
$tokenPreview = $tokenRaw ? substr($tokenRaw, 0, 15) . '...' . substr($tokenRaw, -10) : '(vacío)';
|
||||
$apiUrlConfig = rtrim(getConfigFromDB('whatsapp_api_url', 'https://graph.facebook.com/v22.0/'), '/');
|
||||
|
||||
echo '<html><head><title>Media URL Debug</title>';
|
||||
echo '<style>body{font-family:monospace;padding:20px;background:#1e1e1e;color:#d4d4d4}';
|
||||
echo '.ok{color:#4ec9b0}.err{color:#f44747}.warn{color:#dcdcaa}';
|
||||
echo 'pre{background:#2d2d2d;padding:15px;border-radius:5px;overflow-x:auto;white-space:pre-wrap}';
|
||||
echo 'h2{color:#569cd6}h3{color:#9cdcfe}</style></head><body>';
|
||||
echo '<h2>🔍 Diagnóstico media-url.php</h2>';
|
||||
echo '<h3>Parámetros de entrada</h3><pre>';
|
||||
echo "Media ID: " . htmlspecialchars($mediaId ?? '(no proporcionado)') . "\n";
|
||||
echo "URL proporcionada: " . htmlspecialchars($providedUrl ?? '(no proporcionada)') . "\n";
|
||||
echo "download: " . ($download ? '1' : '0') . "\n";
|
||||
echo '</pre>';
|
||||
|
||||
echo '<h3>Configuración</h3><pre>';
|
||||
echo "Token: " . htmlspecialchars($tokenPreview) . "\n";
|
||||
echo "API URL: " . htmlspecialchars($apiUrlConfig) . "\n";
|
||||
|
||||
if (empty($tokenRaw)) {
|
||||
echo '<span class="err">⛔ ERROR: Token de WhatsApp vacío o no configurado</span>' . "\n";
|
||||
echo 'Solución: Configurar en /configurar_whatsapp.php o en system_config (key: whatsapp_token)' . "\n";
|
||||
} else {
|
||||
echo '<span class="ok">✅ Token presente</span>' . "\n";
|
||||
}
|
||||
echo '</pre>';
|
||||
|
||||
echo '<h3>Resultado Graph API</h3><pre>';
|
||||
if ($mediaUrl) {
|
||||
echo '<span class="ok">✅ URL resuelta:</span> ' . htmlspecialchars($mediaUrl) . "\n";
|
||||
echo "Resuelto desde Graph: " . ($resolvedFromGraph ? 'Sí' : 'No') . "\n";
|
||||
|
||||
// Validar que la URL sea accesible desde el servidor
|
||||
echo "\n<span class=\"warn\">Verificando accesibilidad de la URL...</span>\n";
|
||||
$testCh = curl_init();
|
||||
$testHeaders = ['User-Agent: WhatsAppMediaProxy/1.0', 'Accept: */*'];
|
||||
if ($tokenRaw) $testHeaders[] = 'Authorization: Bearer ' . $tokenRaw;
|
||||
curl_setopt_array($testCh, [
|
||||
CURLOPT_URL => $mediaUrl,
|
||||
CURLOPT_NOBODY => true,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_FOLLOWLOCATION => true,
|
||||
CURLOPT_TIMEOUT => 10,
|
||||
CURLOPT_HTTPHEADER => $testHeaders,
|
||||
]);
|
||||
curl_exec($testCh);
|
||||
$testInfo = curl_getinfo($testCh);
|
||||
$testErr = curl_error($testCh);
|
||||
curl_close($testCh);
|
||||
|
||||
echo "HTTP Status: " . ($testInfo['http_code'] ?? 'N/A') . "\n";
|
||||
echo "Content-Type: " . ($testInfo['content_type'] ?? 'N/A') . "\n";
|
||||
echo "Content-Length: " . ($testInfo['download_content_length'] ?? 'N/A') . " bytes\n";
|
||||
|
||||
if ($testErr) {
|
||||
echo '<span class="err">⛔ Error cURL: ' . htmlspecialchars($testErr) . '</span>' . "\n";
|
||||
}
|
||||
|
||||
if (($testInfo['http_code'] ?? 0) >= 400) {
|
||||
echo '<span class="err">⛔ La URL del media NO es accesible (HTTP ' . $testInfo['http_code'] . ')</span>' . "\n";
|
||||
if (($testInfo['http_code'] ?? 0) == 404) {
|
||||
echo '<span class="warn">⚠️ El media probablemente expiró. Los archivos multimedia de WhatsApp expiran después de ~30 días.</span>' . "\n";
|
||||
} elseif (($testInfo['http_code'] ?? 0) == 401 || ($testInfo['http_code'] ?? 0) == 403) {
|
||||
echo '<span class="warn">⚠️ Error de autenticación. Verificar que el token sea válido y tenga permisos.</span>' . "\n";
|
||||
}
|
||||
} else {
|
||||
echo '<span class="ok">✅ URL accesible correctamente</span>' . "\n";
|
||||
}
|
||||
} else {
|
||||
echo '<span class="err">⛔ No se pudo resolver la URL del media</span>' . "\n";
|
||||
if (!empty($decoded)) {
|
||||
echo "Respuesta de Graph API:\n";
|
||||
echo htmlspecialchars(json_encode($decoded, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)) . "\n";
|
||||
|
||||
// Diagnóstico específico de errores comunes
|
||||
$errCode = $decoded['error']['code'] ?? null;
|
||||
$errSubcode = $decoded['error']['error_subcode'] ?? null;
|
||||
$errMsg = $decoded['error']['message'] ?? '';
|
||||
|
||||
if ($errCode == 190) {
|
||||
echo '<span class="err">⛔ Token expirado o inválido (code 190)</span>' . "\n";
|
||||
echo '<span class="warn">Solución: Renovar el token en /configurar_whatsapp.php</span>' . "\n";
|
||||
} elseif ($errCode == 100 && $errSubcode == 33) {
|
||||
echo '<span class="err">⛔ Media ID no encontrado o expirado</span>' . "\n";
|
||||
echo '<span class="warn">Los archivos multimedia de WhatsApp Business API expiran aproximadamente 30 días después de ser recibidos.</span>' . "\n";
|
||||
} elseif ($errCode == 100) {
|
||||
echo '<span class="err">⛔ Parámetro inválido (code 100)</span>' . "\n";
|
||||
echo '<span class="warn">El media ID puede ser incorrecto: ' . htmlspecialchars($mediaId ?? '') . '</span>' . "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
echo '</pre>';
|
||||
|
||||
echo '<h3>Respuesta raw de Graph API ($decoded)</h3><pre>';
|
||||
echo htmlspecialchars(json_encode($decoded ?? null, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
|
||||
echo '</pre>';
|
||||
|
||||
echo '<p style="margin-top:20px;color:#888">Generado: ' . date('Y-m-d H:i:s T') . '</p>';
|
||||
echo '</body></html>';
|
||||
exit;
|
||||
}
|
||||
|
||||
// Soporte para archivos locales (local=uploads/media/...)
|
||||
$local = $_GET['local'] ?? null;
|
||||
if ($local) {
|
||||
|
||||
Reference in New Issue
Block a user