Callback установки
Выберите инструмент для разработки с AI-агентом:
- используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
- используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации
Когда локальное приложение добавляется с опцией Использует только API, у него нет базового интерфейса в левом меню. Такое приложение все равно может зарегистрировать виджеты в различных местах встройки, но автоматически пункт в левом меню добавлен не будет.
Это полезный сценарий для приложений, которым не нужен отдельный пользовательский интерфейс или настройки, а вся бизнес-логика реализована, например, в виде автоматических обработчиков событий.
Несмотря на отсутствие пользовательского интерфейса, таким приложениям нужно получить токены авторизации. Для этого нужен callback-обработчик, путь к которому нужно указать в поле Путь для первоначальной установки.
Сразу после добавления локального приложения Битрикс24 автоматически обратится к этому URL и передаст туда POST-запрос с данными авторизации OAuth 2.0, включая access_token и refresh_token.
Приложение должно сохранить эти токены на своей стороне. access_token действует ограниченное время, поэтому постоянный доступ к REST API обеспечивается не бессрочным токеном, а сохраненным refresh_token.
Пример получения и сохранения токенов
Callback-обработчик должен принять POST-запрос установки и сохранить объект auth. Для дальнейшей работы приложения важен refresh_token: по нему приложение сможет получать новую пару токенов без участия пользователя.
<?php
const AUTH_FILE = __DIR__ . '/auth.json';
function saveAuth(array $auth): void
{
file_put_contents(AUTH_FILE, json_encode($auth, JSON_UNESCAPED_SLASHES));
}
if (isset($_POST['auth']) && is_array($_POST['auth']))
{
saveAuth($_POST['auth']);
header('Content-Type: application/json');
echo json_encode(['status' => 'success']);
exit();
}
http_response_code(400);
echo 'Auth data is required';
Сохраненный refresh_token нужно использовать для автоматического продления токенов OAuth 2.0. При каждом продлении Битрикс24 возвращает новую пару access_token и refresh_token, ее нужно перезаписать на стороне приложения.
В примере токены записываются в файл auth.json. В рабочем приложении храните токены в недоступном из браузера хранилище.
Получение первой пары токенов через полный OAuth
Если приложение не сохранило refresh_token при установке или нужно повторно получить первую пару токенов, используйте полный протокол авторизации OAuth 2.0. Этот сценарий не заменяет callback установки, а помогает заново пройти первичную авторизацию приложения.
Возьмите client_id и client_secret из формы локального приложения. Обратный адрес, на который Битрикс24 вернет пользователя после авторизации, берется из настроек приложения.
Сформируйте ссылку авторизации и откройте ее в браузере от имени пользователя, который дает приложению доступ к Битрикс24.
<?php
const CLIENT_ID = 'local.000000000000000000000000';
$domain = 'example.bitrix24.ru';
$authorizeUrl = 'https://' . $domain . '/oauth/authorize/?' . http_build_query([
'client_id' => CLIENT_ID,
]);
header('Location: ' . $authorizeUrl);
exit();
После авторизации Битрикс24 перенаправит пользователя на redirect_uri и передаст параметр code. Это не токен для REST API, а одноразовый код авторизации. Время жизни code — 30 секунд, поэтому обменять его на токены нужно сразу.
<?php
const CLIENT_ID = 'local.000000000000000000000000';
const CLIENT_SECRET = 'client_secret';
const AUTH_FILE = __DIR__ . '/auth.json';
if (!isset($_GET['code']))
{
http_response_code(400);
echo 'Authorization code is required';
exit();
}
$query = http_build_query([
'grant_type' => 'authorization_code',
'client_id' => CLIENT_ID,
'client_secret' => CLIENT_SECRET,
'code' => $_GET['code'],
]);
$response = file_get_contents('https://oauth.bitrix24.tech/oauth/token/?' . $query);
$auth = json_decode($response, true);
if (!is_array($auth) || isset($auth['error']))
{
http_response_code(400);
echo $response;
exit();
}
file_put_contents(AUTH_FILE, json_encode($auth, JSON_UNESCAPED_SLASHES));
echo 'Authorization tokens saved';
Такой сценарий не создает бессрочный access_token. Приложение получает первую пару токенов, сохраняет refresh_token и использует его для продления доступа. Если refresh_token не обновлять, срок его действия закончится.
В случае callback-обработчика установки приложение также не должно вызывать JS-метод BX24.installFinish(), как это нужно делать для локальных приложений с мастером установки.
Даже если попытаться это сделать, метод не сработает. BX24.installFinish() работает только во фреймах интерфейса приложения в браузере, а callback-обработчик приложения вызывается с серверной стороны Битрикс24. Браузер в этом процессе не участвует.