Разработка кастомного REST-приложения для Битрикс24 Маркетплейс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка кастомного REST-приложения для Битрикс24 Маркетплейс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1167
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    563
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    743
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Разработка кастомного REST-приложения для Битрикс24 Маркетплейс

REST-приложение для маркетплейса Битрикс24 — это не локальное приложение, установленное на конкретном портале, а многопользовательский продукт, который можно установить на любой портал из каталога маркетплейса. Это меняет требования к архитектуре: приложение должно быть multi-tenant с первого дня, обрабатывать независимые потоки данных от тысяч порталов и не падать при нестандартном поведении любого из них.

Чем REST-приложение отличается от локального

Локальное приложение создаётся в настройках конкретного портала через раздел «Приложения» → «Разработчикам». Оно работает только на этом портале, токены жёстко привязаны, multi-tenancy не нужен.

REST-приложение для маркетплейса регистрируется через partner.bitrix24.ru, имеет единые client_id и client_secret для всех инсталляций. Каждый портал, установивший приложение, получает собственные access_token / refresh_token. Ваш сервис должен хранить токены всех порталов и работать с каждым независимо.

Ключевой идентификатор инсталляции — member_id (хэш, уникальный для каждого портала). Все данные в вашей БД партиционируются по member_id.

Инфраструктура приложения

Минимальная инфраструктура production-приложения для маркетплейса:

Компоненты:

  • OAuth-сервер — обрабатывает install, uninstall, login handler'ы
  • API-сервис — принимает запросы от iframe, работает с Битрикс24 REST API
  • Worker/очередь — обрабатывает webhook'и от порталов асинхронно
  • БД — хранит токены, настройки, данные приложения с партиционированием по member_id
  • Кэш (Redis) — кэшируем access_token до истечения TTL (3600 сек), данные которые редко меняются

Handler'ы, которые обязательно нужно реализовать:

POST /bitrix/install   → получение code, обмен на токены, сохранение в БД
POST /bitrix/uninstall → инвалидация токенов, очистка данных портала (GDPR)
POST /bitrix/login     → SSO через Битрикс24 (опционально, но удобно)
POST /bitrix/events    → приём webhook-событий от портала
GET  /bitrix/app       → главная страница iframe-приложения

OAuth-флоу: детали реализации

При установке приложения Битрикс24 отправляет POST на handler URL (прописывается при регистрации приложения):

POST /bitrix/install
Content-Type: application/x-www-form-urlencoded

event=ONAPPINSTALL&auth[access_token]=...&auth[refresh_token]=...
&auth[member_id]=abc123&auth[domain]=company.bitrix24.ru

Здесь уже в теле установки приходят токены — code для обмена не нужен. Сохраняете всё в БД. Схема таблицы токенов:

CREATE TABLE app_installations (
    id              SERIAL PRIMARY KEY,
    member_id       VARCHAR(64) UNIQUE NOT NULL,
    domain          VARCHAR(255) NOT NULL,
    access_token    TEXT NOT NULL,
    refresh_token   TEXT NOT NULL,
    expires_at      TIMESTAMP NOT NULL,
    scope           TEXT,
    installed_at    TIMESTAMP DEFAULT NOW(),
    uninstalled_at  TIMESTAMP
);
CREATE INDEX ON app_installations (member_id);

Refresh токена: когда expires_at наступает (или при получении 401 от API портала), делаем запрос на https://oauth.bitrix.info/oauth/token/ с grant_type=refresh_token. Важно: refresh должен быть атомарным (mutex по member_id), иначе при параллельных запросах несколько воркеров могут одновременно обновить токен и один из них получит неактуальный.

Работа с Битрикс24 REST API из вашего сервиса

После получения access_token все запросы к конкретному порталу идут на его домен:

POST https://{domain}/rest/{method}
Authorization: Bearer {access_token}
Content-Type: application/json

Либо токен передаётся в теле: auth={access_token}.

Rate limiting. Битрикс24 ограничивает приложения: не более 2 запросов/секунду на один портал (в некоторых источниках — до 5 RPS на облачных тарифах). При превышении — ответ {"error":"QUERY_LIMIT_EXCEEDED"}. Нужна очередь с rate limiter per member_id.

Batch-запросы. Метод batch позволяет объединить до 50 методов в один HTTP-запрос. Это критично для производительности — вместо 50 отдельных HTTP round-trip делаем один.

Пагинация. Все list-методы возвращают максимум 50 элементов. В ответе есть next (смещение для следующего запроса) и total. Для получения всех записей нужен цикл. При большом объёме данных (тысячи записей) — обязательно используйте асинхронную обработку страниц.

Работа с placements: встраивание в интерфейс

Регистрация placement при установке:

// Вызываем при обработке ONAPPINSTALL
BX24.callMethod('placement.bind', {
    PLACEMENT: 'CRM_DEAL_DETAIL_TAB',
    HANDLER: 'https://your-app.com/bitrix/app?placement=crm_deal',
    TITLE: 'Название вкладки',
    DESCRIPTION: 'Описание'
});

В iframe ваше приложение получает контекст через JS SDK:

BX24.init(function() {
    BX24.placement.getInterface(function(data) {
        // data.ID — ID сделки/лида/контакта
        // data.ENTITY_TYPE — тип сущности
        fetchDataForEntity(data.ID, data.ENTITY_TYPE);
    });

    // Изменение размера iframe под контент
    BX24.fitWindow();
});

Cookie в iframe недоступны в Safari из-за ITP. Сессию нужно хранить в localStorage или получать через BX24.getAuth() при каждом открытии.

Обработка событий (webhooks)

Подписка на события через event.bind делается при установке:

POST /rest/event.bind
{
    "event": "ONCRMDEALUPDATE",
    "handler": "https://your-app.com/bitrix/events",
    "auth_type": 0
}

Критичное требование: handler должен ответить HTTP 200 за 5 секунд. Весь тяжёлый процессинг — в очередь. Схема обработчика:

POST /bitrix/events → верификация подписи → положить в очередь → ответить 200
Воркер → достать из очереди → обработать → обновить данные

Безопасность

Верификация входящих запросов от Битрикс24: в заголовках или теле передаётся auth[application_token] — это статический токен вашего приложения из настроек в partner.bitrix24.ru. Проверяйте его на каждый incoming запрос.

Для webhook'ов из event.bind тело содержит auth[application_token] — то же самое.

Сроки разработки

Объём Срок
Базовое iframe-приложение, чтение данных CRM 3–5 недель
Приложение с двусторонней синхронизацией и webhook'ами 7–11 недель
Мультифункциональное приложение с несколькими placements и собственным UI 12–18 недель
Готовность к публикации (тестирование, оформление карточки, прохождение модерации) +3–5 недель к любому варианту