WooCommerce: как настроить авторизацию пользователей через Telegram-бота с помощью webhook

Диагностика задачи: зачем нужна авторизация через Telegram-бота в WooCommerce

В некоторых интернет-магазинах на WooCommerce требуется альтернативный способ авторизации пользователей, например, через Telegram-бота. Это удобно для быстрой регистрации и входа без пароля, повышает вовлеченность и упрощает взаимодействие с клиентом. Задача — связать аккаунт WooCommerce с Telegram-аккаунтом через webhook и обеспечить безопасный вход.

Технические требования и обзор решения

Для реализации авторизации через Telegram-бота нам понадобится:

  • Telegram-бот с включенным webhook;
  • Скрипт на стороне WordPress, который обработает webhook и авторизует пользователя;
  • Механизм связывания Telegram ID с пользователем WooCommerce;
  • Обеспечение безопасности — проверка токенов и уникальности.

Основные этапы:

  1. Создать Telegram-бот и подключить webhook;
  2. Сохранить Telegram ID пользователя в мета данных WooCommerce-пользователя;
  3. Обработать входящие сообщения от бота и выполнять вход пользователя на сайт;
  4. Вывести сообщения об успешной или неудачной авторизации.

Пошаговое решение с кодом

1. Создание Telegram-бота и установка webhook

С помощью BotFather создайте бота и получите токен. Настройте webhook на адрес вашего сайта, например:

https://your-site.com/wp-json/tg-auth/v1/webhook

Для этого выполните запрос в Telegram API:

https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://your-site.com/wp-json/tg-auth/v1/webhook

2. Регистрация REST API маршрута для приема webhook в WordPress

Добавьте следующий код в functions.php или в отдельный плагин:

add_action('rest_api_init', function () {
    register_rest_route('tg-auth/v1', '/webhook', array(
        'methods' => 'POST',
        'callback' => 'tg_auth_webhook_handler',
        'permission_callback' => '__return_true',
    ));
});

function tg_auth_webhook_handler(WP_REST_Request $request) {
    $data = json_decode($request->get_body(), true);
    if (empty($data['message']['from']['id'])) {
        return new WP_REST_Response('Invalid data', 400);
    }

    $telegram_id = intval($data['message']['from']['id']);
    $text = trim($data['message']['text'] ?? '');

    // Обработка команды /start с токеном для авторизации
    if (strpos($text, '/start') === 0) {
        $parts = explode(' ', $text);
        if (count($parts) < 2) {
            return new WP_REST_Response('Token missing', 200);
        }
        $token = $parts[1];

        // Проверяем токен — в данном примере токен — user_login
        $user = get_user_by('login', $token);
        if (!$user) {
            return new WP_REST_Response('User not found', 200);
        }

        // Сохраняем Telegram ID в мета данных пользователя
        update_user_meta($user->ID, 'telegram_id', $telegram_id);

        // Авторизация пользователя в WordPress (создаем сессию)
        wp_clear_auth_cookie();
        wp_set_current_user($user->ID);
        wp_set_auth_cookie($user->ID);

        // Отправляем ответ боту
        tg_auth_send_message($telegram_id, 'Вы успешно авторизованы на сайте!');
        return new WP_REST_Response('User authorized', 200);
    }

    return new WP_REST_Response('No action', 200);
}

function tg_auth_send_message($chat_id, $message) {
    $token = 'ВАШ_ТОКЕН_БОТА';
    $url = "https://api.telegram.org/bot$token/sendMessage";
    wp_remote_post($url, array(
        'body' => json_encode(array(
            'chat_id' => $chat_id,
            'text' => $message
        )),
        'headers' => array('Content-Type' => 'application/json'),
    ));
}

3. Генерация ссылки для пользователя

Для авторизации пользователь должен нажать на ссылку вида:

https://t.me/YourBotUsername?start=имя_пользователя

Например, если user_login — ivan, ссылка будет:

https://t.me/YourBotUsername?start=ivan

При переходе по ней бот получит команду /start ivan и свяжет Telegram ID с пользователем, а затем пользователь будет автоматически авторизован.

Проверка результата после внедрения

  • Перейдите по ссылке https://t.me/YourBotUsername?start=your_login в Telegram;
  • Отправьте команду боту и дождитесь ответа "Вы успешно авторизованы на сайте!";
  • Вернитесь на сайт и проверьте, что сессия WordPress активна (например, откройте страницу "Мой аккаунт" в WooCommerce — вы должны быть авторизованы);
  • Проверьте в базе данных, что в usermeta для пользователя появился ключ telegram_id с правильным значением.

Частые ошибки и как их исправить

  • Webhook не вызывается: Проверьте, что webhook корректно установлен через Telegram API, сайт доступен по HTTPS, и REST маршрут зарегистрирован;
  • Нет ответа от бота: проверьте функцию отправки сообщений, корректность токена бота и права доступа сервера;
  • Пользователь не авторизуется: убедитесь, что передаете правильный user_login в ссылке, и что пользователь существует;
  • Сессия не сохраняется: убедитесь, что куки WordPress устанавливаются, а не блокируются плагинами кеширования или безопасности;
  • Безопасность: не используйте в качестве токена user_login в реальных проектах без дополнительной защиты — лучше генерировать уникальные одноразовые токены.

Практические советы по безопасности и производительности

  • Используйте HTTPS для сайта и Telegram webhook — это обязательное требование;
  • Храните Telegram ID в мета данных пользователя, чтобы не создавать лишних таблиц;
  • Реализуйте проверку токенов через временные и уникальные ключи, например, с помощью пользовательских мета данных или таблиц опций;
  • Ограничьте частоту вызовов webhook и обработку команд для снижения нагрузки;
  • Используйте transient API для кеширования частых запросов, если добавляете дополнительную логику;
  • Проверьте совместимость с WooCommerce сессиями — иногда плагин кеширования может мешать автоматической авторизации.

Сравнение вариантов реализации авторизации через Telegram в WooCommerce

МетодОписаниеПлюсыМинусы
Webhook + REST API (как в статье)Прием команд от Telegram для авторизации через wp_set_auth_cookieПолный контроль, интеграция без сторонних плагиновТребует разработки, безопасность на разработчике
Плагины авторизации через соцсетиИспользование плагинов для Telegram OAuth авторизацииПростота использования, поддержкаМогут быть платными, ограниченная кастомизация
Встраивание Telegram Login WidgetTelegram предлагает виджет для входа на сайтПростота, официальное решениеОграничено функционалом, не всегда интегрируется с WooCommerce

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как использовать хуки для добавления функциональности в WordPress
08.11.2025
Как запретить удалённые изображения в WordPress: защита от внешних ссылок
18.12.2025
WordPress: как удалить пустое место в меню и исправить пробелы между пунктами
08.12.2025
Как создать автоматическое сообщение о обновлении содержимого в WordPress
29.03.2026
Как добавить собственные типы записей в WordPress с помощью Meta Box
26.03.2026
×
Делай сайт лучше!!

-20% на премиум темы и плагины

Использовать скидку ⋙