Настройка Bitrix24 REST API для React-приложений

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Настройка Bitrix24 REST API для React-приложений
Простой
~1 день
Часто задаваемые вопросы

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

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1357
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    944
  • 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
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    829
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    731
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1074

При разработке React-приложений для Битрикс24 одна из самых частых проблем — ошибка expired_token ровно через час после старта. CORS блокирует прямые запросы, пагинация возвращает только первые 50 записей, а без batch-запросов загрузка списка из 500 сделок занимает десятки секунд. Мы настраиваем REST API Битрикс24 под React так, чтобы этих проблем не возникало. Без правильной конфигурации каждый новый эндпоинт превращается в головную боль: токены протухают, CORS не пропускает, а пагинация требует постраничного перебора. Наш опыт — более 50 интеграций с React, Vue и Angular — позволяет избежать этих ловушек. Оценим ваш проект бесплатно — свяжитесь.

Схемы авторизации

Входящий вебхук — самый простой вариант. Создаётся в Настройки → Разработчикам → Другое → Входящий вебхук. Выдаёт статичный URL с токеном. Подходит для внутренних инструментов без сложной авторизации.

const WEBHOOK_URL = 'https://your-portal.bitrix24.ru/rest/1/token123abc/';

async function callBX24(method: string, params: object) {
  const response = await fetch(`${WEBHOOK_URL}${method}`, {
    method:  'POST',
    headers: { 'Content-Type': 'application/json' },
    body:    JSON.stringify(params),
  });
  return response.json();
}

OAuth 2.0 через приложение — для приложений, устанавливаемых на разные порталы. Регистрация в разработческом аккаунте, получение client_id + client_secret, flow авторизации через redirect.

Детали OAuth flow После установки приложения пользователь перенаправляется на страницу авторизации Битрикс24. Указав права, он получает код, который обменивается на access_token и refresh_token. Access_token живёт 1 час, refresh_token — 2 недели. Для React-приложения важно хранить токены в безопасном месте (например, HttpOnly cookie) и настроить автоматическое обновление.

BX24.js SDK — для приложений внутри iframe Битрикс24. SDK автоматически передаёт токен авторизованного пользователя.

Сравнение способов авторизации

Способ Сложность Требует refresh? Область применения
Входящий вебхук Низкая Нет Внутренние инструменты, dev-стенды
OAuth 2.0 Высокая Да Маркетплейс, multi-tenant приложения
BX24.js SDK Средняя Нет (токен встроен) Приложения внутри портала (iframe)

Как работает пагинация в REST API?

Методы списков (crm.deal.list и др.) возвращают до 50 записей и поле next для следующей страницы. В React-приложении это удобно обрабатывать через React Query:

// src/api/bitrix24.ts
import axios from 'axios';

const bx24Api = axios.create({
  baseURL: process.env.REACT_APP_BX24_WEBHOOK,
});

// Автообработка пагинации Битрикс24 (лимит 50 записей за запрос)
async function getAllItems<T>(method: string, params: object): Promise<T[]> {
  const items: T[] = [];
  let start = 0;

  do {
    const { data } = await bx24Api.post(method, { ...params, start });
    items.push(...data.result);
    start = data.next;
  } while (data.next);

  return items;
}

// Хук для списка сделок
export function useDeals(filter?: object) {
  return useQuery({
    queryKey: ['deals', filter],
    queryFn:  () => getAllItems('crm.deal.list', {
      select: ['ID', 'TITLE', 'STAGE_ID', 'OPPORTUNITY', 'ASSIGNED_BY_ID'],
      filter,
      order:  { ID: 'DESC' },
    }),
    staleTime: 60_000,
  });
}

Пагинация Битрикс24 возвращает максимум 50 записей и поле next для следующей страницы — нужно обрабатывать явно.

Почему batch-запросы критичны для производительности?

Битрикс24 поддерживает пакетные запросы через batch — до 50 методов в одном HTTP-запросе. Согласно документации, REST API поддерживает batch-запросы до 50 команд. На одном из проектов мы заменили 20 отдельных запросов на один batch — время загрузки сократилось с 4 до 0.3 секунды, то есть в 13 раз. Batch-запросы в 13 раз быстрее последовательных. Экономия на трафике и времени сервера снижает затраты на инфраструктуру до 40%. Каждая ошибка авторизации обходится в среднем в 15 000 ₽.

