Подготавливаем страницу…
Подготавливаем страницу…
Инструкции и сниппеты по платформам. На каждой странице указано, какой ключ выпустить (pk_ или sk_) и какую защиту включить (Origin, IP, HMAC): на этой паре чаще всего и ошибаются при подключении.
Вместо отдельного ключа на каждую форму берите один ключ с forms_scope=[id1, id2, …] и form_id в body каждого запроса. Меньше путаницы при подключении, проще ротация, меньше env-переменных.
Там лежат сниппеты с уже подставленными API-ключом и form_id под конкретную форму. Кроме них:
6 пошаговых инструкций. На каждой странице собраны копируемые сниппеты, тип ключа и способ защиты.
Tilda Webhook → PHP-прокси на своём хостинге → 1ОПД. Один ключ обслуживает все чекбоксы согласия.
Защита: IP / HMAC
Открыть инструкцию →Contact Form 7, WPForms. PHP-hook (sk_+IP) или JS-event (pk_+Origin).
Защита: Origin / IP
Открыть инструкцию →Server-side через OnAfterFormResultAdd. Для CMS Bitrix и Bitrix24.
Защита: IP
Открыть инструкцию →Чистый HTML + vanilla JS. fetch() с публичным ключом.
Защита: Origin
Открыть инструкцию →Хук в onSubmit компонента формы. Примеры React и Vue 3.
Защита: Origin (+wildcard)
Открыть инструкцию →PHP / Node.js / Python. IP whitelist для static IP или HMAC для контейнеров.
Защита: IP / HMAC
Открыть инструкцию →Подставьте API-ключ и form_id, чтобы получить готовый код под свою платформу.
<script>
document.addEventListener('submit', function(e) {
if (!e.target.matches('form[name="form12345"]')) return;
const fd = new FormData(e.target);
fetch('https://app.1opd.ru/api/v2/create-agreement', {
method: 'POST',
headers: { 'API-KEY': 'pk_xxxxxxxxxxxxxxxxxxxx', 'Content-Type': 'application/json' },
body: JSON.stringify({
form_id: 1,
hash_field: fd.get('email'),
fields: Array.from(fd.entries()).map(([k, v]) => ({ field: k, value: String(v) }))
})
}).then(r => r.json()).then(d => console.log('1ОПД hash:', d.hash));
});
</script> Это демо-генератор. Реальные ключи получаются в личном кабинете 1ОПД, раздел «API-ключи».
Все endpoints v2, форматы тела и ответа, коды ошибок, HMAC, Origin и IP whitelist, forms_scope. Таблица «Какую защиту выбрать».
Открыть →Платформы нет в списке или интеграцию должна выполнить наша сторона: напишите, обсудим объём работ.
Контакты →Копировать URL вручную не нужно. В ЛК → «Интеграция» рядом со сниппетом интеграционного кода стоит блок «HTML-чекбокс для формы»: готовый <label> с уже подставленными ссылками на согласие и политику юрлица. Скопируйте и вставьте внутрь формы перед кнопкой submit. Документ, ещё не загруженный в админке, ссылку не даст, но чекбокс останется рабочим.
У каждого sk_-ключа в ЛК → «Интеграция» есть кнопка «IP-whitelist». Впишите в окно IP-адреса или CIDR-блоки, по одному в строке, и подтвердите действие паролем: после этого бэкенд отвергает запросы с любых других адресов. Пустой список означает приём с любого IP, это состояние по умолчанию. Годится и для одного статического адреса prod-сервера, и для нескольких сетей (например, отдельно ЦОД и офис).
Рекомендуемый порядок: один multi-form ключ на сайт. Менеджер 1ОПД выпускает ключ с forms_scope=[id1, id2, …], дальше вы передаёте form_id в body каждого запроса, а бэкенд проверяет, что этот form_id входит в scope ключа. Отдельный ключ на форму нужен там, где формы ведут разные команды или где нужна разная защита: например, форма обратной связи через pk_, а интеграция с CRM через sk_ и HMAC.
pk_ (publishable) предназначен для браузера: его встраивают в HTML и JS, защита идёт через allowed_origins. sk_ (secret) работает только server-side (PHP, Node, Python), публиковать его нельзя, зато для него доступны IP-whitelist и HMAC. Таблица «Какую защиту выбрать» приведена в справочнике API.
Принятое согласие 1ОПД сохраняет записью: hash (идентификатор), поля формы, время приёма, IP, User-Agent и редакция документа, действовавшая в момент подписания. По hash запись читают, обновляют и отзывают. Это закрывает обязанность оператора доказать наличие согласия (ст. 9 ч. 1 152-ФЗ) и ответить на запрос субъекта.
Нет. Интеграция перехватывает submit (или server-side хук) и параллельно отправляет копию данных в 1ОПД. Логика самой формы, включая отправку письма и запись в CRM, остаётся прежней.
Приём согласий стоит за спул-шлюзом: пока бэкенд недоступен, шлюз отвечает 202 Accepted и доставляет согласие сам, повторами от 10 минут до 48 часов. Ошибку (503) вернёт только отказ и бэкенда, и очереди сразу. Отправку самой формы это в любом случае не блокирует: в браузерных сниппетах вызов идёт без await на UI, в server-side PHP-прокси то же делают blocking=false и асинхронный curl.
Такой ключ называется multi-form. У него в ЛК 1ОПД указан forms_scope=[1, 2, 5], то есть перечень разрешённых form_id. В каждом запросе к /api/v2/create-agreement вы указываете form_id явно; бэкенд проверяет, что он входит в scope ключа, и пишет согласие в нужную форму. Один ключ на сайт означает меньше путаницы и более простую ротацию. Запросите multi-form ключ у менеджера 1ОПД при выпуске.