WooCommerce: авторизация пользователя по номеру телефона с SMS-подтверждением

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

Стандартная авторизация WooCommerce предполагает вход через email и пароль. Однако для многих интернет-магазинов удобнее и эффективнее авторизовать покупателя по номеру телефона с подтверждением через SMS. Такой метод повышает конверсию и снижает количество фейковых аккаунтов.

Часто встречающиеся проблемы при реализации такой авторизации:

  • Отсутствие встроенной поддержки входа по телефону в WooCommerce
  • Трудности с интеграцией SMS-API
  • Проблемы с безопасностью и сессиями
  • Ошибки валидации номера телефона

Пошаговое решение: как настроить авторизацию по номеру телефона с SMS в WooCommerce

1. Добавление поля ввода телефона вместо email на странице входа

Для начала нужно заменить стандартное поле email на телефон. В functions.php темы или в плагине используйте следующий код:

add_filter('woocommerce_login_form_fields', function($fields) {
    if (isset($fields['username'])) {
        $fields['username']['type'] = 'tel';
        $fields['username']['label'] = 'Номер телефона';
        $fields['username']['placeholder'] = '+7 (999) 999-99-99';
    }
    return $fields;
});

Если фильтр woocommerce_login_form_fields не работает в вашей версии, можно переопределить шаблон myaccount/form-login.php в дочерней теме, заменив поле email на телефон.

2. Валидация и форматирование номера телефона

Важна строгая валидация номера. Для этого можно использовать preg_match или подключить библиотеку libphonenumber. Для простоты пример с регулярным выражением:

function validate_phone_number($phone) {
    return preg_match('/^\+7\d{10}$/', $phone);
}

Вызывайте эту функцию при обработке данных формы.

3. Интеграция SMS-API для отправки кода подтверждения

Выберите SMS-провайдера (например, sms.ru, Twilio, или другие) и настройте отправку сообщения с кодом.

function send_sms_code($phone, $code) {
    $api_key = 'ВАШ_API_КЛЮЧ';
    $message = "Ваш код для входа: $code";
    $url = "https://sms.ru/sms/send?api_id=$api_key&to=$phone&msg=" . urlencode($message);
    wp_remote_get($url);
}

Обрабатывайте ошибки ответа API для надёжности.

4. Реализация логики проверки кода и входа пользователя

При вводе телефона и отправке формы генерируйте случайный код и сохраняйте его в сессию или transient с TTL 5-10 минут. Затем предоставьте пользователю форму для ввода кода. После корректного ввода кода авторизуйте пользователя или создайте нового.

session_start();

// Генерация и сохранение кода
$code = rand(100000, 999999);
$_SESSION['sms_code'] = $code;
$_SESSION['phone_for_login'] = $phone;
send_sms_code($phone, $code);

// Проверка кода
if ($_POST['code'] === $_SESSION['sms_code']) {
    $user = get_user_by('meta_value', $_SESSION['phone_for_login']);
    if (!$user) {
        // Создать пользователя
        $user_id = wp_create_user($phone, wp_generate_password(), $phone . '@example.com');
        update_user_meta($user_id, 'billing_phone', $_SESSION['phone_for_login']);
        $user = get_user_by('id', $user_id);
    }
    wp_set_current_user($user->ID);
    wp_set_auth_cookie($user->ID);
    unset($_SESSION['sms_code'], $_SESSION['phone_for_login']);
    wp_redirect(home_url());
    exit;
}

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

  • Откройте страницу входа и убедитесь, что поле email заменено на телефон
  • Попробуйте ввести номер в неправильном формате — должна сработать валидация
  • Введите правильный номер, получите SMS с кодом
  • Введите код — пользователь должен успешно авторизоваться
  • Проверьте, что при отсутствии кода или при неправильном коде вход не разрешается

Частые ошибки и способы их устранения

  • Код не отправляется: проверьте правильность API-ключа, URL и обработку ошибок wp_remote_get
  • Номер телефона сохраняется некорректно: используйте единый формат, например E.164, для хранения и поиска
  • Сессии не сохраняются: убедитесь, что session_start() вызывается до вывода контента
  • Пользователь не создаётся или не авторизуется: проверьте права и ошибки функций wp_create_user и wp_set_auth_cookie

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

  • Используйте HTTPS, чтобы защитить передачу данных
  • Ограничьте количество запросов на отправку SMS по IP и номеру, чтобы избежать спама
  • Храните коды подтверждения с ограниченным временем жизни (5-10 минут)
  • Для хранения кода лучше использовать set_transient с уникальным ключом, а не сессии, если сайт работает на нескольких серверах
  • Обрабатывайте ошибки SMS-API и логируйте их для отладки
  • Проверяйте актуальность номера перед отправкой кода (например, с помощью маски и предварительной проверки формата)

Сравнение подходов к авторизации по телефону в WooCommerce

МетодПлюсыМинусыПример
Плагин (например, "WC Phone Login")Быстрая настройка, интеграция SMSПлатный, ограниченная кастомизацияClearfy Pro может помочь с оптимизацией
Самописный код на PHP + SMS APIПолный контроль, кастомизация под задачуТребует разработки и поддержкиПример кода в статье
Использование сторонних сервисов авторизации (например, Firebase)Надёжность, масштабируемостьЗависимость от внешних сервисов, сложность интеграцииНе рассмотрено в статье
Как реализовать автоматические расчёты по нескольким формам в WordPress
16.04.2026
WooCommerce: решение проблем с отправкой данных калькулятора в заказ
10.06.2026
Как использовать WP-Cron для автоматизации задач в WordPress
22.03.2026
Калькулятор выигрыша в лотерее на WordPress: создание и настройка
15.02.2026
Как автоматизировать расчет стоимости на сайте WordPress с помощью WPRemark
10.04.2026