Налаштування верифікації клієнта через SMS-код 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування верифікації клієнта через SMS-код 1С-Бітрікс
Проста
~1 робочий день
Часті питання

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

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування верифікації клієнта через SMS-код у 1С-Bitrix

Форма реєстрації з підтвердженням по SMS зменшує кількість вигаданих облікових записів і одноразових email-адрес. Для інтернет-магазину це також захист програм лояльності від зловживань. У 1С-Bitrix SMS-верифікація не вбудована в стандартний потік реєстрації — вона налаштовується через модель подій і інтеграцію з постачальником SMS.

Вибір постачальника SMS

Bitrix не має власного 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)
);

У Bitrix 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)

Сроки виконання

Обсяг робіт Строк
Надсилання + перевірка коду, базовий потік 1–2 дні
Інтеграція з реєстрацією + оформленням замовлення 2–3 дні
Антифрод, обмеження, нормалізація номерів +1 день

SMS-верифікація — це інвестиція в якість бази клієнтів. Один чистий обліковий запис коштує більше, ніж десять вигаданих.