Разработка кастомных AJAX-обработчиков 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка кастомных AJAX-обработчиков 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • 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
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Разработка кастомных AJAX-обработчиков 1С-Битрикс

Есть два сценария, когда нужны именно кастомные AJAX-обработчики, а не стандартные контроллеры D7. Первый — интеграция со старым кодом, который ещё не переведён на D7, и нужно дать ему AJAX-интерфейс без рефакторинга. Второй — высоконагруженные эндпоинты, где важен полный контроль над каждой миллисекундой: минимум инициализаций ядра, прямые запросы к БД, максимальная скорость ответа.

Точечная инициализация ядра Битрикс

Стандартный header.php инициализирует весь сайт — модули, сессию, права, шаблоны. Для AJAX-эндпоинта всё это — лишний overhead. Кастомный обработчик инициализирует только необходимое:

<?php
// /local/ajax/catalog-prices.php

define('NO_KEEP_STATISTIC', true);   // не пишем статистику
define('NO_AGENT_STATISTIC', true);  // не запускаем агентов
define('DisableEventsCheck', true);  // пропускаем часть инициализации

require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';

// Только необходимые модули
\Bitrix\Main\Loader::includeModule('catalog');
\Bitrix\Main\Loader::includeModule('sale');

Такой подход сокращает время инициализации с 50–80 мс до 10–15 мс на холодном старте.

Детально: структура кастомного обработчика

Кастомный обработчик — это обычный PHP-файл с явной структурой: проверка метода, CSRF, авторизация, роутинг действий, формирование ответа:

// Проверка метода
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    die(json_encode(['error' => 'Method Not Allowed']));
}

// CSRF-проверка
if (!check_bitrix_sessid()) {
    http_response_code(403);
    die(json_encode(['error' => 'CSRF check failed']));
}

// Авторизация
global $USER;
if (!$USER->IsAuthorized()) {
    http_response_code(401);
    die(json_encode(['error' => 'Unauthorized']));
}

// Роутинг
$action = $_POST['action'] ?? '';
$result = match($action) {
    'get_price'    => getPriceAction((int)($_POST['product_id'] ?? 0)),
    'check_stock'  => checkStockAction((int)($_POST['product_id'] ?? 0)),
    default        => ['error' => 'Unknown action'],
};

header('Content-Type: application/json; charset=utf-8');
echo json_encode($result, JSON_UNESCAPED_UNICODE);

Этот паттерн — с явным match по действию — предпочтительнее чем eval или call_user_func по пользовательскому вводу.

Безопасность обработчика

Валидация входных данных. Каждый параметр проходит явную типизацию и проверку диапазона:

function getPriceAction(int $productId): array {
    if ($productId <= 0) {
        return ['error' => 'Invalid product ID'];
    }
    // Проверяем доступ к товару для текущего пользователя
    if (!\CIBlockElement::GetPermission($productId) >= 'R') {
        return ['error' => 'Access denied'];
    }
    // ...
}

Rate limiting. Для публичных эндпоинтов (без авторизации) обязательна защита от злоупотреблений: не более N запросов с одного IP за M секунд. Реализуется через APC / APCu или Redis как быстрое хранилище счётчиков.

Логирование ошибок. PHP-исключения внутри обработчика не должны выводиться в HTTP-ответ — только в лог. Оборачиваем логику в try/catch с записью в \Bitrix\Main\Diag\Debug::writeToFile.

Кеширование ответов

Для данных, которые редко меняются (например, характеристики товара), ответ кешируется:

$cacheManager = \Bitrix\Main\Application::getInstance()->getManagedCache();
$cacheKey = "product_attrs_{$productId}";

if (!$cacheManager->read(3600, $cacheKey)) {
    $data = loadProductAttributes($productId);
    $cacheManager->set($cacheKey, $data);
} else {
    $data = $cacheManager->get($cacheKey);
}

Управляемый кеш Битрикс (getManagedCache) работает с тегированным сбросом — при изменении товара тег сбрасывается автоматически.

Когда выбрать кастомный обработчик vs контроллер D7

Критерий Кастомный обработчик Контроллер D7
Максимальная скорость Лучше Хуже (больше инициализации)
Структура кода Произвольная Стандартизованная
Тестируемость Сложнее Лучше
Поддержка новым разработчиком Сложнее Проще
Совместимость со старым кодом Лучше Требует рефакторинга

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

Масштаб Состав Срок
Базовый 5–10 эндпоинтов + CSRF + базовое кеширование 1–2 недели
Средний + rate limiting + детальное логирование + тесты 2–4 недели
Расширенный + гибридный подход (часть на D7, часть кастомные) + мониторинг 4–6 недель

Для новых проектов рекомендуем начинать с контроллеров D7 и переходить на кастомные обработчики только для конкретных эндпоинтов, где производительность критична и подтверждена профилировщиком.