← Назад к справке

REST

Локальные приложения и авторизация

Рабочая справка по локальным приложениям Bitrix24 REST: OAuth, BX24.init, BX24.install, BX24.getAuth, access_token и вызов REST.

Локальное приложение нужно, когда интеграции требуется интерфейс внутри Bitrix24, виджеты, контекст пользователя, OAuth-авторизация или методы, которые не работают через простой входящий вебхук.

Локальное приложение

Локальное приложение работает в конкретном портале и открывается внутри Bitrix24 в iframe.

Когда нужно приложение

Нужно приложение Можно вебхук
Нужен интерфейс в Bitrix24. Нужен серверный скрипт без UI.
Нужны виджеты и placement. Нужен простой обмен с CRM.
Нужна OAuth-авторизация. Достаточно постоянного URL вебхука.
Нужны методы, работающие только в контексте приложения. Метод поддерживает вызов через вебхук.

Что получает приложение

При открытии приложения Bitrix24 передаёт данные для работы: домен портала, авторизационные данные, пользователя и контекст запуска. В JS это обычно получают через BX24.init() и связанные методы SDK.

Сервер приложения

Для локального приложения нужен URL обработчика. Он должен быть доступен Bitrix24 по HTTPS, если приложение использует события, установку, виджеты или серверные callback.

BX24 JS SDK

В интерфейсных приложениях обычно используется библиотека BX24.

BX24.init

BX24.init() выполняет код после готовности библиотеки и получения данных от родительского фрейма Bitrix24.

document.addEventListener('DOMContentLoaded', function () {
    BX24.init(function () {
        console.log('BX24 initialized');

        BX24.callMethod('user.current', {}, function (result) {
            if (result.error()) {
                console.error(result.error());
                return;
            }

            console.log(result.data());
        });
    });
});

BX24.install

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

BX24.install(function () {
    BX24.callMethod('user.current', {}, function (result) {
        if (result.error()) {
            console.error(result.error());
            BX24.installFinish();
            return;
        }

        console.log('Installed for user:', result.data());

        BX24.installFinish();
    });
});

Если используется BX24.install(), после завершения нужно вызвать BX24.installFinish(), иначе установка может считаться незавершённой.

BX24.getAuth

BX24.getAuth() возвращает данные OAuth-авторизации, которые можно передать на свой сервер, если серверу нужно вызывать REST от имени текущего пользователя.

BX24.init(function () {
    var auth = BX24.getAuth();

    console.log(auth);
});

OAuth

Приложения используют временный OAuth-токен, а не постоянный код вебхука.

access_token и refresh_token

access_token используется для вызова REST. Когда он истекает, приложение обновляет его через refresh_token. Готовые SDK обычно берут эту работу на себя.

Вызов REST с токеном

<?php

const BITRIX24_DOMAIN = 'portal.bitrix24.ru';

/**
 * Вызывает REST-метод с OAuth-токеном.
 */
function callBitrix24RestWithToken(string $method, string $access_token, array $parameters = []): array
{
    $url = 'https://' . BITRIX24_DOMAIN . '/rest/' . $method . '.json';

    $parameters['auth'] = $access_token;

    $curl = curl_init();

    curl_setopt_array($curl, [
        CURLOPT_URL => $url,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => http_build_query($parameters),
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 30,
    ]);

    $response_body = curl_exec($curl);
    $curl_error = curl_error($curl);

    curl_close($curl);

    if ($response_body === false) {
        return [
            'is_success' => false,
            'error_messages' => [$curl_error],
            'data' => null,
        ];
    }

    $response_data = json_decode($response_body, true);

    return [
        'is_success' => empty($response_data['error']),
        'error_messages' => !empty($response_data['error_description'])
            ? [$response_data['error_description']]
            : [],
        'data' => $response_data,
    ];
}

$result = callBitrix24RestWithToken(
    'user.current',
    $access_token
);

print_r($result);

Источники