Attribute. Характеристики
Методы для работы с характеристиками (атрибутами) товарных остатков: размер, объём, цвет и подобное. Характеристика принадлежит категории товаров и имеет тип значения. Методы позволяют получить список характеристик, создать, изменить и удалить их.
Как получить ключ, как формируются запросы и какие бывают ответы и ошибки — в статье Общие сведения. Здесь описаны только особенности методов раздела attribute. Категории описаны в статье Category. Товарные категории.
Методы
| Метод | Адрес | Что делает |
|---|---|---|
| Получить характеристики | /api/attribute | Возвращает характеристики с фильтром |
| Создать или изменить | /api/attribute/update | Обновляет характеристику или создаёт новую |
| Массовое обновление | /api/attribute/batchUpdate | Создаёт и обновляет характеристики из XML |
| Удалить | /api/attribute/delete | Удаляет характеристику |
Где передавать параметры. Ключ apikey и формат format принимаются и в адресной строке, и в теле POST-запроса. Остальные параметры можно передавать и в адресной строке, и в теле POST. Данные характеристики передаются массивом attribute[…], фильтры — массивом filters[…]. Значения с кириллицей и пробелами кодируйте, квадратные скобки в названиях параметров передаются как %5B и %5D.
Формат ответа отличается от других методов. Метод получения возвращает сразу список характеристик, без обёртки success, type и count.
Типы значений
Тип задаётся полем data_type:
| Значение | Тип |
|---|---|
string | Строка |
int | Целое число |
decimal | Число с десятичной точкой |
Получение характеристик
GET https://[компания].myvirtualpos.ru/api/attribute?apikey=MySecret&filters%5Bcategory_id%5D=11
Параметры запроса
| filters[…] | Фильтры по полям характеристики: filters[id], filters[name], filters[category_id], filters[data_type], filters[external_id]. Условия объединяются по «и». Неизвестное поле в фильтре даёт ошибку |
| format | json (по умолчанию) или xml |
Без фильтров возвращаются все характеристики одним ответом.
Поля характеристики
Ответ — список объектов attribute:
| id | Число. Ид характеристики |
| name | Строка. Название |
| category_id | Число. Ид категории, к которой относится характеристика |
| data_type | Строка. Тип значения: string, int или decimal |
| external_id | Строка. Код характеристики во внешней системе |
Пример ответа
[
{ "attribute": { "id": 1, "name": "Размер", "category_id": 11, "data_type": "string", "external_id": "ATT-SIZE" } },
{ "attribute": { "id": 2, "name": "Объём", "category_id": 13, "data_type": "decimal", "external_id": null } }
]
Тот же ответ при format=xml:
<?xml version="1.0" encoding="UTF-8"?> <root> <attribute> <id>1</id> <name>Размер</name> <category_id>11</category_id> <data_type>string</data_type> <external_id>ATT-SIZE</external_id> </attribute> </root>
Создание и изменение
POST https://[компания].myvirtualpos.ru/api/attribute/update?apikey=MySecret attribute[name]=Размер&attribute[data_type]=string&attribute[category_id]=11
Без id и external_id создаётся новая характеристика. С id или external_id изменяется существующая.
Параметры
| id | Число. Ид изменяемой характеристики. Приоритетнее external_id |
| external_id | Строка. Код характеристики во внешней системе, по которому ищется изменяемая характеристика |
| attribute[name] | Строка, до 255 символов. Название. Обязательно. Должно быть уникальным в пределах категории |
| attribute[data_type] | string, int или decimal. Обязательно |
| attribute[category_id] | Число. Ид категории. Обязательно при создании |
| attribute[category_external_id] | Строка. Код категории во внешней системе. Заменяет category_id, если категория с таким кодом найдена; если не найдена — ошибка |
Ответ: {«success»:1,«id»:1}. id — ид характеристики.
Код external_id через update задать нельзя. Метод его не записывает: у созданной характеристики код остаётся пустым. Чтобы создавать характеристики с кодом, используйте batchUpdate.
Подробности ошибок не выдаются. При любой ошибке (пустые обязательные поля, неверный тип, несуществующая категория, повтор названия в категории) придёт общее сообщение Could not save attribute. See error log for details.
Массовое обновление
POST https://[компания].myvirtualpos.ru/api/attribute/batchUpdate?apikey=MySecret&create_if_not_exists=1 batch=<root><attribute>…</attribute></root>
Параметр batch — XML с характеристиками. Характеристика ищется по id, а если его нет — по external_id.
<root> <attribute> <external_id>ATT-SIZE</external_id> <name>Размер</name> <data_type>string</data_type> <category_external_id>CAT-CLOTHES</category_external_id> </attribute> </root>
| create_if_not_exists | 1 — создавать характеристики, которые не найдены. Без него будут только обновляться существующие. Внимание: в названии параметра exists |
| attribute/id | Ид характеристики |
| attribute/external_id | Код характеристики. Записывается только при создании |
| attribute/name | Название. Обновляется и у существующих характеристик |
| attribute/data_type | Тип значения. Задаётся только при создании; у существующей характеристики не меняется |
| attribute/category_id, attribute/category_external_id | Ид или код категории. Задаётся только при создании; category_external_id приоритетнее |
Ответ: {«success»:1,«errors»:«…»}. В поле errors — тексты ошибок по характеристикам, которые обработать не удалось, разделённые переводом строки; пустая строка — ошибок нет. Успешные записи сохраняются, ошибочные пропускаются.
Удаление
GET https://[компания].myvirtualpos.ru/api/attribute/delete?apikey=MySecret&id=1
| id | Число. Ид удаляемой характеристики |
Ответ: {«success»:1}. Метод отвечает успехом, даже если характеристики с таким ид нет.
Примеры запросов
| Задача | Запрос |
|---|---|
| Все характеристики | /api/attribute?apikey=MySecret |
| Характеристики категории | /api/attribute?apikey=MySecret&filters%5Bcategory_id%5D=11 |
| Характеристика по названию | /api/attribute?apikey=MySecret&filters%5Bname%5D=Size |
| Создать характеристику | POST /api/attribute/update?apikey=MySecret, тело: attribute%5Bname%5D=Size&attribute%5Bdata_type%5D=string&attribute%5Bcategory_id%5D=11 |
| Изменить название | POST /api/attribute/update?apikey=MySecret&id=1, тело: attribute%5Bname%5D=Size2 |
| Удалить | /api/attribute/delete?apikey=MySecret&id=1 |
Ошибки
Ошибка авторизации и общие ошибки описаны в статье Общие сведения. Ошибки приходят с кодом HTTP 200 и success равным 0:
| Сообщение | Метод | Причина | Что делать |
|---|---|---|---|
| Invalid filters. Allowed: […] | получение | В filters указано неизвестное поле | Используйте поля из списка в сообщении |
| Invalid attribute data | update | Не передан массив attribute[…] | Передайте данные как attribute[name]=… |
| attribute not found | update | Характеристика с таким id или external_id не найдена | Проверьте идентификатор |
| Could not save attribute. See error log for details | update | Ошибка проверки или сохранения | Проверьте название, тип и категорию |
| Attribute does not exists | delete | Не указан id | Передайте id |
| No batch provided | batchUpdate | Не передан batch | Передайте XML в batch |
| Invalid batch format | batchUpdate | batch не является корректным XML | Проверьте XML |
Ошибки по отдельным характеристикам в batchUpdate приходят в поле errors успешного ответа: Could not find or create attribute … (не найдена, а create_if_not_exists не указан) и Could not save attribute … с причиной (например, не указан тип данных).