up
This commit is contained in:
@@ -137,6 +137,57 @@ if ($mediaId) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ── Si no hay archivo local, descargar con MediaService y guardar como cache permanente ──
|
||||||
|
if ($mediaId) {
|
||||||
|
try {
|
||||||
|
require_once __DIR__ . '/../../classes/MediaService.php';
|
||||||
|
$ms = new MediaService();
|
||||||
|
$subdir = date('Y/m');
|
||||||
|
$result = $ms->fetchAndStoreFromGraph($mediaId, $subdir);
|
||||||
|
if ($result && !empty($result['local_file'])) {
|
||||||
|
// Actualizar BD para que próximas peticiones se sirvan desde local
|
||||||
|
try {
|
||||||
|
$db = $db ?? Database::getInstance();
|
||||||
|
$db->query(
|
||||||
|
"UPDATE conversations SET local_file = :lf, local_thumb = :lt, mime_type = :mt WHERE (media_url = :mid OR whatsapp_media_id = :mid2) AND (local_file IS NULL OR local_file = '')",
|
||||||
|
[
|
||||||
|
'lf' => $result['local_file'],
|
||||||
|
'lt' => $result['local_thumb'] ?? null,
|
||||||
|
'mt' => $result['mime_type'] ?? null,
|
||||||
|
'mid' => $mediaId,
|
||||||
|
'mid2' => $mediaId
|
||||||
|
]
|
||||||
|
);
|
||||||
|
media_log("Auto-cached media {$mediaId} → {$result['local_file']}");
|
||||||
|
} catch (Exception $dbErr) {
|
||||||
|
media_log("DB update failed after caching media {$mediaId}: " . $dbErr->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Servir el archivo recién descargado
|
||||||
|
$localPath = realpath(__DIR__ . '/../../' . ltrim($result['local_file'], '/'));
|
||||||
|
if ($localPath && file_exists($localPath)) {
|
||||||
|
$finfo = finfo_open(FILEINFO_MIME_TYPE);
|
||||||
|
$ctype = finfo_file($finfo, $localPath) ?: ($result['mime_type'] ?? 'application/octet-stream');
|
||||||
|
finfo_close($finfo);
|
||||||
|
|
||||||
|
header_remove('Content-Type');
|
||||||
|
header('Cache-Control: public, max-age=86400');
|
||||||
|
header('Content-Type: ' . $ctype);
|
||||||
|
header('Content-Length: ' . filesize($localPath));
|
||||||
|
if ($download) {
|
||||||
|
$fname = basename($localPath);
|
||||||
|
header('Content-Disposition: attachment; filename="' . $fname . '"');
|
||||||
|
}
|
||||||
|
readfile($localPath);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
|
media_log("Auto-download failed for media {$mediaId}: " . $e->getMessage());
|
||||||
|
// Continuar con Graph API proxy como fallback
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$mediaUrl = null;
|
$mediaUrl = null;
|
||||||
|
|
||||||
if ($providedUrl) {
|
if ($providedUrl) {
|
||||||
|
|||||||
@@ -209,6 +209,12 @@ class WhatsAppWebhook {
|
|||||||
$mimeType = $message['document']['mime_type'] ?? null;
|
$mimeType = $message['document']['mime_type'] ?? null;
|
||||||
$filename = $message['document']['filename'] ?? null;
|
$filename = $message['document']['filename'] ?? null;
|
||||||
|
|
||||||
|
} elseif (isset($message['sticker'])) {
|
||||||
|
$messageType = 'sticker';
|
||||||
|
$mediaUrl = $message['sticker']['url'] ?? ($message['sticker']['id'] ?? null);
|
||||||
|
$mimeType = $message['sticker']['mime_type'] ?? null;
|
||||||
|
$filename = $message['sticker']['filename'] ?? null;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Log debug (temporal) para verificar cómo llegan media_url/filename
|
// Log debug (temporal) para verificar cómo llegan media_url/filename
|
||||||
|
|||||||
Reference in New Issue
Block a user