Для автоматизации загрузки товаров в покупки из вашей учетной системы на сайт 100sp можно использовать специальное API.
Вводная информация про API 100сп и автоматизацию синхронизации товаров и остатков https://youtu.be/VAIfN_4QsS8
Интерфейс импорта находится по адресу https://www.100sp.ru/org/purchase/importExport/apiImport и принимает POST-запрос с типом содержимого multipart/form-data либо json. Запрос должен содержать следующие поля:
Параметр | Тип | Возможные значения | Описание |
purchase | INT | - | Идентификатор покупки для импорта |
file | BLOB | - | Файл в формате csv, аналогичный по структуре файлам, загружаемым через форму импорта на странице покупки. |
duplicate | STRING | articul - по артикулам articul_and_sizes - по артикулам и размерам | Способ определения соответствия товаров в покупке и в файле. |
mergeDuplicated | ARRAY<STRING> | articul - по артикулам | Объединение товаров в файле импорта. Если у вас в файле несколько строк соответствуют одному товару, используйте этот параметр, чтобы объединить размеры и остатки в один товар. |
overwrite | ARRAY<STRING>|STRING | Как массив: name - наименование price - цена recommendedPrice - рекомендованная розничная цена notDiscountedPrice - цена без скидки providerPrice - цена поставщика description - описание comment - комментарий source - источник товара (ссылка на поставщика) brandTag - бренд (наименование или id) barcode - штрихкод storageLocation - место хранения meta - метаданные товара (SKU и т.д.) measures - ширина, высота, глубина товара weight - вес Как строка: nothing - ничего | Параметры, которые нужно обновить у существующих товаров. Если передать overwrite = 'nothing', параметры товаров будут оставлены без изменений. |
photos | STRING | nothing - ничего не делать all - загрузить все фото new - загрузить фото только для новых товаров | Способ загрузки фотографий |
missing | STRING | nothing - ничего не делать hide - скрыть delete - удалить drop_remains - обнулить остатки | Что сделать с товарами, которые есть на сайте 100sp в покупке, но отсутствуют в импортируемом файле. |
hidden | STRING | leave - ничего не делать publish - опубликовать | Опубликовать скрытые товары или оставить без изменений. |
remains | STRING | nothing - ничего не делать overwrite - перезаписать add - добавить к существующим | Способ обновления остатков. |
collections | STRING | update - обновить все leave - оставить как есть | Способ размещения товаров в коллекциях. |
collectionIds | ARRAY<INT>|STRING | Массив идентификаторов INT[] all - обновить все коллекции | Идентификаторы коллекций, который нужно обновить при импорте. |
delimiter | STRING | default - по-умолчанию , - запятая ; - точка с запятой | Разделитель колонок в csv-файле. |
STRING | - | E-mail, на который нужно выслать отчет по импорту. |
Более подробное описание назначения каждого параметра находится на странице импорта покупок.
Загрузка товаров идет синхронно с выполнением запроса, по окончании обработки выводится отчет по внесенным изменениям в виде json-объекта со следующими полями:
result | bool | Успех/неудача импорта. |
messages | string[] | Список сообщений, аналогично вкладке "Предупреждения". |
errors | string[] | Список ошибок. |
data | object | Объект с данными отчета по импорту. |
data.asyncJobId | int | Идентификатор процесса загрузки изображений, если он был запущен в ходе импорта. |
data.changes | object[] | Полный перечень примененных изменений. |
data.changes[].goodId | int | Идентификатор товара. |
data.changes[].param | string | Измененный параметр. |
data.changes[].oldValue | mixed | Старое значение параметра. |
data.changes[].newValue | mixed | Новое значение параметра. |
data.changes[].new | bool | True, если товар создан в ходе импорта, иначе false. |
Пример скрипта на PHP, загружающего новые товары в покупку:
<?php
// создание нового ресурса cURL
$ch = curl_init();
$purchaseId = 153970;
$filePath = './import.csv';
$form = [
'purchase' => $purchaseId,
'duplicate' => 'articul',
'overwrite[name]' => 'name',
'overwrite[price]' => 'price',
'overwrite[description]' => 'description',
'overwrite[comment]' => 'comment',
'overwrite[weight]' => 'weight',
'photos' => 'all',
'missing' => 'nothing',
'remains' => 'add',
'collections' => 'update',
'delimiter' => ',',
'file' => new \CurlFile($filePath, 'text/csv', 'import.csv'),
];
// установка URL и других необходимых параметров
curl_setopt($ch, CURLOPT_URL, "https://www.100sp.ru/org/purchase/importExport/apiImport");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'x-api-key: YOUR_API_TOKEN',
'Content-Type: multipart/form-data',
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $form);
// отправка запроса
$result = curl_exec($ch);
if ($errno = curl_errno($ch)) {
throw new Exception('Ошибка ' . $errno . ': ' . curl_error($ch));
}
// завершение сеанса и освобождение ресурсов
curl_close($ch);
var_export(json_decode($result, true));