Настройка верификации возраста покупателя (18+) на 1С-Битрикс
Интернет-магазины, торгующие алкоголем, табаком, лекарствами и другими возрастными товарами, обязаны проверять возраст покупателя. Это требование российского законодательства. Битрикс не предоставляет готового механизма верификации — нужно строить самостоятельно, выбирая уровень проверки от простого модального окна до полноценной идентификации через Госуслуги.
Уровни верификации возраста
Уровень 1 — Декларация. Покупатель сам подтверждает «Мне исполнилось 18 лет». Технически — модальное окно при первом входе на сайт с кнопками «Да» и «Нет». Результат хранится в cookie age_verified=1 со сроком 30 дней. Юридически это слабая защита, но для ряда категорий товаров достаточно.
Уровень 2 — Дата рождения. Пользователь вводит дату рождения. Проверяется математически: (today - birthdate) >= 18 years. Результат также в cookie или сессии. Обойти тривиально, но создаёт юридическую ответственность на покупателя.
Уровень 3 — Проверка по документам. Интеграция с ЕСИА (Госуслуги) или сервисами типа IDEX, Контур.Проверка. Возраст подтверждается данными паспорта. Самый надёжный вариант, требует отдельной интеграции.
Реализация в Битрикс (уровни 1–2)
Обработчик события OnPageStart в init.php проверяет наличие cookie и при необходимости добавляет модальное окно в очередь вывода:
AddEventHandler('main', 'OnPageStart', function() {
global $APPLICATION;
if (!isset($_COOKIE['age_verified'])) {
$APPLICATION->AddHeadScript('/local/js/age-verify.js');
$APPLICATION->SetAdditionalCSS('/local/css/age-verify.css');
}
});
JavaScript-компонент выводит модальное окно, блокирующее взаимодействие со страницей до подтверждения. При подтверждении:
document.cookie = 'age_verified=1; max-age=' + (86400 * 30) + '; path=/; SameSite=Lax';
При отказе — редирект на страницу-заглушку или на yandex.ru.
Ограничение на уровне категорий
Верификация может требоваться не для всего сайта, а только для определённых разделов каталога. В инфоблоке разделов создаётся свойство UF_AGE_RESTRICTED (checkbox). Обработчик проверяет не только наличие cookie, но и принадлежность текущей страницы к закрытой категории.
Для страниц раздела и детальных страниц товара в компоненте bitrix:catalog обработчик OnBeforeProlog проверяет свойство текущего раздела:
$sectionId = $arParams['SECTION_ID'];
$section = CIBlockSection::GetByID($sectionId)->Fetch();
if ($section['UF_AGE_RESTRICTED'] && !isset($_COOKIE['age_verified'])) {
LocalRedirect('/age-check/?back=' . urlencode($REQUEST_URI));
}
Верификация при добавлении в корзину
Один из важных рубежей — добавление возрастного товара в корзину. Даже если покупатель прошёл верификацию при входе, cookie мог истечь. Обработчик события OnSaleBasketItemAdd проверяет наличие актуального подтверждения:
AddEventHandler('sale', 'OnSaleBasketItemAdd', function(&$arFields) {
$productId = $arFields['PRODUCT_ID'];
if (isAgeRestrictedProduct($productId) && !isAgeVerified()) {
return new CDBResult(false, 'Подтвердите возраст для добавления товара');
}
});
Хранение статуса верификации для авторизованных пользователей
Для авторизованных пользователей результат верификации можно хранить в профиле — UF-поле UF_AGE_VERIFIED (тип «Да/Нет») и UF_BIRTH_DATE (дата). При следующем входе cookie устанавливается автоматически без повторного прохождения верификации.
Что входит в настройку
- Разработка модального окна верификации с выбором уровня проверки
- Обработчик
OnPageStartс проверкой cookie - Настройка свойства
UF_AGE_RESTRICTEDдля разделов каталога - Ограничение доступа к категориям и детальным страницам без верификации
- Блокировка добавления в корзину возрастных товаров
- Сохранение статуса верификации в профиле авторизованного пользователя







