Налаштування авторизації через Telegram 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Налаштування авторизації через Telegram 1С-Бітрікс
Простий
~1 день
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1273
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    865
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    602
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    762
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    667
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1000

Налаштування авторизації через Telegram у 1С-Бітрикс

Telegram Login Widget — офіційний механізм Telegram для авторизації на сторонніх сайтах. На відміну від OAuth-провайдерів (ВКонтакте, Google), він працює за власним протоколом: дані користувача передаються через хеш HMAC-SHA256 з ключем з токена бота. У 1С-Бітрикс стандартного модуля для Telegram-авторизації нема, тому інтеграція робиться вручну або через сторонній модуль.

Схема роботи Telegram Login Widget

  1. На сторінці авторизації розташовується віджет Telegram (скрипт telegram.org/js/telegram-widget.js).
  2. Користувач натискає кнопку, підтверджує в додатку Telegram, що довіряє сайту.
  3. Telegram передає на callback URL (або в JS-callback) об'єкт з полями: id, first_name, last_name, username, photo_url, auth_date, hash.
  4. Сервер перевіряє підпис: будує data-check-string з усіх полів (крім hash), обчислює HMAC-SHA256 з ключем SHA256(bot_token) та порівнює з hash.
  5. Перевіряє auth_date — не старіше 86400 секунд (захист від replay-атак).
  6. Після перевірки — авторизує або реєструє користувача.

Створення бота

Авторизаційний віджет прив'язаний до Telegram-бота. Створити бота: @BotFather → /newbot. Потім передати домен сайту: /setdomain → @your_bot → your-site.com. Без цього віджет не буде працювати — Telegram перевіряє origin запиту.

Токен бота використовується тільки на сервері для перевірки підпису. Ніколи не видавайте токен на фронтенд.

Реалізація в Бітрикс

Створюємо компонент /local/components/custom/telegram.auth/. У шаблоні компонента розташовуємо віджет:

<script async src="https://telegram.org/js/telegram-widget.js?22"
    data-telegram-login="your_bot_name"
    data-size="large"
    data-auth-url="https://your-site.com/auth/telegram/callback/"
    data-request-access="write">
</script>

Обробник callback (/local/php_interface/include/auth/telegram_callback.php або через роутер Бітрикс):

\Bitrix\Main\Loader::includeModule('main');

$data = $_GET;
$hash = $data['hash'];
unset($data['hash']);

ksort($data);
$checkString = implode("\n", array_map(fn($k, $v) => "$k=$v", array_keys($data), $data));

$secretKey = hash('sha256', $botToken, true);
$computedHash = hash_hmac('sha256', $checkString, $secretKey);

if (!hash_equals($computedHash, $hash)) {
    // Невалідна підпис
    LocalRedirect('/auth/?error=invalid_signature');
}

if ((time() - (int)$data['auth_date']) > 86400) {
    LocalRedirect('/auth/?error=expired');
}

// Шукаємо користувача за Telegram ID у користувацькому полі або таблиці
$telegramId = (int)$data['id'];
$user = \Bitrix\Main\UserTable::getList([
    'filter' => ['UF_TELEGRAM_ID' => $telegramId],
    'select' => ['ID'],
    'limit'  => 1,
])->fetch();

if ($user) {
    // Авторизуємо
    $GLOBALS['USER']->Authorize($user['ID']);
} else {
    // Реєструємо нового користувача
    $newUser = new CUser();
    $userId = $newUser->Add([
        'LOGIN'      => 'tg_' . $telegramId,
        'NAME'       => $data['first_name'] ?? '',
        'LAST_NAME'  => $data['last_name'] ?? '',
        'ACTIVE'     => 'Y',
        'PASSWORD'   => randString(20),
        'UF_TELEGRAM_ID' => $telegramId,
    ]);
    $GLOBALS['USER']->Authorize($userId);
}

LocalRedirect('/personal/');

Поле UF_TELEGRAM_ID створюється через Параметри → Користувачі → Користувацькі поля з типом «Ціле число».

Типові проблеми

  • «Bot domain invalid» — не прописаний домен у @BotFather. Домен вказується без протоколу та слеша.
  • «Hash invalid» — на сервері використовується $_GET замість верифікованих даних, або до даних додаються зайві поля.
  • Працює тільки по HTTPS — Telegram Widget потребує SSL на цільовому домені.

Терміни виконання

Реалізація Telegram-авторизації з нуля: 4–6 годин (бот, компонент, обробник, користувацьке поле, шаблон кнопки).