По документации телеграм:
https://core.telegram.org/bots/webapps#validating-...
Получится вот такой код (PHP):
$bot_token = ‘ТОКЕН_БОТА';
$data = urldecode($_POST['data']);
$hash = $_POST['hash'];
$data = explode("&", $data);
$new_data = array();
foreach($data as $value) {
$value_array = explode("=", $value);
if($value_array[0] == 'hash') {continue;}
$new_data += array($value_array[0] => $value_array[1]);
}
ksort($new_data);
$array_data = array();
foreach($new_data as $k => $v) {
array_push($array_data, "$k=$v");
}
$array_data = implode('\n', $array_data);
$secret_key = hash_hmac('sha256', $bot_token, "WebAppData");
if(hash_hmac('sha256', $array_data, $secret_key) == $hash) {
echo 'ok!';
} else {
echo ‘error';
}
Запрос из приложения:
$.post( "check", {"data":window.Telegram.WebApp.initData, "hash": window.Telegram.WebApp.initDataUnsafe.hash}, function( data ) {
alert(data);
});
Хеши при проверке не совпадают. Что не учтено при проверке подписи?