Документация

Документация к плагину «Согласие 152-ФЗ» для WordPress. Разделы идут в том порядке, в котором их проходят: подготовка сайта, установка, лицензия, документы, группы согласий, формы, cookie-баннер, журнал и обращения субъектов. Раздел открыт без авторизации — его можно прочитать до покупки.

Начните с раздела «Константы в wp-config.php». Плагин не имеет запасных значений для четырёх секретов и без них не активируется — это единственный шаг, который нельзя пропустить.

Требования к сайту

  • WordPress 6.5 или новее.
  • PHP 8.1 или новее.
  • MySQL 5.7 / MariaDB 10.4 или новее.
  • Права администратора сайта и возможность отредактировать wp-config.php.
  • Исходящие HTTPS-соединения к shop.marmyshev.ru — они нужны только для активации и периодической проверки лицензии. Если на сервере стоит фаервол или прокси, разрешите этот хост.

Если версия PHP или WordPress ниже минимальной, плагин прерывает активацию, выключает себя и показывает сообщение с номерами версий — сайт при этом не страдает.

Константы в wp-config.php

Задайте эти константы до того, как нажмёте «Активировать». Плагин читает секреты только из wp-config.php и никаких значений по умолчанию не подставляет: без них активация завершается фатальной ошибкой и сайт отдаёт белый экран. Такое поведение выбрано намеренно — молчаливый запасной ключ означал бы, что персональные данные какое-то время лежали зашифрованными на предсказуемом секрете.

КонстантаОбязательнаЗа что отвечает
SOGLASIE_152_ENCRYPTION_KEYдаШифрование персональных данных при хранении.
SOGLASIE_152_SEARCH_KEYдаHMAC для поиска по e-mail без расшифровки. Значение должно отличаться от предыдущего.
SOGLASIE_152_WITHDRAWAL_SECRETдаПодпись токенов отзыва согласия.
SOGLASIE_152_FORM_SECRETдаПодпись токенов формы и контекста гейта согласий.
SOGLASIE_152_HMAC_KEYнетКлюч подписи доказательств гейта форм. Без неё используется соль WordPress auth — тогда подписи перестанут сходиться при смене солей, поэтому лучше задать явно.

Как задать значения

Каждое значение — ровно 64 строчных шестнадцатеричных символа (32 байта), и все значения разные. Подойдёт любой источник криптостойкой случайности; в командной строке сервера это openssl rand -hex 32, выполненный отдельно для каждой константы.

Строки добавляются в wp-config.php выше комментария /* That's all, stop editing! */:

define( 'SOGLASIE_152_ENCRYPTION_KEY',    '64 шестнадцатеричных символа' );
define( 'SOGLASIE_152_SEARCH_KEY',        '64 шестнадцатеричных символа' );
define( 'SOGLASIE_152_WITHDRAWAL_SECRET', '64 шестнадцатеричных символа' );
define( 'SOGLASIE_152_FORM_SECRET',       '64 шестнадцатеричных символа' );
define( 'SOGLASIE_152_HMAC_KEY',          '64 шестнадцатеричных символа' );

Что нельзя менять после первой записи

SOGLASIE_152_ENCRYPTION_KEY и SOGLASIE_152_SEARCH_KEY не подлежат замене после того, как в базу попало первое согласие: ими зашифрованы персональные данные и посчитаны хеши поиска. Потеря или подмена делает сохранённые записи нечитаемыми, а журнал согласий — непригодным для предъявления. Сделайте копию wp-config.php сразу после того, как впишете константы, и храните её отдельно от сайта.

Установка и активация плагина

  1. Скачайте ZIP-архив плагина из письма о покупке или из личного кабинета на shop.marmyshev.ru.
  2. Убедитесь, что константы из предыдущего раздела уже в wp-config.php.
  3. Откройте Плагины → Добавить плагин → Загрузить плагин, выберите архив и нажмите «Установить».
  4. Нажмите «Активировать».

После активации в боковом меню появится пункт Согласие 152-ФЗ с разделами «Согласия», «Политики», «Редактор политики», «Группы согласий», «Настройки», «Точки размещения», «Состояние» и «Лицензия». Плагин создаёт собственные таблицы в базе — отдельных шагов миграции делать не нужно.

Активация лицензии

Ключ приходит на почту после оплаты и доступен в личном кабинете магазина. Формат ключа — S152-{ТАРИФ}-XXXX-XXXX-XXXX-XXXX, где ТАРИФ это FREE, PERS, BUSI или AGCY.

  1. Откройте Согласие 152-ФЗ → Лицензия.
  2. Вставьте ключ целиком, вместе с дефисами и без пробелов.
  3. Нажмите «Активировать лицензию».

