Полезные статьи для
WordPress-разработчиков

Интеграция форм Elementor с Битрикс24 — 2 рабочих способа без плагинов

Интеграция форм Elementor с Битрикс24

Сегодня поделюсь готовыми решениями для отправки лидов из форм Elementor в Битрикс24 бесплатно и без дополнительных плагинов. Мне нужно было настроить интеграцию для клиентского проекта, и я нашёл два рабочих способа.

Проблема

Платные плагины для интеграции стоят денег, а стандартные методы не всегда подходят. Нужно было отправлять данные из разных форм Elementor в CRM.

Решение 1: Отправка лидов через вебхук (рекомендуется)

Этот способ использует REST API Битрикс24 через вебхук. Более современный и безопасный вариант.

Код для functions.php

// Начало отправки в Битрикс24 через вебхук
add_action('elementor_pro/forms/new_record', function($record, $handler) {
    // Получаем имя формы
    $form_name = $record->get_form_settings('form_name');
    // Проверяем, что это одна из наших форм
    if (!in_array($form_name, ['quiz', 'consult', 'vopros'])) {
        return;
    }
    // Получаем данные полей
    $raw_fields = $record->get('fields');
    $fields = [];
    foreach ($raw_fields as $id => $field) {
        $fields[$id] = $field['value'];
    }
    // Проверяем наличие обязательного поля tel
    if (empty($fields['tel'])) {
        return; // Если нет телефона, не отправляем данные
    }
    // Подготавливаем данные для отправки
    $leadData = [
        'fields' => [
            'TITLE' => 'Лид с сайта Ваш сайт ' . ($fields['name'] ?? '') . ' ' . $fields['tel'],
            'NAME' => $fields['name'] ?? '',
            'PHONE' => [
                ['VALUE' => $fields['tel'], 'VALUE_TYPE' => 'WORK']
            ],
            'SOURCE_ID' => 'WEB',
        ]
    ];
    // Отправляем данные в Битрикс24 через вебхук
    try {
        $response = sendToBitrixWebhook($leadData);
        error_log("Данные успешно отправлены в Битрикс24 через вебхук: " . print_r($response, true));
    } catch (Exception $e) {
        error_log("Ошибка при отправке данных в Битрикс24 через вебхук: " . $e->getMessage());
    }
}, 10, 2);
// Функция для отправки данных в Битрикс24 через вебхук
function sendToBitrixWebhook($leadData) {
    $webhookUrl = 'https://ваш_вебхук/crm.lead.add.json';
    // Кодируем данные в JSON
    $jsonData = json_encode($leadData, JSON_UNESCAPED_UNICODE);
    // Инициализируем cURL
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $webhookUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/json',
        'Content-Length: ' . strlen($jsonData)
    ]);
    curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // Рекомендуется оставить true
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $error = curl_error($ch);
    curl_close($ch);
    if ($error) {
        throw new Exception('cURL error: ' . $error);
    }
    if ($httpCode !== 200) {
        throw new Exception('HTTP error: ' . $httpCode . ', response: ' . $response);
    }
    $decodedResponse = json_decode($response, true);
    if (isset($decodedResponse['error'])) {
        throw new Exception('Bitrix24 API error: ' . ($decodedResponse['error_description'] ?? $decodedResponse['error']));
    }
    return $decodedResponse;
}

Как получить вебхук:

  1. В Битрикс24: Настройки → Интеграция → Вебхуки
  2. Создать вебхук с правами: crm
  3. Скопировать URL и вставить в код

Решение 2: Через авторизацию пользователя

Способ длястарых версий Битрикс24 или когда вебхуки недоступны (например на бесплатном тарифе).

Код для functions.php

 // Начало отправки в Битрикс24
