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

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Розробка кастомного REST-додатку для Бітрікс24 Маркетплейс
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Розробка кастомного REST-додатка для маркетплейсу Bitrix24

REST-додаток для маркетплейсу Bitrix24 — це не локальний додаток, встановлений на конкретному портальні, а багатокористувацький продукт, який можна встановити на будь-якому порталі з каталогу маркетплейсу. Це змінює вимоги до архітектури: додаток повинен бути 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 обробники
  • API-сервіс — приймає запити від iframe, працює з REST API Bitrix24
  • Worker/черга — обробляє webhook'и від порталів асинхронно
  • БД — зберігає токени, параметри, дані додатка з партиціюванням по member_id
  • Кеш (Redis) — кешуємо access_token до закінчення TTL (3600 сек), дані які рідко змінюються

Обробники, які обов'язково потрібно реалізувати:

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

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

При установці додатка Bitrix24 відправляє 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), інакше при паралельних запитах кілька воркерів можуть одночасно оновити токен й один отримає неактуальний.

Робота з REST API Bitrix24 з вашого сервісу

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

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

Або токен передається в тілі: auth={access_token}.

Rate limiting. Bitrix24 обмежує додатки: не більше 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
}

Критична вимога: обробник повинен відповісти HTTP 200 за 5 секунд. Усе тяжке процесинг — в чергу. Схема обробника:

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

Безпека

Верифікація вхідних запитів від Bitrix24: у заголовках або тілі передається auth[application_token] — це статичний токен вашого додатка з параметрів у partner.bitrix24.ru. Перевіряйте його на кожен вхідний запит.

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

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

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