Автоматизация импорта номенклатуры от оптовых поставщиков через внешние API — критически важный узел для e-commerce проектов на платформе 1С-Битрикс. Типовые ошибки реализации интеграции (загрузка всего XML/JSON в память, поштучное обновление цен через старый класс CIBlockElement::SetPropertyValuesEx) приводят к падению веб-сервера по Time-out и блокировке таблиц СУБД. Использование объектного ядра Bitrix D7 и пакетной обработки данных позволяет построить отказоустойчивый коннектор для обработки каталогов любого объема.
Для выполнения 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);
}
При обработке тяжелых 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);
}
}
Синхронизация цен и остатков должна происходить в фоновом режиме. Для этого логика парсинга заворачивается в нативный Агент Битрикса, выполняющийся по расписанию через системный демон CRON. Выполнение агентов на хитах пользователей должно быть полностью отключено в настройках главного модуля для исключения просадок скорости загрузки фронтенда.
Любые сетевые сбои на стороне поставщика или некорректные типы данных в JSON (например, пустая строка вместо цены) должны перехватываться конструкцией try/catch. Запись логов производится в изолированный файл внутри папки темы или через стандартный класс логгера Битрикс, что позволяет оперативно выявлять изменения в структуре API поставщика без остановки работы интернет-магазина.