Update WhatsAppService.php

This commit is contained in:
Lizandro Guarnizo
2026-02-21 12:02:15 -05:00
parent 51f1b04293
commit a716cd187a
+24 -9
View File
@@ -433,20 +433,32 @@ class WhatsAppService
$url = $this->apiUrl . $this->phoneNumberId . '/media'; $url = $this->apiUrl . $this->phoneNumberId . '/media';
$errors = []; $errors = [];
// ── Intento 1: PHP curl TLS 1.2 + sin ALPN + IPv4 ────────────────────── // ── Intento 1: PHP curl TLS 1.2 + sin ALPN + IPv4 (hasta 3 reintentos) ──
$a1 = $this->_curlUploadAttempt($url, $filePath, $mimeType, [ // curl1 logra conectar por TCP pero puede fallar en el envío (errno 55).
// Reintentar es útil: el error es del lado del CDN de Meta y suele desaparecer.
$a1Opts = [
CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2, CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2,
CURLOPT_SSL_ENABLE_ALPN => false, CURLOPT_SSL_ENABLE_ALPN => false, // sin ALPN → HTTP/1.1 → CDN diferente (alcanzable)
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4, CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4,
]); ];
if ($a1['ok']) return $a1['result']; $a1 = null;
for ($try = 1; $try <= 3; $try++) {
$a1 = $this->_curlUploadAttempt($url, $filePath, $mimeType, $a1Opts);
if ($a1['ok']) return $a1['result'];
error_log("WhatsAppService::uploadMedia a1 intento{$try} fail: errno={$a1['errno']} http={$a1['http']}");
if ($try < 3) sleep(1);
}
$errors[] = "curl1: #{$a1['errno']}({$a1['error']}) http={$a1['http']}"; $errors[] = "curl1: #{$a1['errno']}({$a1['error']}) http={$a1['http']}";
error_log("WhatsAppService::uploadMedia a1 fail: {$errors[0]}");
// ── Intento 2: PHP curl SSL deshabilitado + IPv4 (bypassa verificación) ── // ── Intento 2: PHP curl SSL deshabilitado + sin ALPN + HTTP/1.1 ──────────
// IMPORTANTE: ALPN desactivado es crítico — con ALPN activo curl resuelve a un
// IP de graph.facebook.com que no tiene ruta en el contenedor (errno 7 inmediato).
$a2 = $this->_curlUploadAttempt($url, $filePath, $mimeType, [ $a2 = $this->_curlUploadAttempt($url, $filePath, $mimeType, [
CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false, CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_ENABLE_ALPN => false, // mismo truco que curl1
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4, CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4,
]); ]);
if ($a2['ok']) return $a2['result']; if ($a2['ok']) return $a2['result'];
@@ -620,8 +632,11 @@ class WhatsAppService
$args = [ $args = [
$curlBin, $curlBin,
'--silent', '--show-error', '--silent', '--show-error',
'--ipv4', // forzar IPv4 (evita errno 7 por IPv6 no ruteado) '--ipv4', // forzar IPv4
'--tlsv1.2', '--tlsv1.2',
'--http1.1', // sin ALPN→HTTP/2: graph.facebook.com CDN alcanzable
'--no-alpn', // desactiva ALPN extension (igual que CURLOPT_SSL_ENABLE_ALPN=false)
'--insecure', // bypass SSL verify (fallback de último recurso)
'--max-time', '300', '--max-time', '300',
'-o', $tmpResponse, '-o', $tmpResponse,
'-w', '%{http_code}', '-w', '%{http_code}',