Pricelist. Цены на товары
Методы для работы с прайс-листами: получение цен прайс-листа, создание и изменение прайс-листов, установка цен товарам по одному и пачкой, назначение прайс-листа точке продаж и получение прайс-листов точки.
Как получить ключ, как формируются запросы и какие бывают ответы и ошибки — в статье Общие сведения. Здесь описаны только особенности методов раздела pricelist.
Методы
| Метод | Адрес | Что делает |
|---|---|---|
| Получить цены | /api/pricelist | Возвращает цены товаров прайс-листа |
| Создать или изменить прайс-лист | /api/pricelist/update | Обновляет заголовок прайс-листа или создаёт новый |
| Установить цену товара | /api/pricelist/updateItem | Задаёт цену одного товара в прайс-листе |
| Массовая установка цен | /api/pricelist/batchUpdate | Задаёт цены многим товарам одним XML |
| Назначить точке продаж | /api/pricelist/assign | Делает прайс-лист основным для точки продаж |
| Прайс-листы точки продаж | /api/pricelist/listForWarehouse | Возвращает прайс-листы точки и основной |
Где передавать параметры. Ключ apikey и формат format принимаются и в адресной строке, и в теле POST-запроса. Параметры, по которым ищется прайс-лист, товар или точка продаж — id, external_id, name, item_id, item_ext_id в методе получения, id, external_id, item_id, item_ext_id в updateItem, id, external_id, warehouse_id, warehouse_ext_id в assign, warehouse_id, warehouse_external_id в listForWarehouse — читаются только из адресной строки (GET). Остальные параметры можно передавать и в адресной строке, и в теле POST. Значения с кириллицей и пробелами кодируйте.
Получение цен
GET https://[компания].myvirtualpos.ru/api/pricelist?apikey=MySecret&id=1&item_id=52
Параметры запроса
| id | Число. Ид прайс-листа. Нужно указать id, external_id или name. Только GET |
| external_id | Строка. Код прайс-листа во внешней системе. Только GET |
| name | Строка. Название прайс-листа. Только GET |
| item_id | Число. Ид товара: вернётся цена только этого товара. Только GET |
| item_ext_id | Строка. Код товара во внешней системе. Используется, если не указан item_id. Только GET |
| item_article | Строка. Артикул: вернутся цены товаров с таким артикулом. Используется, если не указаны item_id и item_ext_id |
| fields | Дополнительные поля товара через двоеточие, например item_name:item_ean13. Допустимые значения перечислены ниже |
| format | json (по умолчанию) или xml |
Прайс-лист ищется по id, затем по external_id, затем по name.
Без фильтра по товару метод возвращает весь прайс-лист. В нём могут быть десятки тысяч строк, и ответ получается большим. Если нужны цены отдельных товаров, задавайте item_id или item_ext_id. Постраничной выдачи у метода нет.
Дополнительные поля (fields). Через двоеточие можно перечислить любые поля вида item_<поле товара>, например item_name, item_article, item_external_id, item_type, item_volume, item_vat_percent, item_manufacturer_id, а также:
| item_ean13 | Штрихкоды товара через запятую |
| item_manufacturer_name | Название производителя товара |
Если указано неизвестное поле, метод вернёт ошибку со списком допустимых полей.
Структура ответа
| success | 1 — данные получены |
| type | Тип данных, всегда pricelistLines |
| pricelist_id | Число. Ид прайс-листа |
| count | Количество строк в ответе |
| pricelines | Список цен. Каждая обёрнута в объект priceline |
Поля строки прайс-листа
| item_id | Число. Ид товара |
| price | Строка. Цена товара в прайс-листе |
| item_… | Дополнительные поля товара, если они запрошены в fields |
Пример ответа
{
"success": 1,
"type": "pricelistLines",
"pricelist_id": 1,
"count": 1,
"pricelines": [
{
"priceline": {
"item_id": 52,
"price": "929.00",
"item_name": "Шампунь для волос",
"item_ean13": "4627087168773"
}
}
]
}
Тот же ответ при format=xml:
<?xml version="1.0" encoding="UTF-8"?> <root> <success>1</success> <type>pricelistLines</type> <pricelist_id>1</pricelist_id> <count>1</count> <pricelines> <priceline> <item_id>52</item_id> <price>929.00</price> </priceline> </pricelines> </root>
Примеры запросов
| Задача | Запрос |
|---|---|
| Цена товара по ид | /api/pricelist?apikey=MySecret&id=1&item_id=52 |
| Цена товара по коду товара и прайс-листа из 1С | /api/pricelist?apikey=MySecret&external_id=PL-RETAIL&item_ext_id=SKU-52 |
| Цена с названием и штрихкодами | /api/pricelist?apikey=MySecret&id=1&item_id=52&fields=item_name:item_ean13 |
| Цены товаров по артикулу | /api/pricelist?apikey=MySecret&id=1&item_article=SH-1000 |
Создание и изменение прайс-листа
POST https://[компания].myvirtualpos.ru/api/pricelist/update?apikey=MySecret&external_id=PL-RETAIL&create_if_not_exist=1 name=Розничный&description=Основные цены
Прайс-лист ищется по id, а если он не указан — по external_id. Метод меняет заголовок прайс-листа, но не цены. Изменяются только переданные параметры.
Параметры
| id | Число. Ид изменяемого прайс-листа |
| external_id | Строка. Код прайс-листа во внешней системе. Если id не указан, по нему ищется прайс-лист; одновременно это поле прайс-листа |
| create_if_not_exist | 1 — создать прайс-лист, если он не найден |
| name | Строка, до 255 символов. Название; должно быть уникальным и не содержать ::. Обязательно при создании |
| description | Строка, до 1023 символов. Описание |
Ответ
{"success":1,"id":"11","isnew":"1"}
| success | 1 — прайс-лист сохранён |
| id | Ид прайс-листа. При создании приходит строкой, при изменении — числом |
| isnew | «1» — создан, «0» — изменён существующий |
Установка цены товара
GET https://[компания].myvirtualpos.ru/api/pricelist/updateItem?apikey=MySecret&external_id=PL-RETAIL&item_id=52&price=150.5
| id | Число. Ид прайс-листа. Нужно указать id или external_id. Только GET |
| external_id | Строка. Код прайс-листа во внешней системе. Только GET |
| item_id | Число. Ид товара. Нужно указать item_id или item_ext_id. Только GET |
| item_ext_id | Строка. Код товара во внешней системе. Только GET |
| price | Число. Новая цена. Обязательно. Нечисловое значение отклоняется |
Если товара в прайс-листе ещё нет, строка создаётся, иначе цена меняется.
{"success":1,"line_id":"77028","isnew":"1","price_before":null}
| success | 1 — цена сохранена |
| line_id | Ид строки прайс-листа. При создании приходит строкой, при изменении — числом |
| isnew | «1» — строка создана, «0» — изменена существующая |
| price_before | Строка. Цена до изменения; null, если строка создана |
Массовая установка цен
POST https://[компания].myvirtualpos.ru/api/pricelist/batchUpdate?apikey=MySecret batch=<pricelist><external_id>PL-RETAIL</external_id><items>...</items></pricelist>
Параметр batch — XML. Корневой элемент содержит прайс-лист и его строки:
<pricelist> <external_id>PL-RETAIL</external_id> <items> <item> <external_id>SKU-52</external_id> <price>200.50</price> </item> <item> <id>53</id> <price>7</price> </item> </items> </pricelist>
| id, external_id | В корне: ид или код прайс-листа. Нужен один из них |
| items/item/id, items/item/external_id | Ид или код товара. Нужен один из них |
| items/item/price | Новая цена. Если у товара уже была цена, прежняя сохраняется как старая цена |
Все строки сохраняются в одной транзакции: если хотя бы один товар не найден или цена не сохранена, не сохраняется ничего. Успешный ответ: {«success»:1,«info»:«Saved price data»}.
Назначение прайс-листа точке продаж
GET https://[компания].myvirtualpos.ru/api/pricelist/assign?apikey=MySecret&external_id=PL-RETAIL&warehouse_id=6
| id | Число. Ид прайс-листа. Нужно указать id или external_id. Только GET |
| external_id | Строка. Код прайс-листа во внешней системе. Только GET |
| warehouse_id | Число. Ид точки продаж. Нужно указать warehouse_id или warehouse_ext_id. Только GET |
| warehouse_ext_id | Строка. Код точки продаж во внешней системе. Только GET |
Прайс-лист становится основным для точки продаж, прежний основной прайс-лист переводится в архив. Параметр main не влияет на результат: прайс-лист всегда назначается основным. Ответ: {«success»:1,«warehouse_id»:6,«price_id»:11}.
Прайс-листы точки продаж
GET https://[компания].myvirtualpos.ru/api/pricelist/listForWarehouse?apikey=MySecret&warehouse_id=6
| warehouse_id | Число. Ид точки продаж. Нужно указать warehouse_id или warehouse_external_id. Только GET |
| warehouse_external_id | Строка. Код точки продаж во внешней системе. Только GET |
{
"success": 1,
"warehouse_id": 6,
"warehouse_external_id": "WH-6",
"default_pricelist_id": 1,
"default_pricelist_external_id": "PL-RETAIL",
"pricelist_ids": "1,2",
"pricelist_external_ids": "PL-RETAIL,PL-WHOLESALE"
}
| warehouse_id, warehouse_external_id | Ид и код точки продаж |
| default_pricelist_id, default_pricelist_external_id | Ид и код основного прайс-листа точки |
| pricelist_ids | Строка. Ид всех прайс-листов, доступных точке, через запятую |
| pricelist_external_ids | Строка. Коды тех же прайс-листов через запятую в том же порядке. Для прайс-листов без кода — пустое значение |
Ошибки
Ошибка авторизации и общие ошибки описаны в статье Общие сведения. Ошибки приходят с кодом HTTP 200 и success равным 0:
| Сообщение | Метод | Причина | Что делать |
|---|---|---|---|
| You have to specify pricelist using [id], [external_id] or [name] parameters | получение | Не указан прайс-лист | Передайте один из параметров |
| Pricelist not found | получение | Прайс-лист не найден | Проверьте ид, код или название |
| Item not found / Items not found | получение | Товар или артикул не найдены | Проверьте item_id, item_ext_id, item_article |
| Field '…' not found. Use combination of: […] | получение | Неизвестное поле в fields | Используйте поля из списка в сообщении |
| You have to specify [id] or [external_id] to update record | update | Нет идентификатора и create_if_not_exist | Передайте идентификатор или create_if_not_exist=1 |
| Record not found | update | Прайс-лист не найден | Проверьте идентификатор |
| Data validation failed. … | update, updateItem | Название пустое, уже занято или содержит ::; цена не задана | Исправьте значения |
| Cannot save data. … | update, updateItem | Ошибка сохранения | Текст после точки поясняет причину |
| You have to specify pricelist`s [id] or [external_id] | updateItem, assign | Нет идентификатора прайс-листа | Передайте id или external_id |
| You have to specify item`s [id] or [external_id] | updateItem | Нет идентификатора товара | Передайте item_id или item_ext_id |
| You have to specify [price] value | updateItem | Не передана цена | Передайте price |
| Pricelist not found. id=…, external_id=… | updateItem, assign | Прайс-лист не найден | Проверьте идентификатор |
| Item not found. id=…, external_id=… | updateItem | Товар не найден | Проверьте идентификатор |
| You have to specify warehouse`s [id] or [external_id] | assign | Нет идентификатора точки продаж | Передайте warehouse_id или warehouse_ext_id |
| Warehouse not found. id=…, external_id=… | assign, listForWarehouse | Точка продаж не найдена | Проверьте идентификатор |
| Internal error. … | batchUpdate | Не найден прайс-лист или товар, некорректный XML; все изменения отменены | Текст после точки поясняет причину |