Рассмотрим специфику работы с API платформы ABCP при необходимости выгрузить номенклатуру из 1С на сайт. В некоторых CMS выгрузка справочника номенклатуры разделена на передачу структуры каталога с карточками товаров и загрузку цен с остатками. Однако в архитектуре ABCP каталог и прайс-лист представляют собой единую сущность.
Отдельного метода API для поштучного создания или обновления карточек товаров на стороне ABCP нет. Загрузка товаров, их наименований, брендов, артикулов, характеристик, цен и остатков выполняется единым массивом путем обновления прайс-листа (метод cp/distributor/pricelistUpdate). В данном случае собственный справочник номенклатуры компании передается как прайс-лист, в котором владельцем (дистрибьютором) выступает само предприятие.
Перед тем как отправлять файл из 1С через API, разберем порядок подготовки профиля импорта на стороне интернет-магазина:
без предварительной настройки профиля импорта в панели ABCP сервер не сможет распарсить передаваемый из 1С файл прайс-листа.
Проанализируем параметры, которые необходимо передавать при каждом обращении к API администратора ABCP:
userlogin — логин администратора API.userpsw — пароль администратора в формате MD5-хэша.distributorId — идентификатор поставщика в системе ABCP.Разберем особенности передачи файла с помощью POST-запроса со спецификацией multipart/form-data.
При использовании платформ 1С v8.3 (начиная с версий 8.3.9 и 8.3.10) работа с HTTP-запросами существенно упрощена. Наличие объектов ЧтениеJSON, ЗаписьJSON, ПотокВПамяти и ЗаписьДанных позволяет собирать составные HTTP-запросы прямо в оперативной памяти без сохранения промежуточных файлов на диск.
В платформе 1С v8.2 и ранних версиях 8.3 встроенных средств для автоматического формирования multipart/form-data нет. Посмотрим на основные способы решения этой задачи:
boundary) записываются во временные текстовые файлы, после чего объединяются с файлом прайс-листа с помощью метода ОбъединитьФайлы(). Это исключает искажение бинарных данных при передаче.ЗапуститьПриложение(). cURL автоматически формирует корректный POST-запрос с ключом -F.FTPСоединение, что позволяет обойтись без сложного ручного формирования HTTP-запросов.Выясним структуру составного запроса при передаче файла:
// Пример заголовка Content-Type
Content-Type: multipart/form-data; boundary=---------------------------123456789
// Пример структуры блока файла в теле запроса
-----------------------------123456789
Content-Disposition: form-data; name="uploadFile"; filename="pricelist.xlsx"
Content-Type: application/octet-stream
[Бинарные данные файла]
-----------------------------123456789--
Если перед вами стоит задача реализовать полный цикл обмена (включая загрузку заказов, статусов и контрагентов), стоит рассмотреть готовые специализированные модули интеграции (например, решения от компании Ниракс) или внешние обработки, где механизмы формирования HTTP-запросов и обработки ответов API уже реализованы.