Настройка Bitrix24 API для CRM на PHP

Раздел: Интеграция API -> Интеграция CRM

Основные методы интеграции Bitrix24 API на PHP

Как интегрировать CRM с помощью официального PHP SDK?

Основное решение

Официальный SDK bitrix24/bitrix24-php-sdk упрощает авторизацию и выполнение запросов. Установка через Composer: composer require bitrix24/bitrix24-php-sdk.


require_once __DIR__ . '/vendor/autoload.php';

use Bitrix24\Bitrix24;
use Bitrix24\Exceptions\Bitrix24Exception;

$bx24 = new Bitrix24('https://your-domain.bitrix24.ru/rest/');
$bx24->setAccessToken('your_access_token');

try {
    $result = $bx24->call('crm.lead.list', [
        'filter' => ['STATUS_ID' => 'NEW'],
        'select' => ['ID', 'TITLE']
    ]);
    print_r($result);
} catch (Bitrix24Exception $e) {
    echo 'Ошибка: ' . $e->getMessage();
}
    

Bitrix24 api php (bitrix24 api на php)

Типичные ошибки: неверный токен (проверить права, время жизни), превышение лимита запросов (рекомендуется использовать batch), проблемы с SSL (включить verify).

Как отправлять запросы через curl без использования SDK?

Альтернативное решение

Прямые curl-запросы позволяют быстро протестировать API без сторонних библиотек.


$webhookUrl = 'https://your-domain.bitrix24.ru/rest/1/user_token/';
$data = [
    'method' => 'crm.lead.list',
    'params' => [
        'filter' => ['STATUS_ID' => 'NEW'],
        'select' => ['ID', 'TITLE']
    ]
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $webhookUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (curl_error($ch)) {
    echo 'Ошибка CURL: ' . curl_error($ch);
} else {
    $result = json_decode($response, true);
    print_r($result);
}
curl_close($ch);
    

Распространенные проблемы: отсутствие библиотеки curl, неверный URL, ошибки SSL (добавить CURLOPT_SSL_VERIFYPEER), неверный формат данных (использовать http_build_query или json).

Как использовать входящие вебхуки без OAuth?

Упрощенное решение

Входящие вебхуки не требуют OAuth, достаточно скопировать URL из настроек приложения.


$webhookUrl = 'https://your-domain.bitrix24.ru/rest/1/your_webhook_code/crm.lead.list.json';
$params = [
    'filter' => ['STATUS_ID' => 'NEW'],
    'select' => ['ID', 'TITLE']
];
$url = $webhookUrl . '?' . http_build_query($params);
$response = file_get_contents($url);
$result = json_decode($response, true);
print_r($result);
    

Ограничения: вебхук имеет права только того пользователя, который его создал и только на разрешенные методы. При смене пользователя вебхук становится неактивным.

Расширенные примеры кода

Пример 1: Пакетный запрос (batch)

Пакетный запрос позволяет выполнить несколько методов за один HTTP вызов, что снижает нагрузку и ускоряет работу.

Пример

$bx24 = new Bitrix24('https://your-domain.bitrix24.ru/rest/');
$bx24->setAccessToken('your_access_token');

$commands = [
    'lead_new' => 'crm.lead.list?filter[STATUS_ID]=NEW&select[0]=ID&select[1]=TITLE',
    'lead_1' => 'crm.lead.get?id=1'
];
try {
    $result = $bx24->call('batch', ['cmd' => $commands]);
    print_r($result);
} catch (Exception $e) {
    echo 'Ошибка batch: ' . $e->getMessage();
}
    

Результат выполнения:

Array
(
    [result] => Array
        (
            [result] => Array
                (
                    [lead_new] => Array
                        (
                            [result] => Array
                                (
                                    [0] => Array
                                        (
                                            [ID] => 123,
                                            [TITLE] => 'Новый лид'
                                        )
                                )
                            [total] => 1
                            [time] => Array
                                (
                                    [start] => 0.000000
                                    [finish] => 0.000000
                                    [duration] => 0.000000
                                    [processing] => 0.000000
                                    [date_start] => '2025-01-01T12:00:00+03:00'
                                    [date_finish] => '2025-01-01T12:00:00+03:00'
                                )
                        ),
                    [lead_1] => Array
                        (
                            [result] => Array
                                (
                                    [ID] => 1,
                                    [TITLE] => 'Лид 1',
                                    ...
                                )
                            [time] => ...
                        )
                )
        )
    [time] => ...
)
    

Пример 2: Получение пользовательских полей лидов

Пользовательские поля (UF) часто используются для хранения дополнительных данных.

Пример

$bx24 = new Bitrix24('https://your-domain.bitrix24.ru/rest/');
$bx24->setAccessToken('your_access_token');
$result = $bx24->call('crm.lead.userfield.list');
if (isset($result['result'])) {
    foreach ($result['result'] as $field) {
        echo 'ID: ' . $field['ID'] . ', Имя: ' . $field['FIELD_NAME'] . "\n";
    }
}
    

Результат (сокращенный):

Array
(
    [result] => Array
        (
            [0] => Array
                (
                    [ID] => 1
                    [ENTITY_ID] => CRM_LEAD
                    [FIELD_NAME] => UF_CRM_1700000000
                    [USER_TYPE_ID] => string
                    [XML_ID] => MOBILE_PHONE
                    ...
                ),
            ...
        )
)
    

Пример 3: Загрузка файла в элемент CRM

Для загрузки файла (например, в лид) необходимо отправить multipart/form-data запрос.

Пример

$bx24 = new Bitrix24('https://your-domain.bitrix24.ru/rest/');
$bx24->setAccessToken('your_access_token');

$filePath = '/path/to/document.pdf';
$postData = [
    'FIELDS' => [
        'TITLE' => 'Лид с файлом',
        'SOURCE_ID' => 'WEB'
    ],
    'FILES' => [
        'FILE' => curl_file_create($filePath, 'application/pdf', 'document.pdf')
    ]
];
$url = 'https://your-domain.bitrix24.ru/rest/1/your_token/crm.lead.add.json';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (curl_error($ch)) {
    echo 'Ошибка: ' . curl_error($ch);
} else {
    $result = json_decode($response, true);
    print_r($result);
}
curl_close($ch);
    

Результат:

Array
(
    [result] => Array
        (
            [ID] => 456,
            [TITLE] => 'Лид с файлом',
            ...
        )
    [time] => ...
)
    

Примечание: при загрузке файлов необходимо использовать абсолютный путь и проверять размер файла (ограничение сервера).

Пример 4: Обработка события (event) - регистрация обработчика

Bitrix24 может отправлять уведомления о событиях (например, добавление лида) на указанный URL.

Пример

$bx24 = new Bitrix24('https://your-domain.bitrix24.ru/rest/');
$bx24->setAccessToken('your_access_token');
$result = $bx24->call('event.bind', [
    'event' => 'onCrmLeadAdd',
    'handler' => 'https://mysite.com/handler.php'
]);
if ($result['result'] === true) {
    echo 'Обработчик зарегистрирован';
} else {
    echo 'Ошибка регистрации';
}
    

Файл handler.php получает POST данные в формате JSON:

Пример

$data = json_decode(file_get_contents('php://input'), true);
file_put_contents('/tmp/bitrix_event.log', print_r($data, true));
// Логика обработки
    

Результат регистрации:

true
    

Bitrix24 API на PHP - comments

En
Bitrix24 api php (php)