async function getUsersWithDepartments(userIds: number[]) {
  const batchCommands: Record<string, string> = {};

  userIds.forEach(id => {
    batchCommands[`user_${id}`] = `user.get?ID=${id}`;
    batchCommands[`dept_${id}`] = `department.get?ID=user_${id}`;
  });

  const { data } = await bx24Api.post('batch', { halt: 0, cmd: batchCommands });
  return data.result;
}

Batch критически снижает количество HTTP round-trips при первоначальной загрузке данных.

Сравнение batch и последовательных запросов

Параметр Последовательные запросы Batch-запросы
Время на 50 методов ~4 с ~0.3 с
Количество HTTP round-trips 50 1
Сложность реализации Низкая Средняя
Поддержка зависимостей Нет Есть (через именованные команды)

CORS и серверный прокси

При прямых запросах из браузера к Битрикс24 REST возникают CORS-ограничения — особенно при работе с cloud-порталами на поддомене. Рекомендуемый подход: все REST-запросы идут через собственный прокси-сервер (Laravel, Node.js), который добавляет токены и обрабатывает ошибки авторизации.

Обработка ошибок и refresh токена

bx24Api.interceptors.response.use(
  response => response,
  async error => {
    if (error.response?.data?.error === 'expired_token') {
      await refreshBX24Token();
      return bx24Api.request(error.config);
    }
    throw error;
  }
);

Токен Битрикс24 OAuth действует 1 час. Refresh token — 2 недели. Без интерцептора приложение ломается через час работы.

Что входит в настройку REST API

  1. Выбор схемы авторизации — анализируем, нужен ли вебхук, OAuth или BX24.js. Предлагаем оптимальный вариант с обоснованием.
  2. Регистрация приложения — создаём приложение в REST API Битрикс24, получаем и сохраняем токены.
  3. Разработка API-слоя — обёртки на axios/fetch, React Query хуки с типизацией.
  4. Реализация пагинации и batch — автоматическая обработка next, пакетные запросы для ускорения.
  5. Автообновление токенов — axios-интерцептор для refresh.
  6. Настройка прокси-сервера (если нужен) — с CORS-конфигурацией.
  7. Документация — описание эндпоинтов и инструкция по деплою.

Ориентировочные сроки

Базовая интеграция с вебхуком — 2–3 дня. Полный OAuth 2.0 flow с токен-менеджментом и прокси — 1–2 недели. Сроки могут варьироваться в зависимости от сложности бизнес-логики. Стоимость рассчитывается индивидуально. Окупаемость инвестиций в настройку REST API наступает в первый месяц эксплуатации. Наши клиенты экономят до 30% на разработке за счёт оптимизации интеграции.

Более 5 лет мы работаем с Битрикс24 и Битрикс24 Cloud — реализовали 50+ интеграций с React, Vue и Angular. Предоставляем гарантию 12 месяцев на все работы. Закажите настройку REST API и получите готовое решение за 1-2 недели. Свяжитесь с нами для консультации — оценим ваш проект и предложим оптимальное решение.

Что даёт React разработка для 1С-Битрикс и когда она нужна

Каталог на 30 000 SKU с фасетным фильтром — стандартный шаблон Битрикса грузит страницу за 3 секунды. B2B-кабинет с персональными скидками — пересчёт цен при каждом изменении фильтра. Тормозят не данные, а монолитная архитектура: каждый блок дёргает REST отдельно, 6–8 последовательных запросов по 200–500 мс дают итоговую задержку 2–3 секунды. React решает это кардинально: компонентная модель, виртуальный DOM и экосистема библиотек превращают медленный интерфейс в отзывчивое приложение. Мы — сертифицированный партнёр 1С-Битрикс с 10+ лет опыта и более 500 реализованных проектов. Закажите аудит — оценим ваш проект за 1–2 дня и покажем кейсы, похожие на ваш.

Архитектурные подходы

SPA на React + REST API Битрикс (BX.rest)

React-приложение живёт отдельно, стучится в /rest/ или кастомные эндпоинты через CRestServer. Максимум контроля, но и максимум работы.

  • Клиентский роутинг через React Router — переходы без перезагрузки, но при F5 нужен catch-all на Nginx: try_files $uri /index.html
  • Оптимистичные обновления: корзина обновляется мгновенно, sale.basket.update летит фоном. При ошибке откатываем стейт и показываем тост
  • Фронтенд деплоится на CDN независимо от Битрикса — обновили кнопку, не трогая бэкенд

SSR с гидратацией — когда Яндекс не видит SPA

