Pull to refresh

Авторизация/Регистрация пользователя через Telegram

Reading time 2 min
Views 71K
В данном топике хочу описать дополнительный, а для некоторых сервисов возможно и основной способ авторизации и регистрации пользователя через 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

Видим следующую картину:
image

Выходим из приложения:
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 со следующим содержанием:
<?php

	require('vendor/autoload.php');
	$telegram = new \Zyberspace\Telegram\Cli\Client('tcp://localhost:8089');

	$USERNAME = '';

	if($user = $telegram->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.

Спасибо за внимание!
Tags:
Hubs:
+6
Comments 12
Comments Comments 12

Articles