Invalid email token в Телеграмме

Всем привет. Давно ничего не писал, так как не было никаких идей, но недавно, 31 мая 2019 года, Telegram выпустил новое обновление, в котором добавил новый тип данных — LoginUrl. Итак, попробую объяснить идею авторизации с помощью Telegram бота. Для начала, чтобы бот мог писать пользователю, пользователь должен отправить сообщение /start. Бот может как угодно ответить на это сообщение, например обычным приветствием или набором кнопок для взаимодействия с ботом. Именно кнопками мы и будем пользоваться для авторизации, но об этом чуть позже. Пользователь жмет на нашу кнопку, после чего перед ним появляется окошко с подтверждением действия. Если пользователь подтверждает свое действие, то он переходит на указанный в параметрах url с данными своего аккаунта, в том числе и уникальный id для пользователя.

  • chat_id — в данном случае id пользователю, которому мы отправляем сообщение. Получаем от Telegram в методе getUpdates или с помощью Webhook.
  • text — текст сообщения. В данном случае он нам не нужен, так как мы будем использовать кнопку. Но если хотите объясниться перед пользователем, то это идеальный момент.
  • parse_mode — Указывает формат отправляемого сообщения. Поддерживаются Markdown и HTML.
  • disable_web_page_preview — Отключает превью для ссылки в данном сообщении.
  • disable_notification — Отправка сообщение без уведомления для юзера.
  • reply_to_message_id — Указывает на id сообщения, которое мы цитируем.
  • reply_markup — Добавляет кнопки.

Как можно было догадаться, нам необходимы chat_id и reply_markup. reply_markup принимает параметры в виде json массива с указанием типа кнопок и их параметров. Мы будем использовать inline_keyboard, так как они поддерживают LoginUrl. Ну давайте создадим простую кнопку:

Еще по теме:  Как изменить исполнителя в Телеграмме

Telegram Invalid Email Token !


