Подготавливаем страницу…
Подготавливаем страницу…
Server-side хук в init.php перехватывает событие веб-формы Bitrix и параллельно записывает согласие в 1ОПД. Подходит для 1C-Битрикс CMS и Bitrix24 CRM.
sk_ (secret — только server-side)forms_scope=[id1, id2, …] — и в каждом запросе передаёте form_id в body.Создать ключ для своего сайта → ваш ЛК 1ОПД · Все endpoints → API Reference
В ЛК 1ОПД → «Интеграция» создайте ключ с префиксом sk_. В разделе «IP whitelist» добавьте IP сервера Bitrix. Multi-form: задайте forms_scope=[id1, id2, …], если планируете прикрутить несколько форм одним ключом.
Откройте /bitrix/php_interface/init.php (или создайте, если нет) и добавьте обработчик:
<?php
// /bitrix/php_interface/init.php
use Bitrix\Main\EventManager;
EventManager::getInstance()->addEventHandler(
'form',
'onAfterResultAdd',
function ($webFormId, $resultId) {
if ((int) $webFormId !== 7) return; // ID веб-формы в Bitrix
$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;
}
$payload = json_encode([
'form_id' => 1, // ID формы в ЛК 1ОПД
'hash_field' => $email,
'fields' => $fields,
]);
$ch = curl_init('https://v2.1opd.ru/api/v2/create-agreement');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => [
// sk_ — он только на сервере; в браузер не попадает
'API-KEY: sk_xxxxxxxxxxxxxxxxxxxx',
'Content-Type: application/json',
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 5,
]);
curl_exec($ch);
curl_close($ch);
}
);Если нужно зафиксировать согласие до сохранения результата:
<?php
// Альтернатива — ДО сохранения результата
AddEventHandler('form', 'onBeforeResultAdd', function (&$webFormId, &$arrVALUES, $resultId) {
// arrVALUES — массив "code => value" того, что отправил пользователь.
// Здесь же можно сделать вызов к 1ОПД, если важно зафиксировать согласие
// ДО того, как Bitrix запишет результат в свою базу.
});Для CRM-форм Bitrix24 удобнее ловить лида целиком:
<?php
// Bitrix24 CRM — OnAfterCrmLeadAdd
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_ ключ
});Отправьте тестовую заявку через форму на сайте → в ЛК 1ОПД появится запись. Логи самого вызова — в Bitrix «Настройки → Журнал событий».
Откройте ЛК → раздел «Интеграция». Там персональные snippet'ы с уже подставленным API-ключом и form_id.
Открыть ЛК →Запросите тестовый доступ — выдаём ключ под ваш домен и помогаем подключиться.
Связаться →Все endpoints, коды ошибок, форматы HMAC/Origin/IP. Таблица «какую защиту выбрать».
Открыть →