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

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Розробка кастомних AJAX-обробників 1С-Бітрікс
Середня
~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

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