Настройка Bitrix24 API для CRM на PHP
Основные методы интеграции 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