Интеграция 1С-Битрикс с API поставщиков на ядре D7 под ключ | IT-Gig

Синхронизация Битрикс с API поставщиков: построение отказоустойчивого импорта каталога на D7

Автоматизация импорта номенклатуры от оптовых поставщиков через внешние API — критически важный узел для e-commerce проектов на платформе 1С-Битрикс. Типовые ошибки реализации интеграции (загрузка всего XML/JSON в память, поштучное обновление цен через старый класс CIBlockElement::SetPropertyValuesEx) приводят к падению веб-сервера по Time-out и блокировке таблиц СУБД. Использование объектного ядра Bitrix D7 и пакетной обработки данных позволяет построить отказоустойчивый коннектор для обработки каталогов любого объема.

1. Архитектура запросов к внешнему API через HttpClient

Для выполнения HTTP-запросов к серверу поставщика вместо расширения cURL следует использовать нативный класс BitrixMainWebHttpClient. Он корректно интегрируется со встроенными механизмами логирования и учитывает системные настройки прокси-серверов.

use BitrixMainWebHttpClient;
$client = new HttpClient([
    'socketTimeout' => 10,
    'streamTimeout' => 10
]);
$client->setHeader('Authorization', 'Bearer ' . $token);
$response = $client->get('https://vendor.com');
if ($client->getStatus() === 200) {
    $data = json_decode($response, true);
}

2. Потоковая обработка данных и предотвращение утечек RAM

При обработке тяжелых JSON-файлов от поставщика категорически запрещено загружать весь массив в оперативную память. Импорт необходимо разбивать на итерации (пакеты по 100-200 позиций). Для обновления торговых предложений и цен на ядре D7 используются скомпилированные сущности инфоблоков, которые работают напрямую с таблицами базы данных, минуя тяжелые события каталога.

use BitrixCatalogModelPrice;
function it_gig_update_product_price($productId, $priceValue) {
    $priceData = [
        'PRODUCT_ID' => $productId,
        'CATALOG_GROUP_ID' => 1,
        'PRICE' => $priceValue,
        'CURRENCY' => 'RUB'
    ];
    $dbPrice = Price::getList([
        'filter' => ['PRODUCT_ID' => $productId, 'CATALOG_GROUP_ID' => 1]
    ])->fetch();
    if ($dbPrice) {
        Price::update($dbPrice['ID'], $priceData);
    } else {
        Price::add($priceData);
    }
}

3. Защита от зависания скрипта: Перенос импорта на Агенты

Синхронизация цен и остатков должна происходить в фоновом режиме. Для этого логика парсинга заворачивается в нативный Агент Битрикса, выполняющийся по расписанию через системный демон CRON. Выполнение агентов на хитах пользователей должно быть полностью отключено в настройках главного модуля для исключения просадок скорости загрузки фронтенда.

4. Контроль целостности данных и логирование ошибок обмена

Любые сетевые сбои на стороне поставщика или некорректные типы данных в JSON (например, пустая строка вместо цены) должны перехватываться конструкцией try/catch. Запись логов производится в изолированный файл внутри папки темы или через стандартный класс логгера Битрикс, что позволяет оперативно выявлять изменения в структуре API поставщика без остановки работы интернет-магазина.

Теги:

[wp_chatgpt_assistant]
Скопировано!