From b1e291bf0545ad4667e668825ed2459c333b548e Mon Sep 17 00:00:00 2001 From: lizandrogd <77708265+lizandrogd@users.noreply.github.com> Date: Wed, 21 Jan 2026 09:48:09 -0500 Subject: [PATCH] up --- api/get_conversation_detail.php | 2 +- api/get_media.php | 69 +++++++++++++++++++++++++++++++++ api/get_user_messages.php | 2 +- scripts/show_conversation.php | 8 ++++ 4 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 api/get_media.php create mode 100644 scripts/show_conversation.php diff --git a/api/get_conversation_detail.php b/api/get_conversation_detail.php index a3811e1..ddb0687 100644 --- a/api/get_conversation_detail.php +++ b/api/get_conversation_detail.php @@ -69,7 +69,7 @@ try { 'direction' => $msg['direction'], 'message_type' => $msg['message_type'], 'content' => $msg['content'] ?? '', - 'media_url' => $msg['media_url'] ?? null, + 'media_url' => (isset($msg['media_url']) && $msg['media_url']) ? (preg_match('#^https?://#i', $msg['media_url']) ? $msg['media_url'] : ("api/get_media.php?id=" . urlencode($msg['media_url']))) : null, 'status' => $msg['status'] ?? 'sent', 'created_at' => $msg['created_at'], 'time' => date('H:i', strtotime($msg['created_at'])), diff --git a/api/get_media.php b/api/get_media.php new file mode 100644 index 0000000..2041a49 --- /dev/null +++ b/api/get_media.php @@ -0,0 +1,69 @@ + 'media id requerido']); + exit; +} + +$token = getConfigFromDB('whatsapp_token', ''); +$apiUrl = rtrim(getConfigFromDB('whatsapp_api_url', 'https://graph.facebook.com/v22.0/'), '/'); + +$url = "{$apiUrl}/{$mediaId}"; + +$ch = curl_init(); +curl_setopt_array($ch, [ + CURLOPT_URL => $url, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token ], + CURLOPT_TIMEOUT => 10, +]); + +$response = curl_exec($ch); +$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); +$err = curl_error($ch); +curl_close($ch); + +if ($err) { + http_response_code(502); + echo json_encode(['error' => 'Error comunicando con Graph API', 'detail' => $err]); + exit; +} + +$decoded = json_decode($response, true); +if ($httpCode >= 400 || !$decoded) { + http_response_code($httpCode ?: 500); + echo json_encode(['error' => 'Graph API error', 'response' => $decoded]); + exit; +} + +// Normalmente Graph devuelve field 'url' +$mediaUrl = $decoded['url'] ?? ($decoded['data'][0]['url'] ?? null); +if (!$mediaUrl) { + http_response_code(404); + echo json_encode(['error' => 'No se recibió URL del media', 'raw' => $decoded]); + exit; +} + +// Si es una petición GET y el cliente no espera JSON, redirigir al URL real para que `` funcione directamente +$isGet = $_SERVER['REQUEST_METHOD'] === 'GET'; +$accept = $_SERVER['HTTP_ACCEPT'] ?? ''; + +if ($isGet && strpos($accept, 'application/json') === false) { + // Cache corto para navegadores + header('Cache-Control: public, max-age=3600'); + header('Location: ' . $mediaUrl, true, 302); + exit; +} + +// Retornar URL en JSON (cliente puede solicitar directamente) +header('Content-Type: application/json; charset=utf-8'); +echo json_encode(['success' => true, 'url' => $mediaUrl]); diff --git a/api/get_user_messages.php b/api/get_user_messages.php index a92a54a..2d397f3 100644 --- a/api/get_user_messages.php +++ b/api/get_user_messages.php @@ -86,7 +86,7 @@ try { 'user_id' => intval($msg['user_id']), 'content' => $msg['content'] ?? '', 'message_id' => $msg['message_id'] ?? null, - 'media_url' => $msg['media_url'] ?? null, + 'media_url' => (isset($msg['media_url']) && $msg['media_url']) ? (preg_match('#^https?://#i', $msg['media_url']) ? $msg['media_url'] : ("api/get_media.php?id=" . urlencode($msg['media_url']))) : null, 'user_phone' => $msg['user_phone'] ?? null, 'direction' => $msg['direction'] ?? 'incoming', 'message_type' => $msg['message_type'] ?? 'text', diff --git a/scripts/show_conversation.php b/scripts/show_conversation.php new file mode 100644 index 0000000..d4806f3 --- /dev/null +++ b/scripts/show_conversation.php @@ -0,0 +1,8 @@ +\n"; exit(1); } +$db = Database::getInstance(); +$r = $db->fetch('SELECT id, message_id, message_type, content, media_url FROM conversations WHERE id = ?', [$id]); +header('Content-Type: application/json'); +echo json_encode($r, JSON_PRETTY_PRINT);