После успешной активации на той же странице появится блок «Статус лицензии»: статус, тариф, домен, ключ, дата истечения, срок действия токена и время последней проверки. Ответ сервера подписан криптографически, и плагин проверяет подпись локально — неподписанному ответу он не поверит, даже если тот пришёл с правильного домена.

На сервер лицензий уходит только ключ, домен сайта, версия плагина и версии WordPress и PHP. Содержимое согласий, журнал и персональные данные субъектов туда не отправляются никогда.

Что работает без лицензии

Плагин работоспособен и без ключа — в режиме Free. В нём доступны запись и хранение согласий, журнал согласий, cookie-баннер с тремя категориями, публикация документов (одна действующая версия на документ) и контакт для запросов субъектов персональных данных.

Без активной лицензии выключены:

  • экспорт журнала согласий в CSV;
  • интеграции с формами — Contact Form 7, WPForms, WooCommerce, комментарии и регистрация WordPress;
  • перенос ранее данного согласия для авторизованных пользователей (чтобы не спрашивать одно и то же дважды);
  • повторный запрос согласия при публикации новой версии документа и рассылка приглашений;
  • подключение к штатным инструментам WordPress Инструменты → Экспорт / Удаление персональных данных;
  • категории cookie «Маркетинговые» и «Сторонние сервисы»;
  • отдельное согласие на маркетинговую рассылку;
  • история версий документа: в Free хранится одна версия на документ;
  • служебный журнал аудита в Free хранит последние 500 записей, старые вытесняются новыми.

Перенос ключа на другой сайт

Лицензия привязана к домену, поэтому переезд состоит из двух шагов: на старом сайте нажмите «Деактивировать на этом сайте» — слот в реестре активаций освободится, — затем введите тот же ключ на новом. Если доступ к старому сайту уже потерян, напишите в поддержку: запись активации снимут вручную.

Продление и истечение срока

Подписка не продлевается автоматически — автосписание не подключается. За 30 и за 7 дней до окончания плагин показывает напоминание в админке. Продление оформляется в личном кабинете магазина и создаёт обычный заказ на тот же тариф с тем же ключом.

Плагин периодически сверяется с сервером сам; кнопка «Проверить сейчас» на странице «Лицензия» делает это немедленно — она пригодится сразу после оплаты продления. Если сайт временно потерял связь с магазином, последний действительный токен остаётся в силе ещё 14 дней, и только после этого тариф опускается до Free.

Возврат к Free ничего не удаляет. Собранные согласия, опубликованные документы и записи журнала остаются на месте; после повторной активации функции включаются в том же состоянии.

Если активация не прошла

Плагин показывает сообщение с кодом ошибки от сервера лицензий. Чаще всего встречаются четыре: ключ введён неполностью, превышено число активаций по тарифу (деактивируйте один из сайтов), слишком много попыток с одного адреса за час (подождите час), или сайту закрыт исходящий доступ к shop.marmyshev.ru. Если код не подходит ни под один из случаев, напишите в поддержку и приложите текст сообщения.

Документы, на которые ссылаются согласия

Согласие без документа ничего не доказывает, поэтому документы публикуются до того, как настраиваются чекбоксы. Раздел Согласие 152-ФЗ → Редактор политики создаёт и публикует версию, раздел Политики показывает список документов и историю их версий с датой вступления в силу и хешем тела.

Поддерживаемые виды документов: политика конфиденциальности, пользовательское соглашение, публичная оферта, лицензионное соглашение, политика cookie, согласие на маркетинговую рассылку и соглашение об обработке данных (DPA). У каждого свой слаг, по которому на него ссылаются чекбоксы.

Каждая опубликованная версия неизменяема и хранит хеш своего текста. Публикация зеркалит документ на страницу WordPress, а для канонической политики конфиденциальности дополнительно проставляет её в штатную настройку страницы политики — отдельную страницу создавать и поддерживать вручную не нужно. Повторная публикация того же слага обновляет ту же страницу, дубликатов не появляется.

Контакт для обращений субъектов задаётся в Согласие 152-ФЗ → Настройки (адрес электронной почты и, по желанию, почтовый адрес). При публикации канонической политики конфиденциальности в её текст добавляется абзац с этим контактом и с законными сроками ответа.

Группы согласий

Группа согласий — это набор чекбоксов, который вы описываете один раз в Согласие 152-ФЗ → Группы согласий и ставите туда, где нужно собрать согласие. Отдельных настроек «на форму» нет: группа — единственный носитель конфигурации.

