Подготавливаем страницу…
Подготавливаем страницу…
Готовые инструкции и сниппеты для популярных платформ. Каждая страница чётко указывает, какой ключ выпустить (pk_ или sk_) и какую защиту включить (Origin / IP / HMAC) — это самые частые прокол при интеграции.
Вместо отдельного ключа на каждую форму — один ключ с forms_scope=[id1, id2, …] и form_id в body каждого запроса. Меньше путаницы, проще ротация, меньше env-переменных.
Там персональные snippet'ы с уже подставленными 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'ы. В ЛК → «Интеграция» рядом со snippet'ом интеграционного кода теперь есть отдельный блок «HTML-чекбокс для формы» — там готовый <label> с уже подставленными ссылками на ваше согласие и вашу политику. Достаточно скопировать и вставить внутрь формы перед кнопкой submit. Если какой-то документ ещё не загружен в админке — ссылка просто опустится, не сломав чекбокс.
Для каждого sk_-ключа в ЛК → «Интеграция» есть кнопка «IP-whitelist». Открывается окно, в нём вписываете IP-адреса или CIDR-блоки (по одной строке), подтверждаете действие своим паролем — и backend отвергает запросы с любых других IP. Пустой список = разрешён доступ с любого IP (дефолт). Подходит и для одиночного static-IP вашего prod-сервера, и для нескольких сетей (например, отдельно DC и офис).
Один multi-form ключ на сайт — это наш дефолт и рекомендация. В ЛК выпускается ключ с forms_scope=[id1, id2, …], и дальше в каждом запросе вы передаёте form_id в body. Backend проверит, что form_id в scope ключа. Отдельные ключи-на-форму имеют смысл только когда формы обслуживают разные команды или требуют разной защиты (например, форма обратной связи через pk_, а CRM-интеграция через sk_+HMAC).
pk_ (publishable) — для браузера: можно встроить в HTML и JS, защита через allowed_origins. sk_ (secret) — только server-side (PHP/Node/Python), его нельзя публиковать, для него доступны IP-whitelist и HMAC. Если сомневаетесь — посмотрите таблицу «Какую защиту выбрать» в API Reference.
Каждое отправленное согласие сохраняется как запись с hash (идентификатор), полями формы, временем, IP, User-Agent. По hash потом можно получить, обновить или удалить запись — это закрывает требования 152-ФЗ по доказательству согласия и обработке запросов субъектов.
Нет. Интеграция перехватывает submit (или server-side хук) и параллельно отправляет копию данных в 1ОПД. Логика самой формы — отправка письма, запись в CRM — остаётся как была.
Запрос вернёт ошибку, но это не блокирует отправку самой формы — пользователь ничего не заметит. В client-side сниппетах вызов идёт без await на UI; в server-side PHP-прокси опция blocking=false / async-curl делает то же самое. Для критичных потоков — добавляйте очередь (Redis/RabbitMQ) на стороне вашего сервера.
Это называется multi-form ключ. У ключа в ЛК 1ОПД указан forms_scope=[1, 2, 5] — список разрешённых form_id. В каждом запросе к /api/v2/create-agreement вы передаёте form_id явно. Бэкенд проверяет, что переданный form_id есть в scope ключа, и пишет согласие в нужную форму. Один ключ на сайт = меньше путаницы, проще ротация. Запросите multi-form ключ у менеджера 1ОПД при выпуске.