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

Без SMS-верификации интернет-магазин теряет до 30% рекламного бюджета на фиктивные заказы. Недавно к нам обратился клиент с магазином автозапчастей: 5000 регистраций в день, из них 40% — боты. После внедрения верификации фиктивные аккаунты сократились до 3%. Экономия бюджета на рекламу достигла 200 
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Настройка SMS-верификации клиента в 1С-Битрикс
Простой
~1 день

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

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1458
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    1019
  • 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
    761
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    880
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    804
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1163

Без SMS-верификации интернет-магазин теряет до 30% рекламного бюджета на фиктивные заказы. Недавно к нам обратился клиент с магазином автозапчастей: 5000 регистраций в день, из них 40% — боты. После внедрения верификации фиктивные аккаунты сократились до 3%. Экономия бюджета на рекламу достигла $2k–5k ежемесячно. Без верификации каждый 5-й аккаунт — фиктивный. Наше решение — кастомный модуль с таблицей в БД, антифродом и гибкой интеграцией. Сертифицированные специалисты с 10-летним опытом разработки на Битрикс гарантируют стабильную работу.

Почему SMS-верификация эффективнее капчи?

SMS-верификация в 5 раз надёжнее проверки по email, так как номер телефона привязан к SIM-карте и его сложнее сгенерировать. Капча отсеивает лишь простых ботов, а SMS-код требует реального устройства. Для магазинов с высокой маржинальностью это окупается за 1–2 месяца.

Хранение кодов в БД вместо сессии — это разница в надёжности в 10 раз: сессия уязвима к атаке session fixation, а таблица с индексами даёт гарантию целостности. Рассмотрим архитектуру на практике.

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

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

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

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

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

Почему код хранится в БД, а не в сессии?

Хранение в сессии уязвимо к атаке session fixation. Мы используем отдельную таблицу custom_sms_verification:

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'), ]; } } 

Для хранения данных кодов также можно использовать HL-блоки (Highload-блоки) — это удобно, если требуется управлять записями из административного интерфейса.

Как защитить код от перебора?

Логика отправки и проверки включает защиту от брутфорса. После 3 неверных попыток код блокируется независимо от времени жизни. Срок жизни кода — 5–10 минут. Дополнительно установлены лимиты: не чаще 1 запроса в 60 секунд на номер, не более 5 кодов в сутки с одного IP. При подозрительной активности добавляется CAPTCHA.

function sendVerificationCode(string $phone): bool { $code = str_pad(random_int(0, 999999), 6, '0', STR_PAD_LEFT); $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"); } 

Пример проверки кода:

function checkVerificationCode(string $phone, string $code): bool { $record = SmsVerificationTable::getList([ 'filter' => [ '=PHONE' => $phone, '=VERIFIED' => false, '>CREATED_AT' => new \Bitrix\Main\Type\DateTime(date('Y-m-d H:i:s', time() - 600)) ] ])->fetch(); if (!$record) return false; if ($record['ATTEMPTS'] >= 3) return false; SmsVerificationTable::update($record['ID'], ['ATTEMPTS' => $record['ATTEMPTS'] + 1]); if ($record['CODE'] === $code) { SmsVerificationTable::update($record['ID'], ['VERIFIED' => true]); return true; } return false; } 

Как интегрировать SMS-верификацию с регистрацией и заказом?

Верификация встраивается в два места. При регистрации — через обработчик события OnBeforeUserRegister. Если номер телефона не верифицирован — регистрация блокируется до прохождения SMS-проверки. При оформлении заказа — через компонент bitrix:sale.order.ajax. Шаг с верификацией добавляется перед финальным подтверждением заказа. Это особенно важно для магазинов, принимающих заказы без регистрации. Для AJAX-формы верификации используется контроллер:

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

Верификацию также можно интегрировать с Bizproc для автоматизации цепочек действий после подтверждения номера.

Как внедрить SMS-верификацию: пошаговый план

  1. Выбор провайдера и тестовый запуск отправки.
  2. Создание таблицы для хранения кодов (или HL-блока).
  3. Реализация класса-обёртки для провайдера с единым интерфейсом.
  4. Написание обработчика отправки кода с лимитами.
  5. Встраивание в форму регистрации через событие.
  6. Модификация sale.order.ajax для добавления шага верификации.
  7. Настройка антифрода и нормализации номеров.
  8. Тестирование под нагрузкой (имитация ботов).

Какие ограничения нужно установить?

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

Лимит Значение
Запросы в час на номер 3
Кодов в сутки на IP 5
CAPTCHA при подозрении Да
Нормализация номера +7XXXXXXXXXX

Эти лимиты блокируют 99% ботов. При превышении — пользователю показывается сообщение: «Попробуйте через 10 минут».

Что входит в работу

  • Принципиальная схема верификации (документация)
  • Настройка SMS-провайдера и тестовый запуск
  • Класс-обёртка для провайдера с единым интерфейсом
  • Миграция БД для хранения кодов
  • Обработчики событий регистрации и модификация sale.order.ajax
  • Антифрод и лимиты
  • Инструкция по эксплуатации и поддержка 1 месяц

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

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

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