Импорт покупки через API

Для автоматизации загрузки товаров в покупки из вашей учетной системы на сайт 100sp можно использовать специальное API.

Вводная информация про API 100сп и автоматизацию синхронизации товаров и остатков https://youtu.be/VAIfN_4QsS8

Интерфейс импорта находится по адресу https://www.100sp.ru/org/purchase/importExport/apiImport и принимает POST-запрос с типом содержимого multipart/form-data либо json. Запрос должен содержать следующие поля:

Параметр
ТипВозможные значения
Описание
purchaseINT-Идентификатор покупки для импорта
file
BLOB
-Файл в формате csv, аналогичный по структуре файлам, загружаемым через форму импорта на странице покупки.
duplicateSTRING
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
STRINGnothing - ничего не делать
all - загрузить все фото
new - загрузить фото только для новых товаров
Способ загрузки фотографий
missingSTRING
nothing - ничего не делать
hide - скрыть
delete - удалить
drop_remains - обнулить остатки
Что сделать с товарами, которые есть на сайте 100sp в покупке, но отсутствуют в импортируемом файле.
hiddenSTRINGleave - ничего не делать
publish - опубликовать
Опубликовать скрытые товары или оставить без изменений.
remainsSTRINGnothing - ничего не делать
overwrite - перезаписать
add - добавить к существующим
Способ обновления остатков.
collections
STRINGupdate - обновить все
leave - оставить как есть
Способ размещения товаров в коллекциях.
collectionIdsARRAY<INT>|STRINGМассив идентификаторов INT[]
all - обновить все коллекции
Идентификаторы коллекций, который нужно обновить при импорте.
delimiter
STRINGdefault - по-умолчанию
, - запятая
; - точка с запятой
Разделитель колонок в csv-файле.
emailSTRING-E-mail, на который нужно выслать отчет по импорту.


Более подробное описание назначения каждого параметра находится на странице импорта покупок.


Загрузка товаров идет синхронно с выполнением запроса, по окончании обработки выводится отчет по внесенным изменениям в виде json-объекта со следующими полями:

resultbool
Успех/неудача импорта.
messagesstring[]Список сообщений, аналогично вкладке "Предупреждения".
errors
string[]Список ошибок.
dataobjectОбъект с данными отчета по импорту.
data.asyncJobIdint
Идентификатор процесса загрузки изображений, если он был запущен в ходе импорта.
data.changesobject[]Полный перечень примененных изменений.
data.changes[].goodId
int
Идентификатор товара.
data.changes[].paramstringИзмененный параметр.
data.changes[].oldValuemixedСтарое значение параметра.
data.changes[].newValuemixedНовое значение параметра.
data.changes[].new
boolTrue, если товар создан в ходе импорта, иначе 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));