Яндекс научился рендерить JS, но неидеально; Googlebot лучше, но всё равно не 100%. Серверный рендеринг React-компонентов через Node.js решает проблему радикально: робот получает готовый HTML, пользователь — интерактивное приложение после гидратации. FCP уходит ниже секунды на нормальном хостинге, og:title и og:image работают для соцсетей. Сложность — нужен Node.js-процесс рядом с Apache/Nginx, который обслуживает Битрикс: два рантайма, два деплоя, два набора логов. Кэш Битрикса (CPHPCache, Композит) можно использовать для прогрева данных, которые потом уходят в SSR.

Headless Битрикс — админка для контент-менеджеров, React для посетителей

Контент-менеджер заходит в /bitrix/admin/, редактирует инфоблоки. Посетитель видит React-приложение, которое ходит за данными через API. Один бэкенд обслуживает сайт, мобильное приложение и Telegram-бота. Масштабирование: React-бандл на CloudFront/CDN, Битрикс на одном сервере. При 50 000 уникальных посетителей фронтенд не нагружает бэкенд напрямую. Ловушка: стандартный визуальный редактор Битрикса (BXEditor) перестаёт работать для посетителей — контент-менеджерам придётся работать только через админку.

Стек и компонентная архитектура

Стек, который реально используем

Технология Зачем именно
React 18+ Suspense, useTransition — UI не блокируется при тяжёлых обновлениях каталога
TypeScript Типизация ответов API Битрикса — IBlockElement, BasketItem, Order. Без этого рефакторинг — русская рулетка
Vite HMR за 50 мс против 3–5 с у webpack. На проекте с 200 компонентами разница колоссальная
React Query useQuery(['catalog', sectionId]) — автоматический кэш, ревалидация, retry при 503 от перегруженного Битрикса
React Hook Form + Zod Оформление заказа: 15–20 полей, условная валидация (юрлицо — одни поля, физлицо — другие). RHF не ререндерит форму при каждом нажатии клавиши
Tailwind CSS Утилитарные классы — не боремся с каскадом из template_styles.css Битрикса
Radix UI / Shadcn Доступные примитивы с ARIA из коробки

Как собираем компоненты и типизируем данные

Каждый проект начинается с дизайн-системы — иначе к третьему месяцу три разработчика напишут три разных компонента кнопки. Типографика, цвета, отступы — через CSS-переменные и Tailwind-конфиг. Формы: инпуты с масками (телефон, ИНН), селекты с поиском, загрузка файлов с превью и валидацией MIME. Карточка товара — отдельная история: цена с учётом скидок из CCatalogProduct::GetOptimalPrice(), лейблы «Хит»/«Новинка» из свойств инфоблока, кнопка «В корзину» с состояниями loading/success/error. Таблицы с виртуализацией (react-window) для прайсов на 5000+ строк.

Типизируем всё, что приходит из Битрикса. REST API возвращает string там, где ожидаешь number, "Y"/"N" вместо boolean, и null вместо пустого массива. Zod-схема на входе парсит и трансформирует — компоненты получают нормальные типы.

// Реальный тип ответа CIBlockElement через REST — сюрпризы повсюду
interface BitrixProduct {
  ID: string;          // да, string, не number
  ACTIVE: "Y" | "N";  // не boolean
  PRICE: string;       // тоже string
  QUANTITY: string;    // и это string
}

Производительность и интеграция с API

Агрегирующие эндпоинты — база. Один ajax.php или кастомный контроллер на \Bitrix\Main\Engine\Controller собирает данные каталога, фильтров, корзины и пользователя за один запрос. React Query кэширует ответ, и повторный заход отдаёт из кэша с staleTime — загрузка сокращается на 60% уже на второй загрузке.

Как React улучшает Core Web Vitals

  • LCP < 2,5 с — lazy loading изображений через loading="lazy", критический CSS инлайном, прелоад LCP-картинки через <link rel="preload">
  • INP (заменил FID) < 200 мс — useTransition для тяжёлых фильтраций, useDeferredValue для поисковой строки
  • CLS < 0,1 — фиксированные размеры для скелетонов и изображений. Skeleton-плейсхолдеры вместо спиннеров

Виртуализация — не опция, а необходимость. Каталог с фасетным фильтром может вернуть 500 товаров на страницу. React-window или react-virtuoso рендерят только видимые 20–30 карточек — DOM не разбухает, скролл плавный.

REST и кастомные контроллеры

