[Из песочницы] Авторизация/Регистрация пользователя через Telegram
В данном топике хочу описать дополнительный, а для некоторых сервисов возможно и основной способ авторизации и регистрации пользователя через Telegram, подобно OAuth авторизации через социальные сети и web-сервисы.
Допустим, у Вас есть некий сервис, который предлагает пользователям вход через Telegram. На странице авторизации пользователю предлагается ввести его Username в Telegram. После ввода Username, на аккаунт пользователя приходит сообщение с кодом подтверждения, который он вводит на странице авторизации.
В первую очередь нам потребуется «живой» аккаунт в Telegram, то есть аккаунт который зарегистрирован на мобильный номер телефона. В данном случае боты не подходят для данной задачи, так как боты не могут писать сообщения первыми.
Теперь что касается серверной стороны.
На странице приложений Telegram есть не официальное приложение telegram-cli. Оно и будет выполнять функцию приложения которое будет взаимодействовать с сервером Telegram.
Для упрощения примера telegram-cli будем ставить в каталог /usr/local/src/: cd /usr/local/src/
Клонируем репозиторий: git clone --recursive https://github.com/vysheng/tg.git && cd tg
Ставим необходимые пакеты: sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev libjansson-dev python-dev
Собираем telegram-cli: ./configure make
При первом запуске, приложение попросит ввести номер телефона нашего «живого» аккаунта. После ввода номера, будет выслан код подтверждения по смс или в приложение если данный аккаунт сейчас активен на другом устройстве. После подтверждения, в вашем домашнем каталоге будет создана директория ».telegram-cli» в которой будут хранится файлы конфигураций для указанного аккаунта.
Запускаем: /usr/local/src/tg/bin/telegram-cli -k /usr/local/src/tg/tg-server.pub
Видим следующую картину:
Выходим из приложения: quit
Запускаем приложение как демон например на порту 8089: /usr/local/src/tg/bin/telegram-cli --json -k /usr/local/src/tg/tg-server.pub -W -d -P 8089 &
Теперь нам необходим скрипт который будет взаимодействовать с telegram-cli.
По ключевым словам (telegram-cli php client) на GitHub было найдено готовое решение на PHP.
Установка:
git clone https://github.com/zyberspace/php-telegram-cli-client
cd php-telegram-cli-client
curl -sS https://getcomposer.org/installer | php
php composer.phar install
Создаем файл tg.php со следующим содержанием:
exec("resolve_username {$USERNAME}")){
if($user->type == 'user'){
$code = mt_rand(10000, 99999);
$message = "Hi {$user->first_name}! Your code: {$code}";
if($telegram->exec("msg user#{$user->id} {$message}")){
echo "Send message: Success\r\n";
} else {
echo "Send message: Error\r\n";
}
}
} else {
echo "User {$USERNAME} not found.\r\n";
}
В переменную $USERNAME вписываем username пользователя которому будет отправлено сообщение с кодом подтверждения.
Запускаем скрипт: php tg.php
Если все прошло успешно, пользователю будет отправлено сообщение с кодом.
На базе данного примера можно легко реализовать регистрацию/авторизацию пользователей через Telegram.
Спасибо за внимание!