add_action('elementor_pro/forms/new_record', function($record, $handler) {
// Получаем имя формы
$form_name = $record->get_form_settings('form_name');
// Проверяем, что это одна из наших форм
if (!in_array($form_name, ['zakaz', 'quiz'])) {
return;
}
// Получаем данные полей
$raw_fields = $record->get('fields');
$fields = [];
foreach ($raw_fields as $id => $field) {
$fields[$id] = $field['value'];
}
// Проверяем наличие обязательного поля tel
if (empty($fields['tel'])) {
return; // Если нет телефона, не отправляем данные
}
// Подготавливаем данные для отправки
$dataArray = [
'TITLE' => 'Лид с сайта ваш_сайт ' . ($fields['name'] ?? '') . ' ' . $fields['tel'],
'NAME' => $fields['name'] ?? '',
'PHONE_WORK' => $fields['tel'],
'SOURCE_ID' => 'WEB', // Источник лида
];
// Отправляем данные в Битрикс24 через авторизацию
try {
$response = sendToBitrix($dataArray);
error_log("Данные успешно отправлены в Битрикс24: " . $response);
} catch (Exception $e) {
error_log("Ошибка при отправке данных в Битрикс24: " . $e->getMessage());
}
}, 10, 2);
// Функция для отправки данных в Битрикс24 через авторизацию
function sendToBitrix($dataArray) {
// CRM server conection data
define('CRM_HOST', '_______.bitrix24.ru'); // ваш домен CRM
define('CRM_PORT', '443'); // порт CRM
define('CRM_PATH', '/crm/configs/import/lead.php'); // путь к REST API
// CRM server authorization data
define('CRM_LOGIN', '_______@gmail.com'); // логин пользователя CRM
define('CRM_PASSWORD', '111111'); // пароль пользователя CRM
// Подготовка POST данных
$strPostData = '';
// Добавляем данные авторизации
$strPostData .= 'LOGIN=' . urlencode(CRM_LOGIN) . '&';
$strPostData .= 'PASSWORD=' . urlencode(CRM_PASSWORD) . '&';
// Добавляем данные лида
$strPostData .= 'TITLE=' . urlencode($dataArray['TITLE']) . '&';
if (!empty($dataArray['NAME'])) {
$strPostData .= 'NAME=' . urlencode($dataArray['NAME']) . '&';
}
$strPostData .= 'PHONE_WORK=' . urlencode($dataArray['PHONE_WORK']) . '&';
$strPostData .= 'SOURCE_ID=' . urlencode($dataArray['SOURCE_ID']);
// Открываем сокет для соединения с CRM
$fp = fsockopen("ssl://" . CRM_HOST, CRM_PORT, $errno, $errstr, 30);
if (!$fp) {
throw new Exception('Ошибка соединения. Errstr: ' . $errstr . ' Errno: ' . $errno);
}
// Подготавливаем POST-заголовки
$str = "POST " . CRM_PATH . " HTTP/1.0\r\n";
$str .= "Host: " . CRM_HOST . "\r\n";
$str .= "Content-Type: application/x-www-form-urlencoded\r\n";
$str .= "Content-Length: " . strlen($strPostData) . "\r\n";
$str .= "Connection: close\r\n\r\n";
$str .= $strPostData;
// Отправляем POST-запрос в CRM
fwrite($fp, $str);
// Получаем ответ от CRM
$result = '';
while (!feof($fp)) {
$result .= fgets($fp, 128);
}
fclose($fp);
// Разделяем заголовки и тело ответа
$response = explode("\r\n\r\n", $result);
return $response[1]; // Возвращаем тело ответа
}
// Конец отправки в Битрикс24

Настройка в Elementor

  1. Имена полей должны совпадать:
    • Телефон → tel
    • Имя → name
  2. Имена форм для отправки указывайте в коде:phpif (!in_array($form_name, [‘quiz’, ‘consult’])) {
  3. Логирование включено — проверяйте ошибки в логах WordPress.

Важные моменты

  1. Обязательное поле — телефон. Без него отправки не будет.
  2. Тестирование — сначала проверьте на тестовом лиде.
  3. Безопасность — не коммитьте данные в публичный репозиторий.
  4. Обработка ошибок — код логирует все ошибки для отладки.

Заключение

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

Используйте и экономьте на плагинах! 

P.S. Если нужно добавить другие поля (email, комментарий) — расширяйте массив $leadData. Код легко адаптируется под любые задачи.

Последние статьи