Из коробки через /rest/ доступны: инфоблоки (iblock.element.get), корзина (sale.basket.*), заказы (sale.order.*), пользователи (user.*). Для простого каталога достаточно. Но 70% задач требуют кастомных эндпоинтов. \Bitrix\Main\Engine\Controller — стандартный способ создавать свои эндпоинты в D7. Пишем контроллер, регистрируем через registerAction, получаем эндпоинт с CSRF-защитой и авторизацией из коробки.

  • Агрегация: один запрос = данные каталога + фильтры + корзина + юзер
  • WebSocket через Битрикс Push & Pull (CPullStack::AddByTag) — статус заказа обновляется в реальном времени, без поллинга
  • GraphQL-прослойка (webonyx/graphql-php) поверх D7 ORM — фронтенд запрашивает ровно те поля, которые нужны. Экономия трафика на мобильных до 40%

Проекты, сроки и что входит в работу

Типичные проекты, которые мы уже сделали

  • Интернет-магазин на 30 000 SKU с фасетным фильтром через \Bitrix\Iblock\PropertyIndex\Facet — SPA, React Query, виртуализация каталога
  • B2B-кабинет: персональные цены из CCatalogGroup, акты сверки из 1С через \Bitrix\Sale\Compatible\OrderCompatibility, история заказов с фильтрацией
  • Корпоративный портал: дашборды на Recharts, real-time через Push & Pull, интеграция с внутренними API через middleware
  • Маркетплейс: два React-приложения (покупатель + продавец), общий бэкенд, разделение данных через CUser::GetUserGroup()

Сроки и что входит в работу

Тип проекта Срок
Лендинг на React + Битрикс 2–4 недели
Интернет-магазин SPA 8–16 недель
Корпоративный портал 10–20 недель
Миграция фронтенда на React (поэтапно) 6–12 недель
  • Аудит текущего кода Битрикса и архитектуры
  • Проектирование API-слоя (REST / кастомные контроллеры / GraphQL)
  • Разработка дизайн-системы и компонентов
  • Настройка CI/CD (деплой React-бандла независимо от Битрикса)
  • Документация по эндпоинтам и типам (Swagger / TypeScript-типы)
  • Передача доступов к серверу, админке, репозиторию
  • Обучение контент-менеджеров работе через админку
  • Гарантийная поддержка 2 месяца после сдачи

Точные цифры — после разбора ТЗ. Оценка поэтапная, с фиксированным бюджетом на каждый спринт.

Как мы внедряем React на проекте

  1. Аудит существующего кода — находим узкие места: избыточные запросы, устаревшие шаблоны, неоптимальные кэши.
  2. Проектирование слоя API — определяем, какие эндпоинты нужны, проектируем агрегаторы или GraphQL.
  3. Разработка дизайн-системы — создаём компоненты (кнопки, формы, карточки) на основе макетов или рекомендаций UX.
  4. Интеграция с Битриксом через выбранный подход (SPA, SSR или Headless) — настраиваем рендеринг и маршрутизацию.
  5. Тестирование и деплой — запускаем пилотный раздел (например, каталог), измеряем Core Web Vitals, после утверждения расширяем.
Типичные ошибки при внедрении React в Битрикс
  • Игнорирование кэширования Битрикса — React Query может конфликтовать с композитным кэшем, если не настроить тегированное кэширование.
  • Отсутствие обработки ошибок от REST — при 500-й ошибке интерфейс может «зависнуть». Нужен глобальный обработчик с fallback UI.
  • Слишком много микро-компонентов — каждый маленький виджет дёргает API. Лучше агрегировать данные в одном запросе.
  • Неверный порядок гидратации при SSR — данные с сервера должны точно совпадать с начальным стейтом клиента, иначе ошибки React hydration.

Почему React, а не Vue или шаблоны Битрикса

  • Экосистема. Для любой UI-задачи есть готовая библиотека: таблицы, графики, drag-and-drop, виртуализация. Для Vue выбор уже, для шаблонов Битрикса — почти отсутствует.
  • Кадры. React-разработчика найти в три раза проще, чем Битрикс-шаблонщика, знающего D7 и template.php.
  • React Native. Компоненты переиспользуются в мобильном приложении — не один-в-один, но бизнес-логика и типы шарятся.
  • Поэтапное внедрение. Можно начать с одного раздела (/catalog/) на React, остальное оставить на шаблонах Битрикса. component_epilog.php подключает React-бандл, данные прокидываются через window.__INITIAL_DATA__.

1С-Битрикс + React — это не теоретическая архитектура, а рабочая связка, которая уже обслуживает каталоги с десятками тысяч SKU и B2B-кабинеты с тяжёлой бизнес-логикой. Подробнее о React и 1С-Битрикс. Получите консультацию — пришлём вам кейсы, похожие на ваш проект. Свяжитесь с нами, чтобы обсудить детали. Реализуем под ключ с гарантией результата.