Настройка верификации клиента через SMS-код 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка верификации клиента через SMS-код 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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 Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка верификации клиента через SMS-код 1С-Битрикс

Форма регистрации с подтверждением по SMS снижает количество фиктивных аккаунтов и одноразовых email-адресов. Для интернет-магазина это ещё и защита программ лояльности от злоупотреблений. В 1С-Битрикс SMS-верификация не встроена в стандартный регистрационный поток — она настраивается через событийную модель и интеграцию с провайдером.

Выбор SMS-провайдера

Битрикс не имеет собственного SMS-шлюза. Интеграция строится через REST API провайдера. Популярные варианты для рынка РФ/СНГ:

  • SMSC.ru — прямое API, хорошая документация
  • SMS.ru — бесплатный тестовый режим
  • МТС Exolve / Beeline — корпоративные тарифы
  • Twilio — для международных проектов

Подключение провайдера оформляется как отдельный класс-обёртка, реализующий единый интерфейс. Это позволяет при необходимости сменить провайдера без переработки логики верификации.

Архитектура верификации

Верификация состоит из двух этапов: генерация кода и проверка. Код хранится не в сессии (уязвима к session fixation), а в отдельной таблице БД:

CREATE TABLE custom_sms_verification (
    id INT AUTO_INCREMENT PRIMARY KEY,
    phone VARCHAR(20) NOT NULL,
    code VARCHAR(6) NOT NULL,
    created_at DATETIME NOT NULL,
    attempts INT DEFAULT 0,
    verified TINYINT DEFAULT 0,
    INDEX idx_phone (phone),
    INDEX idx_created (created_at)
);

В Битрикс D7 — через \Bitrix\Main\ORM\Data\DataManager:

class SmsVerificationTable extends \Bitrix\Main\ORM\Data\DataManager
{
    public static function getTableName(): string
    {
        return 'custom_sms_verification';
    }

    public static function getMap(): array
    {
        return [
            new \Bitrix\Main\ORM\Fields\IntegerField('ID', ['primary' => true, 'autocomplete' => true]),
            new \Bitrix\Main\ORM\Fields\StringField('PHONE'),
            new \Bitrix\Main\ORM\Fields\StringField('CODE'),
            new \Bitrix\Main\ORM\Fields\DatetimeField('CREATED_AT'),
            new \Bitrix\Main\ORM\Fields\IntegerField('ATTEMPTS'),
            new \Bitrix\Main\ORM\Fields\BooleanField('VERIFIED'),
        ];
    }
}

Логика отправки и проверки

Отправка кода:

function sendVerificationCode(string $phone): bool {
    $code = str_pad(random_int(0, 999999), 6, '0', STR_PAD_LEFT);

    // Проверка лимита — не чаще 1 раза в 60 секунд
    $recent = SmsVerificationTable::getList([
        'filter' => [
            '=PHONE' => $phone,
            '>CREATED_AT' => new \Bitrix\Main\Type\DateTime(date('Y-m-d H:i:s', time() - 60))
        ]
    ])->fetch();

    if ($recent) return false; // Too many requests

    SmsVerificationTable::add([
        'PHONE' => $phone,
        'CODE' => $code,
        'CREATED_AT' => new \Bitrix\Main\Type\DateTime(),
        'ATTEMPTS' => 0,
        'VERIFIED' => false,
    ]);

    return SmsProvider::send($phone, "Ваш код подтверждения: $code");
}

Проверка кода включает защиту от брутфорса: после 3 неверных попыток код блокируется независимо от истечения времени. Срок жизни кода — 5–10 минут.

Интеграция с регистрацией и оформлением заказа

Верификация встраивается в два места:

  1. Регистрация — через обработчик события OnBeforeUserRegister. Если номер телефона не верифицирован — регистрация блокируется до прохождения SMS-проверки.

  2. Оформление заказа — через компонент bitrix:sale.order.ajax. Шаг с верификацией добавляется перед финальным подтверждением заказа. Особенно важно для магазинов, принимающих заказы без регистрации.

Для AJAX-формы верификации используется контроллер:

class SmsVerifyController extends \Bitrix\Main\Engine\Controller {
    public function sendAction(): array { ... }
    public function checkAction(string $phone, string $code): array { ... }
}

Антифрод и ограничения

Обязательные меры защиты:

  • Не более 3 кодов в час на один номер
  • Не более 5 кодов в сутки на один IP
  • CAPTCHA перед запросом кода при подозрительной активности
  • Нормализация номера перед сохранением (привести к формату +7XXXXXXXXXX)

Сроки выполнения

Объём работ Срок
Отправка + проверка кода, базовый flow 1–2 дня
Интеграция с регистрацией + оформлением заказа 2–3 дня
Антифрод, лимиты, нормализация номеров +1 день

SMS-верификация — инвестиция в качество базы клиентов. Один чистый аккаунт ценнее десяти фиктивных.