У группы есть слаг (латиница, цифры, дефис и подчёркивание), название и до семи чекбоксов. Каждый чекбокс задаётся четырьмя вещами:

  • Цель обработки — идентификатор, по которому согласие потом ищут и отзывают. Цель уникальна для сайта и не может повторяться внутри группы.
  • Подпись — текст рядом с галочкой. Допускаются ссылка, полужирный, курсив и перенос строки; всё остальное вырезается при сохранении.
  • Обязательность — без обязательного чекбокса форма не отправится.
  • Документ и режим версии — «действующая версия» следует за последней публикацией, «зафиксированная версия» замораживает конкретную. Привязка обязательна для каждого чекбокса.

Один набор спокойно смешивает разные документы: акцепт оферты, согласие на обработку персональных данных и необязательная подписка на рассылку — это три чекбокса одной группы, каждый со своей версией своего документа. В момент записи в согласие попадают идентификатор версии документа, хеш его текста и точный снимок подписи, которую увидел посетитель. Если вы позже отредактируете формулировку, старая запись сохранит ту, что была показана.

Если хотя бы один привязанный документ не опубликован, группа не отрисовывается целиком — чекбокс без документа порождал бы записи, которые ничего не доказывают.

Четыре способа поставить группу

  • Шорткод .
  • Блок «Согласие 152-ФЗ — группа согласий» в редакторе страниц.
  • Тег шаблона soglasie_152_consent_group( 'checkout' ) — для тем, которые собирают формы сами.
  • Автоподключение к точке размещения: чекаут WooCommerce (классический и блочный), регистрация в «Моём аккаунте» WooCommerce, форма комментариев WordPress, форма регистрации WordPress, формы Contact Form 7 и WPForms. Точка выбирается в настройках самой группы.

Все четыре способа проходят через один и тот же серверный код, поэтому разметка и запись в журнале у них одинаковые.

Главное ограничение: группа живёт внутри чужой формы

Группа не является формой. Она рисует контейнер с чекбоксами, а записывает согласие скрипт плагина: он находит контейнер, поднимается до родительской формы и перехватывает отправку. Отсюда три практических следствия.

  • Группа вне формы ничего не записывает. Посетитель увидит чекбоксы и отметит их, но согласия не будет — в консоли браузера появится предупреждение. Ставьте шорткод, блок или тег шаблона внутрь тега <form>.
  • Одна группа на форму. Вторая группа на той же форме пропускается. Нужны ещё чекбоксы — добавьте их в ту же группу, до семи штук.
  • Форме нужно поле e-mail. Для авторизованного посетителя субъект берётся из сессии WordPress, а для гостя — только из формы. Ставьте группу туда, где адрес и так спрашивают.

У группы две стратегии показа: встроенная (чекбоксы прямо в форме) и диалог (окно по нажатию на кнопку отправки, с клавиатурной навигацией и закрытием по Esc). Обе доступны на всех размещениях, кроме блочного чекаута WooCommerce — там встроить чекбоксы некуда, и показ всегда идёт диалогом.

Интеграции с формами

Плагин умеет подключать гейт согласий к пяти семействам форм. Все они требуют активной лицензии тарифа Personal или выше.

ФормаГде выбирается группа
Contact Form 7Вкладка «Согласие 152-ФЗ» в редакторе конкретной формы.
WPForms (Lite и Pro)Подраздел «Согласие 152-ФЗ» в разделе «Настройки» конструктора формы.
WooCommerce: классический чекаут, блочный чекаут, регистрация в «Моём аккаунте»Точка размещения в настройках группы.
Форма комментариев WordPressТочка размещения в настройках группы (форма на сайте одна).
Форма регистрации WordPressТочка размещения в настройках группы (форма на сайте одна).

Форма, которой не назначена ни одна группа, не гейтится вовсе — она ведёт себя так, будто плагина нет. Это позволяет включать согласия постепенно, форма за формой.

Записанные согласия связываются с сущностями сайта: с заказом WooCommerce, с созданным пользователем, с комментарием, а на WPForms Pro — с записью формы. Так по конкретному заказу или пользователю видно, какие согласия он дал.

Что делать, если запись согласия не удалась, выбирается в Настройки → Поведение интеграций с формами при сбое. «Реальный мир» (по умолчанию) пропускает отправку формы, чтобы сбой плагина не ломал чекаут; «Строгое соответствие» блокирует отправку и показывает сообщение об ошибке. Выбирайте второй режим осознанно: он останавливает продажи, когда что-то пошло не так.

Gravity Forms и Elementor Forms в поставку не входят. Собственную форму темы можно закрыть тегом шаблона или шорткодом — см. предыдущий раздел.

Cookie-баннер

