Callback установки
Выберите инструмент для разработки с AI-агентом:
- используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
- используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации
Callback установки — способ получить токены авторизации на своем сервере. Сразу после установки локального приложения Битрикс24 отправляет на адрес из поля Путь для первоначальной установки POST-запрос события ONAPPINSTALL. Данные авторизации OAuth 2.0, включая access_token и refresh_token, приходят в объекте auth.
Когда применять
Вариант подходит приложениям, которым не нужна первоначальная настройка: например, вся логика работает в обработчиках событий. Если интерфейс не нужен, оставьте пустыми поля Название пункта меню — приложение не появится в левом меню, но сможет регистрировать виджеты в местах встройки.
Опцию Приложение само завершает установку оставьте выключенной, как по умолчанию. Если ее включить, Битрикс24 не отправит данные на обработчик и будет ждать вызова BX24.installFinish() на странице мастера установки.
Как настроить установку
Обработчик из примера проверит токен из запроса установки и сохранит данные авторизации в файл. Чтобы он получил запрос:
- Создайте локальное приложение: заполните поле Путь вашего обработчика и выберите права доступа. Поле Путь для первоначальной установки пока не заполняйте. После сохранения формы в ней появится
client_idприложения - Укажите
client_idв коде обработчика и разместите обработчик на своем сервере, доступном по HTTPS. Примеру ниже нужны PHP 7.4 или новее с расширением cURL и каталог/var/app-data, в который PHP может писать - Впишите адрес обработчика в поле Путь для первоначальной установки и сохраните форму
- Нажмите в форме Переустановить — это может сделать только администратор. Битрикс24 отправит запрос установки на обработчик
Пример обработчика
Фрагмент запроса, значения сокращены:
$_POST = [
'event' => 'ONAPPINSTALL',
'auth' => [
'access_token' => '***',
'refresh_token' => '***',
'expires_in' => 3600,
'client_endpoint' => 'https://example.bitrix24.ru/rest/',
'member_id' => '***',
'application_token' => '***'
]
];
Обработчик доступен по публичному адресу, поэтому запрос на него может прислать кто угодно. Прежде чем сохранять токены, проверьте их методом app.info.
Локальное приложение работает в одном Битрикс24, и его адрес известен заранее. Адрес client_endpoint в запросе задает отправитель, поэтому вызовите метод с полученным access_token по адресу своего Битрикс24. Если токен выдан вашему приложению, поле CODE в ответе совпадет с client_id приложения. Фрагмент ответа:
{
"result": {
"ID": 1,
"CODE": "local.000000000000000000000000",
"STATUS": "L",
"INSTALLED": true
}
}
<?php
const CLIENT_ID = 'local.000000000000000000000000';
// адрес REST API вашего Битрикс24
const PORTAL_ENDPOINT = 'https://example.bitrix24.ru/rest/';
// храните токены вне публичного каталога сайта
const AUTH_FILE = '/var/app-data/auth.json';
$auth = $_POST['auth'] ?? [];
$ch = curl_init(PORTAL_ENDPOINT . 'app.info');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['auth' => $auth['access_token'] ?? '']));
$response = curl_exec($ch);
if ($response === false)
{
error_log('app.info: ' . curl_error($ch));
}
curl_close($ch);
$result = json_decode((string)$response, true);
if (isset($result['error']))
{
error_log('app.info: ' . $result['error']); // токены в лог не пишем
}
$required = ['access_token', 'refresh_token', 'member_id', 'application_token'];
$isComplete = count(array_filter($required, fn($key) => !empty($auth[$key]))) === count($required);
if (($_POST['event'] ?? '') !== 'ONAPPINSTALL' || !$isComplete || ($result['result']['CODE'] ?? '') !== CLIENT_ID)
{
http_response_code(403);
exit();
}
if (file_put_contents(AUTH_FILE, json_encode($auth, JSON_UNESCAPED_SLASHES)) === false)
{
http_response_code(500);
exit();
}
После переустановки проверьте, что файл /var/app-data/auth.json появился и в нем есть access_token, refresh_token, member_id и application_token. Если файла нет, посмотрите ответ обработчика и журнал ошибок PHP:
- в журнале
app.info:и текст ошибки cURL — сервер приложения не смог обратиться к Битрикс24. Проверьте адрес вPORTAL_ENDPOINTи доступ сервера к нему, затем нажмите Переустановить - в журнале
app.info:и код ошибки — метод вернул ошибку. Например,invalid_tokenзначит, что Битрикс24 не принял токен, аexpired_token— что токен истек. Остальные коды описаны в статье Коды ошибок. Если запрос был настоящим, нажмите Переустановить - ответ
403без записи в журнале — пришло не событиеONAPPINSTALL, вauthне хватает полей,app.infoвернул ответ не в формате JSON илиCODEне совпал сCLIENT_ID. Если запрос был настоящим, проверьтеclient_idв коде обработчика и адрес вPORTAL_ENDPOINT, затем нажмите Переустановить - ответ
500— PHP не смог записать файл. Проверьте права на каталог, затем нажмите Переустановить
Вместе с токенами сохраните application_token и member_id. По ним другие обработчики приложения сверяют входящие события, подробнее — в статье Безопасность в обработчиках.
По сохраненному refresh_token приложение продлевает доступ без участия пользователя. При каждом продлении приходит новая пара токенов — сохраняйте ее вместо прежней. Порядок продления — в статье Автоматическое продление токенов OAuth 2.0.
Если токены не сохранились
Если приложение не сохранило refresh_token при установке, получите первую пару токенов по полному протоколу авторизации OAuth 2.0. Возьмите client_id и client_secret из формы приложения. После авторизации Битрикс24 вернет пользователя на адрес из поля Путь вашего обработчика. В ответе OAuth нет application_token: если он сохранился при установке, не перезаписывайте его. Если не сохранился, нажмите в форме приложения Переустановить — обработчик получит его заново.