$keyboard = Array( ‘inline_keyboard’ => [ [ [‘text’ => ‘Нажми меня’, ‘login_url’ => [ ‘url’ => ‘https://web-wost.ru’ ] ] ] ] );

Не забываем перевести данную кнопку в json:

$keyboard_json = json_encode($keyboard);

Ну и отправляем:

file_get_contents(‘https://api.telegram.org/bot’ . $token . ‘/sendMessage?chat_id=’ . $id . ‘reply_markup=’ . $keyboard_json);

Не забываем так же создать переменные $token с токеном бота и $id с указанием id пользователя. Если всё сделано верно, то после выполнения данного php скрипта, бот отправит пользователю сообщение с кнопкой ‘Нажми меня’. После нажатия на кнопку, пользователя спросят разрешение об отправке данных и переходе по ссылке. Получаем данные от пользователя с помощью REQUEST:

$user_id = $_REQUEST[‘id’]; $username = $_REQUEST[‘username’]; $hash = $_REQUEST[‘hash’];

В принципе так мы получаем необходимые данные о пользователе, но их можно легко подменить. Для безопасности передачи данных Telegram отправляет нам hash. Для его проверки воспользуемся следующим кодом:

$data = $_REQUEST; $hash = $data[‘hash’]; unset($data[‘hash’]); $new_data = []; foreach($data as $key => $value) $new_data[] = $key . ‘=’ . $value; sort($new_data); $data_string = implode(‘n’, $new_data); $secret_hash = hash(‘sha256’, $token, true); $new_hash = hash_hmac(‘sha256’, $data_string, $secret_hash); if(strcmp($hash, $new_hash) !== 0) exit(‘Подмена данных. ‘); echo ‘Привет ‘ . $data[‘username’];

Попробую разобрать данный код. Сначала мы записываем все полученные данные в переменную $data, далее сохраняем hash в специальную переменную($hash) и удаляем его из массива данных $data. Создаем новый пустой массив($new_data) для наших данных. Используя foreach, мы проходим через все полученные данные, записывая их в наш новый массив($new_data), сохраняя ключ=значение. Сортируем по алфавиту, превращаем в строку $data_string, записывая элементы через n. Хешируем наш токен($secret_hash), а дальше и все наши данные($new_hash). И последним шагом является проверка подлинности хэша.

Ну и осталось лишь осмотреть все параметры объекта LoginUrl:

  • url — указывает url, куда будет отправлен пользователь после нажатия на ссылку.
  • forward_text — текст кнопки в пересылаемых сообщениях.
  • bot_username — имя бота, через которого будет происходить авторизация.
  • request_write_access — запрос на возможность ботом писать пользователю сообщения.
Еще по теме:  Moneyman мошенник Телеграмм канал

На этом я заканчиваю, надеюсь эта запись будет полезна 🙂

1 комментариий

Татьяна 2023-07-28 20:21:43 Ничего, к сожалению, не поняла

Новый комментарий

  • О проекте
  • Отправить публикацию
  • Реклама на сайте
  • Условия пользования

Источник: web-wost.ru

PEER_ID_INVALID при отправке сообщения на ИД пользователя

Я использую TLSharp для создания клиента для Telegram, и я хочу отправлять сообщения некоторым пользователям телеграммы.
у меня есть их username и userid для использования, но я не могу найти способ использовать их username для отправки им сообщения (хотя в телеграмме api вы можете это сделать, но я не мог найти способ сделать это с помощью TLSharp ), поэтому я использую их userid для отправки им сообщения с этим кодом:

await client.SendMessageAsync(new TLInputPeerUser() < user_id = someOneUserid >, «This is My Message»);

этот код работает с людьми, которые у меня есть в моем списке контактов, но с остальными я получил исключение PEER_ID_INVALID . есть ли способ добавить этих людей в список контактов, прежде чем отправлять им сообщение? или есть способ просто использовать их username ? заранее спасибо.

Masih Akbari 02 май 2017, в 07:51

Источник: overcoder.net

NextCloud — 2FA через Telegram

Nextcloud

Скинули задачку — настроить двухфакторную аутентификацию в NextCloud через Telegram. Принцип работы простой:

  1. Пользователь логинится в NextCloud.
  2. Пользователю в Телеграм от бота приходит код второго фактора.
  3. Пользователь указывает код и входит в NextCloud.

Создание бота в Telegram

/start

telegram

Выводится справка по командам. Для создания бота пишем:

/newbot

Нам предлагают указать для бота name (имя), я пишу:

Zabbix internet-lab.ru

Нам предлагают указать для бота username (логин), он должен оканчиваться на «bot» или «Bot» я пишу:

Еще по теме:  Видно ли в Телеграмме кто смотрел историю

zabbix_internet_lab_ru_bot

telegram

Бот создан, получаем токен «Use this token to access the HTTP API». Копируем токен, он нам понадобится для дальнейшей настройки.

Можно украсить бота, загрузить картинку и описание.

Two-Factor Gateway

Для аутентификации через Телеграм устанавливаем в NextCloud приложение Two-Factor Gateway.

nextcloud

Документацию по дальнейшей настройке бота можно найти здесь:

Инструкцию по регистрации бота пропускаем, мы уже это сделали. Если не сделали, то делаем:

А теперь нужно зайти в консоль сервера NextCloud и указать приложению токен:

occ twofactorauth:gateway:configure telegram Please enter your Telegram bot token: 123456789:AAbbCCddEEffGGhhIIjjKKllMMnnOOppQQ Using 123456789:AAbbCCddEEffGGhhIIjjKKllMMnnOOppQQ.

Файл occ должен иметь права на выполнение, скрипт выполнять нужно от имени пользователя, под которым работает NextCloud. К примеру:

cd /var/www/nextcloud sudo chmod a+x ./occ sudo -u www-data ./occ twofactorauth:gateway:configure telegram

nextcloud

Включение второго фактора

Дальше работаем от пользователя, которому нужно включить второй фактор.

/getid

telegram

На самом деле таких ботов, которые возвращают идентификаторы довольно много.

Заходим к боту, которого мы создали в Телеграм и пишем ему:

/start

Логинимся в NextCloud и переходим к настройкам безопасности.

nextcloud

Переходим к разделу Telegram verification, нажимаем Enable.

nextcloud

Нужно ввести номер телефона или chat id, который мы узнали ранее. Поскольку номер телефона у многих скрыт, то лучше указывать chat id. Verify.

nextcloud

Бот присылает код подтверждения в телегу:

123456 is your Nextcloud verification code.

Копируем его в NextCloud. Confirm.

nextcloud

Your account was successfully configured to receive messages via Telegram.

Проверка

Пробуем выполнить вход в NextCloud.

nextcloud

Требуется указать второй фактор, код которого высылает нам бот в Телеграм. Наш NextCloud стал ещё безопаснее.

Источник: internet-lab.ru

Рейтинг
( Пока оценок нет )
Загрузка ...