Для проверки авторизации пользователей Telegram в мини-приложениях (или ботах) вам нужно следовать процедуре, описанной в официальной документации Telegram. Основная идея заключается в том, что Telegram передает информацию об авторизованном пользователе через GET-запрос, который вы должны проверить на серверной стороне.
Вот основные шаги, которые вам нужно выполнить:
### Шаги для проверки авторизации:
1. **Получение данных**: Когда пользователь нажимает на кнопку 'Авторизоваться', Telegram отправляет данные на ваш сервер через GET-запрос. Данные, которые вы получаете, включают следующие параметры:
- `id`: уникальный идентификатор пользователя в Telegram.
- `first_name`: имя пользователя.
- `last_name`: фамилия пользователя (если есть).
- `username`: имя пользователя в Telegram (если есть).
- `photo_url`: URL фотографии пользователя (если есть).
- `auth_date`: временная метка, когда авторизация была произведена.
- `hash`: подпись, которая используется для проверки данных.
2. **Формирование строки для подписи**: Для проверки подписи (hash) вам нужно сформировать строку, которая будет содержать все данные, за исключением хеша, и затем создать хеш с помощью HMAC-SHA256 с использованием вашего токена бота как секретного ключа.
3. **Проверка подписи**: Сравните полученный хеш с тем, который вы рассчитали. Если они совпадают, значит, пользователь успешно авторизован.
### Пример кода на PHP:
```php
<?php
// Ваш токен бота
$botToken = 'YOUR_BOT_TOKEN';
// Функция для проверки подписи
function checkAuthorization($data, $botToken) {
// Извлекаем данные
$user_id = $data['id'];
$first_name = $data['first_name'];
$last_name = $data['last_name'] ?? '';
$username = $data['username'] ?? '';
$photo_url = $data['photo_url'] ?? '';
$auth_date = $data['auth_date'];
$hash = $data['hash'];
// Убираем hash из массива
unset($data['hash']);
// Сортируем данные по алфавиту и формируем строку
ksort($data);
// Создаем строку для подписи
$data_string = http_build_query($data);
$secret_key = hash('sha256', $botToken, true);
$check_hash = hash_hmac('sha256', $data_string, $secret_key);
// Сравниваем подписи и проверяем время
if ($hash === $check_hash) {
// Проверяем, что время авторизации в пределах 5 минут
if (time() - (int)$auth_date < 300) {
return true; // Успешная авторизация
}
}
return false; // Ошибка авторизации
}
// Получаем данные из GET-запроса
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
if (checkAuthorization($_GET, $botToken)) {
// Пользователь авторизован
echo "Пользователь авторизован!";
} else {
// Ошибка авторизации
echo "Ошибка авторизации!";
}
}
?>
```
### Объяснение функций:
- **checkAuthorization**: Эта функция проверяет, прошла ли авторизация успешно. Она принимает данные из GET-запроса и токен бота, формирует строку для подписи и сравнивает ее с присланным хешем. Она также проверяет временную метку, чтобы удостовериться, что она не истекла.
### Заключение:
Следуя этим шагам и используя приведенный выше пример, вы сможете реализовать проверку авторизации пользователей Telegram в своем мини-приложении. Обязательно обратите особое внимание на безопасность и тестируйте свой код.