• Telegram webapps - как проверить hash из Telegram.WebApp.initData на php?

    @esurkov1
    Рабочее решение
    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);
    }
    Ответ написан
    Комментировать