fix: compatibilidad PHP 7.4 — str_starts_with, str_contains, match, never, mixed

This commit is contained in:
Lizandro Guarnizo
2026-06-04 20:04:37 -05:00
parent 943e629120
commit 43f337ee34
5 changed files with 54 additions and 50 deletions
+29 -25
View File
@@ -92,11 +92,13 @@ class WpWebhook
$field = $change['field'] ?? '';
$value = $change['value'] ?? [];
match ($field) {
'messages', 'conversations' => self::handleMessages($value),
'statuses' => self::handleStatuses($value),
default => self::log('INFO', "Campo no manejado: $field"),
};
if ($field === 'messages' || $field === 'conversations') {
self::handleMessages($value);
} elseif ($field === 'statuses') {
self::handleStatuses($value);
} else {
self::log('INFO', "Campo no manejado: $field");
}
}
}
@@ -140,19 +142,19 @@ class WpWebhook
'display_phone' => $displayPhone,
];
match ($type) {
'text' => self::handleText($msg, $context),
'image' => self::handleMedia($msg, $context, 'image'),
'audio' => self::handleMedia($msg, $context, 'audio'),
'video' => self::handleMedia($msg, $context, 'video'),
'document' => self::handleMedia($msg, $context, 'document'),
'sticker' => self::handleMedia($msg, $context, 'sticker'),
'location' => self::handleLocation($msg, $context),
'interactive' => self::handleInteractive($msg, $context),
'button' => self::handleButton($msg, $context),
'reaction' => self::handleReaction($msg, $context),
default => self::log('INFO', "Tipo de mensaje no manejado: $type | from=$from"),
};
switch ($type) {
case 'text': self::handleText($msg, $context); break;
case 'image': self::handleMedia($msg, $context, 'image'); break;
case 'audio': self::handleMedia($msg, $context, 'audio'); break;
case 'video': self::handleMedia($msg, $context, 'video'); break;
case 'document': self::handleMedia($msg, $context, 'document'); break;
case 'sticker': self::handleMedia($msg, $context, 'sticker'); break;
case 'location': self::handleLocation($msg, $context); break;
case 'interactive': self::handleInteractive($msg, $context); break;
case 'button': self::handleButton($msg, $context); break;
case 'reaction': self::handleReaction($msg, $context); break;
default: self::log('INFO', "Tipo de mensaje no manejado: $type | from=$from"); break;
}
}
// Estados que pueden venir dentro del mismo field 'messages'
@@ -198,11 +200,13 @@ class WpWebhook
private static function handleInteractive(array $msg, array $ctx): void
{
$iType = $msg['interactive']['type'] ?? '';
$reply = match ($iType) {
'button_reply' => $msg['interactive']['button_reply'] ?? [],
'list_reply' => $msg['interactive']['list_reply'] ?? [],
default => [],
};
if ($iType === 'button_reply') {
$reply = $msg['interactive']['button_reply'] ?? [];
} elseif ($iType === 'list_reply') {
$reply = $msg['interactive']['list_reply'] ?? [];
} else {
$reply = [];
}
$preview = $iType . ': ' . json_encode($reply);
self::log('MSG', "[INTERACTIVE/$iType] {$ctx['from']} | reply=" . json_encode($reply));
self::saveWebhookLog('messages', $ctx['from'], $ctx['name'], 'interactive', $preview);
@@ -262,7 +266,7 @@ class WpWebhook
}
$sigHeader = $_SERVER['HTTP_X_HUB_SIGNATURE_256'] ?? '';
if (!str_starts_with($sigHeader, 'sha256=')) {
if (strpos($sigHeader, 'sha256=') !== 0) {
self::respond(401, ['error' => 'Firma ausente']);
}
@@ -366,7 +370,7 @@ class WpWebhook
}
}
private static function respond(int $code, array $body): never
private static function respond(int $code, array $body): void
{
http_response_code($code);
header('Content-Type: application/json; charset=utf-8');