wplang.ru wordpress WP Lang

WooCommerce: как добавить авторизацию через Telegram без плагинов

Почему стоит добавить авторизацию через Telegram в WooCommerce

Telegram – популярный мессенджер с миллионами пользователей, и интеграция авторизации через него может повысить конверсию регистрации и упростить вход для ваших клиентов. В отличие от готовых плагинов, ручная реализация позволяет избежать конфликтов и снизить нагрузку на сайт.

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

Для подключения авторизации через Telegram в WooCommerce без плагинов нужно решить следующие задачи:

  • Настроить Telegram Bot и получить токен доступа
  • Реализовать проверку пользователя через Telegram Login Widget
  • Обработать полученные данные на стороне WordPress
  • Создать или авторизовать пользователя в WooCommerce по данным Telegram
  • Обеспечить защиту от подделки данных и повторных попыток

Шаг 1. Создание Telegram бота и получение токена

Чтобы использовать Telegram Login Widget, зарегистрируйте бота через @BotFather и сохраните API токен. Он понадобится для верификации данных.

Шаг 2. Встраиваем Telegram Login Widget на страницу входа WooCommerce

Добавьте виджет в шаблон страницы входа (обычно form-login.php или в functions.php через хук). Пример вставки виджета:

<script async src="https://telegram.org/js/telegram-widget.js?15" data-telegram-login="your_bot_username" data-size="large" data-userpic="false" data-auth-url="<?php echo esc_url(admin_url('admin-post.php?action=telegram_auth')); ?>"></script>

Параметр data-auth-url указывает, куда Telegram отправит данные пользователя после успешного входа.

Шаг 3. Обработка данных Telegram в WordPress

Создайте обработчик для экшена telegram_auth, который проверит подпись и создаст/авторизует пользователя.

add_action('admin_post_nopriv_telegram_auth', 'handle_telegram_auth');
add_action('admin_post_telegram_auth', 'handle_telegram_auth');

function handle_telegram_auth() {
    $data = $_GET;
    $bot_token = 'ВАШ_ТОКЕН_БОТА';

    if (!verify_telegram_auth($data, $bot_token)) {
        wp_die('Ошибка проверки Telegram данных');
    }

    $user = get_user_by('email', $data['username'].'@telegram.local');

    if (!$user) {
        $user_id = wp_create_user($data['username'], wp_generate_password(), $data['username'].'@telegram.local');
        $user = get_user_by('ID', $user_id);
    }

    wp_set_auth_cookie($user->ID);
    wp_set_current_user($user->ID);

    wp_redirect(home_url());
    exit;
}

function verify_telegram_auth($data, $bot_token) {
    $check_hash = $data['hash'];
    unset($data['hash']);

    $data_check_arr = [];
    foreach ($data as $key => $value) {
        $data_check_arr[] = $key.'='.$value;
    }
    sort($data_check_arr);
    $data_check_string = implode("\n", $data_check_arr);

    $secret_key = hash('sha256', $bot_token, true);
    $hash = hash_hmac('sha256', $data_check_string, $secret_key);

    return hash_equals($hash, $check_hash);
}

Шаг 4. Проверка результата авторизации

  • Перейдите на страницу входа WooCommerce, убедитесь, что отображается кнопка Telegram Login.
  • Нажмите на кнопку, выполните вход через Telegram.
  • После успешной авторизации вы должны автоматически оказаться на главной странице сайта, будучи залогиненным как пользователь WordPress.
  • В админке проверьте, что создан новый пользователь с почтой username@telegram.local.

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

  • Неверная проверка подписи: Убедитесь, что bot_token точный, а данные перед проверкой не изменяются.
  • Пользователь не создаётся: Проверьте права на создание пользователей, ошибки PHP в логах.
  • Редирект не работает: Используйте exit; после wp_redirect.
  • Кнопка Telegram не отображается: Проверьте data-telegram-login на точное имя вашего бота.

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

  • Тщательно проверяйте подпись данных, чтобы предотвратить подделку.
  • Используйте нестандартный email-домен для пользователей Telegram, чтобы не пересекаться с реальными почтами.
  • Ограничьте права новых пользователей, чтобы не допустить злоупотреблений.
  • Периодически обновляйте токен бота и меняйте секреты.

Оптимизация и пользовательский опыт

  • Добавьте всплывающее уведомление или лог сообщений, чтобы информировать пользователя об успешном входе.
  • Кешируйте результаты проверки, если планируете масштабировать.
  • Для улучшения UX можно добавить кнопку выхода из Telegram-авторизации.

Сравнение способов реализации авторизации через Telegram

МетодПлюсыМинусыКомпромисс
Готовые плагиныБыстро, поддержка, готовый UIКонфликты, нагрузка, ограниченная кастомизацияПодходит для быстрого старта
Ручная реализация (код)Лёгкий, гибкий, без лишних зависимостейТребует навыков, больше времени на отладкуИдеально для опытных разработчиков
Сторонние сервисы OAuthШирокая интеграция, поддержка множества провайдеровЗависимость от внешних сервисов, сложность настройкиДля мультиплатформенных проектов
×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