• Валидация пользователей WebAPP в Telegram, почему не работает?

    @vetton
    IvanU7n, да, как я понял в ней и было дело. Нужно было rawurldecode сделать.
    Нашел рабочий код, может кому пригодится

    <?php

    $bot_token = '0123456789:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';

    $data_check_string = 'XXX'; // get from Telegram.WebAppData

    $data_check_arr = explode('&', rawurldecode($data_check_string));
    $needle = 'hash=';
    $check_hash = FALSE;
    foreach($data_check_arr AS &$val){
    if(substr($val, 0, strlen($needle)) === $needle){
    $check_hash = substr_replace($val, '', 0, strlen($needle));
    $val = NULL;
    }
    }

    $data_check_arr = array_filter($data_check_arr);
    sort($data_check_arr);

    $data_check_string = implode("\n", $data_check_arr);
    $secret_key = hash_hmac('sha256', $bot_token, "WebAppData", true);
    $hash = bin2hex(hash_hmac('sha256', $data_check_string, $secret_key, true) );

    if(strcmp($hash, $check_hash) === 0){
    print('ok');
    } else {
    print('fail');
    }
    Написано
  • Валидация пользователей WebAPP в Telegram, почему не работает?

    @vetton
    IvanU7n, про токен то естественно.

    $data_check_string имеет такой формат

    auth_date=1705675078
    query_id=AAHtQ6EQAAAAAO1DoRAXdGkT
    user=%7B%22id%22%3A279004141%2C%22first_name%22%3A%22%D0%95%D0%B2%D0%B3%D0%B5%D0%BD%D0%B8%D0%B9%22%2C%22last_name%22%3A%22%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%22%2C%22username%22%3A%22johnvetton%22%2C%22language_code%22%3A%22ru%22%2C%22is_premium%22%3Atrue%2C%22allows_write_to_pm%22%3Atrue%7D

    и с этим кодом выдаёт "Data is NOT from Telegram". Т.к $hash и $check_hash разные

    P.S
    Я и через Javascript подготавливал $data_check_string и через php потом этим способом (думал может ошибка в подготовке строки)
    $data_check_arr = [];
    foreach ($auth_data as $key => $value) {
    $data_check_arr[] = $key . '=' . $value;
    }
    sort($data_check_arr);
    $data_check_string = implode("\n", $data_check_arr);

    и "true" убирал в конце hash_hmac('sha256', BOT_TOKEN, 'WebAppData', true);

    ничего не помогает
    Написано
  • Валидация пользователей WebAPP в Telegram, почему не работает?

    @vetton
    А какой код в итоге рабочий?

    $secret_key = hash_hmac('sha256', BOT_TOKEN, 'WebAppData', true);
    $hash = hash_hmac('sha256', $data_check_string, $secret_key);
    if (strcmp($hash, $check_hash) !== 0) {
    $return = 'Data is NOT from Telegram';
    }

    Не работает
    Написано
  • Почему не работает cross-domain HTTP OPTIONS запросы?

    @vetton
    Я даже зарегистрировался для того, чтобы спасибо сказать. Спасибо!