Данный сайт является КЛОНОМ оффициальной документации dev.vk.com
Настоятельно рекомендуется воздержаться от ввода личной информации.
Сайт создан на случай падения оффициальной документации.

Дата создания: 13.11.2022

VKWebAppCreateHash

VKWebAppCreateHash генерирует хеш. Хеш помогает защититься от подмены данных, которые ВКонтакте отправляет мини-приложению или игре, например при показах рекламы.

Чтобы убедиться, что данные приходят именно от сервера ВКонтакте, достаточно вычислить хеш и сравнить с тем, что мини-приложение или игра получило в ответе.

Пример

JavaScriptbridge.send('VKWebAppCreateHash') .then((data) => { if (data.sign) { // Хеш сгенерирован } }) .catch((error) => { // Ошибка console.log(error); });

Платформы

Android, iOS, Mobile Web, Web

Параметры

ПолеТипОписание
request_id необязательноеstringИдентификатор запроса. Используется для проверки соответствия запроса и ответа.

Результат

Проверить результат можно:

  • Используя объект Promise, который возвращается вызовом bridge.send(...).

  • С помощью событий VKWebAppCreateHashResult и VKWebAppCreateHashFailed.

Подробнее о проверке результатов при вызовах VK Bridge.

Объект Promise

Если обращение к платформе прошло успешно, управление будет передано в then-обработчик объекта Promise. В качестве ответа платформа возвращает объект со следующими полями:

ПолеТипОписание
signstringХеш, который генерирует сервер ВКонтакте, используя защищённый ключ и текущее значение времени. Такой же принцип используется для подписи параметров запуска.
tsintegerДата и время в секундах, когда хеш был сгенерирован (Unix Timestamp).

Если при обращении к платформе произошла ошибка, управление передаётся в метод catch. В качестве ответа платформа возвращает объект с информацией об ошибке, общий для всех событий VK Bridge.

События

VKWebAppCreateHashResult

Сигнализирует, что хеш сгенерирован. В обработчик события на стороне пользователя передаются следующие данные:

JavaScript{ detail: { type: "VKWebAppCreateHashResult", data: { sign: "m7TwcoveOwy4BE180UCTwyTkPApprYP81RjrOEuQcos", ts: 1664541985 } } }

Передаваемый объект подобен объекту, возвращаемому при успешном выполнении промиса.

VKWebAppCreateHashFailed

Информирует об ошибке, которая произошла при взаимодействии с платформой.

В обработчик события на стороне пользователя передаётся объект с информацией об ошибке, общий для всех методов VK Bridge.

Пример обработки событий

Смотрите раздел Обработка событий-результатов.

Вычисление хеша

Чтобы вычислить хеш:

  1. 1.
    Добавьте в ответ идентификатор пользователя user_id и идентификатор мини-приложения или игры app_id.
  2. 2.
    Отсортируйте параметры ответа по ключу (в алфавитном порядке) и объедините пары «ключ=значение» в строку с амперсандом в качестве разделителя.
  3. 3.
    Сериализуйте строку с помощью алгоритма хеширования HMAC-SHA256. В качестве ключа используйте защищённый ключ из настроек мини-приложения или игры. Выбранная реализация HMAC должна использовать хеш-функцию SHA-256.
  4. 4.
    Преобразуйте в строку двоичные данные, полученные на предыдущем шаге. Используйте алгоритм Base64.

Пример

PHP$sign_param = 'fSibt9N1v3DYflFKFl2qyRk-g3szAKiGDL0p6fYGFSI'; $hash_params = [ 'ts' => 1630076629, 'request_id' => '123', ]; // Добавляем идентификатор пользователя и мини-приложения или игры к ответу на событие. $hash_params['user_id'] = 123; $hash_params['app_id'] = 123; // Сортируем массив по ключам. ksort($hash_params); // Формируем строку вида param_name1=value&param_name2=value. $sign_params_query = http_build_query($hash_params); // Получаем хеш-код от строки, используя защищёный ключ приложения (метод HMAC). $sign = rtrim(strtr(base64_encode(hash_hmac('sha256', $sign_params_query, $client_secret, true)), '+/', '-_'), '='); // Сравниваем полученную строку со значением из VKWebAppCreateHash. $status = $sign === $sign_param; echo ($status ? 'ok' : 'fail')."\n";

Песочница

VKWebAppCreateHash