Рабочее решение
function check_hash($params, $token): bool {
$hash = $params['hash'];
unset($params['hash']);
// Фильтрация пустых значений и сортировка массива по ключам
$params = array_filter($params);
ksort($params);
// Формирование строки для подписи
$string = implode("\n", array_map(
function ($key, $value) {
return $key . '=' . $value;
},
array_keys($params),
$params
));
// Получение секретного ключа
$secret_key = hash_hmac('sha256', $token, "WebAppData", true);
// Вычисление HMAC
$newHash = hash_hmac('sha256', $string, $secret_key);
// Сравнение полученного хэша с исходным
return hash_equals($newHash, $hash);
}