Баннер включается сразу после активации плагина и показывается на страницах сайта до тех пор, пока посетитель не сделает выбор. Три действия равнозначны: принять всё, отклонить всё и настроить по категориям — отказ не спрятан за дополнительным экраном.

Категории по умолчанию:

  • Строго необходимые — вход в личный кабинет, безопасность, корзина. Всегда включены и не отключаются.
  • Функциональные — язык, оформление, регион.
  • Аналитические — Яндекс Метрика, Google Analytics.
  • Маркетинговые и Сторонние сервисы — доступны при активной лицензии.

Как долго помнить выбор посетителя, задаётся в Настройки → Период до повторного показа баннера: от 1 до 365 дней. Чтобы дать посетителю вернуться к своему выбору позже, поставьте на страницу шорткод или одноимённый блок — обычно такую ссылку кладут в подвал.

Гейтинг сторонних скриптов

Баннер сам по себе не мешает счётчикам загружаться. Чтобы сторонний тег не выполнялся до согласия, разместите его как неисполняемый и укажите категорию:

<script
    type="text/plain"
    data-soglasie152-category="analytics"
    src="https://mc.yandex.ru/metrika/tag.js"
    async
></script>

Работает и встроенный код — уберите src и положите тело скрипта внутрь тега. Когда посетитель разрешит эту категорию, плагин заменит заглушку исполняемым тегом и перенесёт на него все остальные атрибуты (async, defer, integrity и прочие). Замена одноразовая: отзыв согласия не отменяет уже выполненный скрипт — здесь нужна перезагрузка страницы.

Отдельно проверьте плагины кеширования и оптимизации: некоторые из них переписывают или вырезают теги type="text/plain", считая их сломанными. Для таких скриптов оптимизацию JavaScript нужно отключить.

Проверить результат просто: откройте вкладку «Сеть» в инструментах разработчика и перезагрузите страницу — до нажатия «Принять» запросов к адресу счётчика быть не должно.

Журнал согласий

Раздел Согласие 152-ФЗ → Согласия показывает все записи с фильтрами по статусу, датам и цели обработки. Каждая запись хранит, кто дал согласие, когда, на какую цель, на какую версию документа и с какой формулировкой перед глазами — вместе с хешем текста документа и хешем подписи.

Персональные данные субъектов лежат в базе зашифрованными; поиск по адресу идёт по хешу, а не по открытому тексту. В служебный журнал аудита персональные данные не попадают вовсе — субъект там представлен префиксом хеша.

Кнопка «Экспорт CSV» выгружает журнал файлом — это то, что предъявляют по запросу субъекта или проверяющего. Экспорт доступен на тарифе Personal и выше.

Обращения субъектов персональных данных

Публичной формы для обращений плагин не ставит, и это осознанное решение: 152-ФЗ требует опубликованного канала связи и способности выполнить требование, а не отдельного портала. Канал — контакт из настроек, который попадает в опубликованную политику конфиденциальности.

Когда обращение пришло на почту, работа идёт штатными инструментами WordPress: Инструменты → Экспорт персональных данных и Инструменты → Удаление персональных данных. Плагин подключается к ним, поэтому согласия попадают в общую выгрузку рядом с данными WooCommerce и форм, а при удалении обезличиваются. Эта интеграция требует активной лицензии.

Сроки ответа считает оператор сайта, и они разные: на предоставление сведений об обработке — 10 рабочих дней (ст. 20 ч. 1), на прекращение обработки после отзыва согласия — 30 дней (ст. 21 ч. 5). Общий «тридцатидневный срок» на запрос сведений не распространяется.

Обновления плагина

Пока лицензия активна, обновления приходят в стандартный раздел Плагины WordPress и ставятся кнопкой «Обновить» — отдельный канал обновлений не нужен. Проверка новых версий выполняется вместе с проверкой лицензии. Если лицензия не активирована или её срок вышел, обновления через WordPress не предлагаются, и новую сборку нужно ставить архивом вручную.

Перед обновлением, как и перед любым вмешательством в рабочий сайт, сделайте резервную копию базы и файлов.

Поддержка

Вопросы по установке и настройке — на support@marmyshev.ru. Чтобы разобраться быстрее, приложите к письму:

  • домен сайта;
  • первые символы лицензионного ключа (до третьей группы, целиком ключ присылать не нужно);
  • версии WordPress и PHP — их видно в Инструменты → Здоровье сайта;
  • точный текст сообщения об ошибке.

Плагин — техническое средство: он фиксирует согласия, хранит доказательства и помогает выполнить обращение субъекта. Он не пишет за вас политику обработки персональных данных, не подаёт уведомление в Роскомнадзор и не заменяет юридическую консультацию.