Подготавливаем страницу…
Подготавливаем страницу…
Подходит для 1С-Битрикс CMS (веб-формы) и Bitrix24 (CRM-лиды). Объясняем где найти init.php, как узнать ID веб-формы, как проверить что работает.
sk_ (secret — только server-side) forms_scope=[id1, id2, …] — и в каждом запросе передаёте form_id в body.Ключ создаёт менеджер 1ОПД и передаёт вам один раз. Все endpoints → API Reference
Прочитайте один раз — дальше в инструкции эти слова уже не будут пугать.
Без ключа сервер Bitrix не сможет писать в 1ОПД.
Откройте lk.v2.1opd.ru/lk/integrations и найдите карточку вашего сайта. Скопируйте sk_ ключ. Запишите form_id.
1ОПД пропустит sk_ только с разрешённых IP.
Bitrix обычно стоит на VPS/выделенном сервере. У вас есть SSH-доступ?
curl ifconfig.me — получите внешний IP.Нужно знать, какую именно форму перехватывать.
В админке Bitrix откройте «Сервисы → Веб-формы → Список». Увидите список форм с их ID.
7 для «Подписки на рассылку».Этот файл выполняется при каждом запросе — идеальное место для хука.
Подключитесь к серверу через FTP, SSH или хостинг-панель. Найдите файл /bitrix/php_interface/init.php.
?> если он есть; в большинстве файлов его нет).<?php и вставьте наш код./bitrix/, а использовать /local/php_interface/init.php (Bitrix грузит его автоматически и он выживает при обновлении ядра).Срабатывает после успешного сабмита веб-формы.
Вставьте этот код в init.php. Замените 3 места: ID веб-формы Bitrix (!== 7), form_id из ЛК 1ОПД, sk_ ключ.
<?php
// /bitrix/php_interface/init.php (или /local/php_interface/init.php).
// Multi-form: один sk_ ключ обслуживает N веб-форм Bitrix. У ключа в ЛК
// 1ОПД должно быть forms_scope=[1, 2, …] со всеми form_id, в которые
// этот ключ может писать.
use Bitrix\Main\EventManager;
EventManager::getInstance()->addEventHandler(
'form',
'onAfterResultAdd',
function ($webFormId, $resultId) {
// ── НАСТРОЙКИ ────────────────────────────────────────────────────
$api_key = 'sk_xxxxxxxxxxxxxxxxxxxx'; // ← ваш sk_ ключ из ЛК 1ОПД
// Маппинг: ID веб-формы Bitrix → form_id в ЛК 1ОПД.
// ID Bitrix-формы видно в админке "Сервисы → Веб-формы → Список".
$form_id_map = [
7 => 1, // веб-форма #7 «Подписка» → форма согласия #1
12 => 2, // веб-форма #12 «Маркетинг» → форма согласия #2
];
// ─────────────────────────────────────────────────────────────────
$form_id = $form_id_map[(int) $webFormId] ?? null;
if (!$form_id) return; // этой формы в 1ОПД нет
$rs = CFormResult::GetDataByID($resultId, [], $arRes, $arRes2);
$fields = [];
$email = '';
foreach ($arRes as $code => $info) {
$value = is_array($info) ? reset($info)['USER_TEXT'] ?? '' : $info;
$fields[] = ['field' => $code, 'value' => (string) $value];
if (stripos($code, 'email') !== false) $email = (string) $value;
}
if ($email === '') return; // без email субъект не идентифицируется
$payload = json_encode([
'form_id' => $form_id,
'hash_field' => $email,
'fields' => $fields,
], JSON_UNESCAPED_UNICODE);
$ch = curl_init('https://app.1opd.ru/api/v2/create-agreement');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => [
'API-KEY: ' . $api_key,
'Content-Type: application/json',
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 5,
]);
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// Логируем ошибку в Bitrix-журнал ("Настройки → Журнал событий").
if ($http_code !== 200) {
CEventLog::Log('WARNING', '1OPD_API_ERROR', 'main', $webFormId,
"HTTP $http_code: $response");
}
}
); Если у вас не веб-форма CMS, а лид-форма Bitrix24.
Bitrix24 (CRM) использует другой набор событий. После создания лида:
<?php
// Bitrix24 CRM — событие "лид создан"
AddEventHandler('crm', 'OnAfterCrmLeadAdd', function ($arFields) {
$email = '';
if (!empty($arFields['FM']['EMAIL'])) {
$first = reset($arFields['FM']['EMAIL']);
$email = $first['VALUE'] ?? '';
}
$payload = json_encode([
'form_id' => 1,
'hash_field' => $email,
'fields' => [
['field' => 'email', 'value' => $email],
['field' => 'name', 'value' => (string) ($arFields['NAME'] ?? '')],
['field' => 'last_name', 'value' => (string) ($arFields['LAST_NAME'] ?? '')],
['field' => 'lead_id', 'value' => (string) ($arFields['ID'] ?? '')],
],
]);
// ↓ cURL как в первом примере, sk_ ключ
$ch = curl_init('https://app.1opd.ru/api/v2/create-agreement');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => [
'API-KEY: sk_xxxxxxxxxxxxxxxxxxxx',
'Content-Type: application/json',
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 5,
]);
curl_exec($ch);
curl_close($ch);
}); В Bitrix CMS — через настройки веб-формы добавить ещё одно поле «Согласие».
В админке Bitrix → «Сервисы → Веб-формы» → ваша форма → «Вопросы» → «Добавить вопрос» → тип «Флажок (checkbox)». Имя поля opd_consent (обязательное) для основного согласия. Если нужен ещё чекбокс маркетинга — добавьте второй с именем opd_consent_marketing (необязательное).
Даю согласие на обработку персональных данных в соответствии с
<a href="https://app.1opd.ru/public/d/<slug>/<client-id>/privacy_policy" target="_blank">Политикой обработки персональных данных</a>. (Bitrix позволяет HTML в названиях полей — включите «HTML в названии» в настройках формы.)Даю согласие на получение информационной и рекламной рассылки. Bitrix-логи + ЛК 1ОПД + журнал событий.
Самые частые проблемы и что с ними делать. Решает 95% случаев.
1. Через FTP откройте init.php — восстановите из backup'а.
2. Сайт оживёт. Затем повторно вставьте код и проверьте — самые частые ошибки: пропущенная скобка, лишняя точка с запятой, не закрытая кавычка.
3. На локальной машине прогоните PHP-syntax-check: php -l init.php — покажет конкретную строку с ошибкой.
1. Проверьте что вы вставили правильный ID веб-формы (а не form_id из 1ОПД!).
2. В Bitrix → «Настройки → Журнал событий» — ищите красные строки про вашу форму.
3. Добавьте в хук перед curl_exec строку: error_log('1opd payload: ' . $payload); — увидите в журнале что отправляется.
SSH на сервер → curl ifconfig.me → запишите IP. В ЛК 1ОПД → ключ → IP-whitelist → добавьте IP, подтвердите паролем.
Полный sk_ длиной 30+ символов. Проверьте что в коде нет лишних пробелов или переводов строки в строке API-KEY. Свяжитесь с менеджером 1ОПД для проверки.
Откройте init.php, найдите все упоминания onAfterResultAdd и оставьте только одно.
Также проверьте /local/php_interface/init.php — если есть, обработчик может быть и там, и в /bitrix/php_interface/init.php.
Для облачного Bitrix24 нужно использовать исходящие webhooks Bitrix24: «Приложения → Разработчикам → Исходящий вебхук на событие OnCrmLeadAdd» → URL вашего сервера → ваш сервер уже шлёт запрос в 1ОПД.
Альтернатива: вместо хука — настроить отправку из «Бизнес-процессов» / «Триггеров CRM», где можно добавить шаг «HTTP-запрос» с body в 1ОПД формат.
Откройте ЛК → «Интеграция»: персональные snippet'ы + готовый HTML-чекбокс с авто-ссылками на согласие и политику + кнопка «IP-whitelist» для каждого ключа.
Открыть ЛК →Запросите тестовый доступ — выдаём ключ под ваш домен и помогаем подключиться.
Связаться →Все endpoints, коды ошибок, форматы HMAC/Origin/IP. Таблица «какую защиту выбрать».
Открыть →