Warehouse. Точки продаж
Методы для работы со справочником точек продаж (магазинов и складов): получение списка, создание и изменение.
Как получить ключ, как формируются запросы и какие бывают ответы и ошибки — в статье Общие сведения. Здесь описаны только особенности методов раздела warehouse.
Методы
| Метод | Адрес | Что делает |
|---|---|---|
| Получить точки продаж | /api/warehouse | Возвращает одну или все точки продаж |
| Создать или изменить | /api/warehouse/update | Обновляет точку продаж или создаёт новую |
Удаления точек продаж через API нет.
Где передавать параметры. Ключ apikey и формат format принимаются и в адресной строке, и в теле POST-запроса. Параметры id и external_id в методе получения читаются только из адресной строки (GET). В методе update все параметры можно передавать и в адресной строке, и в теле POST. Значения с кириллицей, пробелами и знаками + кодируйте.
Получение точек продаж
GET https://[компания].myvirtualpos.ru/api/warehouse?apikey=MySecret&fields=organisation_name
Параметры запроса
| id | Число. Ид точки продаж. Только GET |
| external_id | Строка. Код точки продаж во внешней системе (например, в 1С). Только GET |
| fields | Дополнительные поля через двоеточие. Допустимое значение: organisation_name — название юридического лица точки продаж |
| format | json (по умолчанию) или xml |
Условия объединяются по «и». Без параметров возвращаются все точки продаж одним ответом. Если указано неизвестное поле в fields, метод вернёт ошибку со списком допустимых значений.
Структура ответа
| success | 1 — данные получены |
| type | Тип данных, всегда warehouse |
| count | Количество точек продаж в ответе |
| warehouses | Список точек продаж. Каждая обёрнута в объект warehouse |
Поля точки продаж
Пустые значения в JSON приходят как null, в XML — как пустой элемент.
Основное
| id | Число. Ид точки продаж |
| external_id | Строка. Код во внешней системе |
| number | Строка. Номер точки продаж |
| name | Строка. Название |
| active | Число. 1 — точка активна |
| address | Строка. Адрес |
| phone | Строка. Телефон |
| open_time, close_time | Строка. Время открытия и закрытия, формат чч:мм:сс |
| flag24hours | Число. 1 — работает круглосуточно |
| lat, lon | Строка. Широта и долгота |
| location_id | Число. Ид территории |
| location_name | Строка. Название территории |
| created_date, last_update_date | Строка. Дата и время создания и последнего изменения |
| created_by, last_update_by | Число. Ид пользователя, создавшего и изменившего запись |
Настройки
| minusale | Число. 1 — разрешена продажа в минус (при отсутствии остатка) |
| show_in_shop | Число. 1 — точка показывается в интернет-магазине и мобильном приложении |
| organisation_id | Число. Ид юридического лица |
| manager_user_id | Число. Ид ответственного менеджера |
| primary | Число. 1 — основная точка продаж |
| main_store_id | Число. Ид главного склада, к которому относится точка |
| headquerter_id | Число. Ид головной точки. Написание поля сохранено для совместимости |
| vat_mandatory_flag | Число. 1 — НДС обязателен |
| znak_branch_id | Строка. Идентификатор в системе маркировки |
| sbp_merchant_id | Строка. Идентификатор для платежей через СБП |
| attribute1 … attribute15 | Строка. Значения гибких полей |
| organisation_name | Строка. Название юридического лица, только при fields=organisation_name |
Пример ответа
{
"success": 1,
"type": "warehouse",
"count": 1,
"warehouses": [
{
"warehouse": {
"open_time": "10:00:00",
"close_time": "21:00:00",
"id": 6,
"number": "5",
"name": "Точка на Тверской",
"active": 1,
"address": "г. Москва, ул. Тверская, д. 3",
"phone": "+7 900 000-00-01",
"headquerter_id": 0,
"created_date": "2019-06-06 17:25:12",
"created_by": 3,
"last_update_date": "2026-09-01 10:34:46",
"last_update_by": 23,
"flag24hours": 0,
"lat": "55.76000000000000",
"lon": "37.61000000000000",
"minusale": 1,
"location_id": 8,
"external_id": "WH-6",
"show_in_shop": 1,
"organisation_id": 2,
"vat_mandatory_flag": 0,
"manager_user_id": 3,
"primary": 0,
"main_store_id": null,
"znak_branch_id": "",
"sbp_merchant_id": null,
"location_name": "Москва"
}
}
]
}
В примере опущены пустые гибкие поля attribute1…attribute15. Тот же ответ при format=xml (сокращённо):
<?xml version="1.0" encoding="UTF-8"?> <root> <success>1</success> <type>warehouse</type> <count>1</count> <warehouses> <warehouse> <open_time>10:00:00</open_time> <close_time>21:00:00</close_time> <id>6</id> <name>Точка на Тверской</name> <!-- остальные поля точки продаж --> <location_name>Москва</location_name> </warehouse> </warehouses> </root>
Если ничего не найдено, метод возвращает успешный ответ с count равным 0 и пустым списком.
Создание и изменение
POST https://[компания].myvirtualpos.ru/api/warehouse/update?apikey=MySecret&external_id=WH-6&create_if_not_exist=1 name=Точка на Тверской&address=г. Москва, ул. Тверская, д. 3&location_name=Москва
Точка продаж ищется по id, а если он не указан — по external_id. Если точка не найдена, а передан create_if_not_exist=1, создаётся новая. Изменяются только переданные параметры.
Параметры
| id | Число. Ид изменяемой точки продаж |
| external_id | Строка. Код точки продаж во внешней системе. Если id не указан, по нему ищется точка; одновременно это поле точки: при создании код сохраняется |
| create_if_not_exist | 1 — создать точку продаж, если она не найдена |
| name | Строка. Название. Обязательно при создании |
| address | Строка. Адрес. Обязателен при создании |
| phone | Строка. Телефон |
| open_time, close_time | Строка. Время открытия и закрытия, формат чч:мм:сс |
| flag24hours | 1 — работает круглосуточно, 0 — нет |
| lat, lon | Число. Широта и долгота |
| minusale | 1 — разрешить продажу в минус, 0 — запретить |
| location_id | Число. Ид территории; территория должна существовать |
| location_name | Строка. Название территории, используется, если не указан location_id. Если территории с таким названием нет, она создаётся |
| default_pricelist_id | Число. Ид прайс-листа, который становится основным для точки продаж. Прайс-лист должен существовать |
| attribute1 … attribute15 | Значения гибких полей |
Остальные поля точки продаж (например, active, organisation_id, show_in_shop) через API не меняются: настраивайте их в панели управления.
Территория новой точки. Если при создании не указаны ни location_id, ни location_name, точка привязывается к первой найденной территории. Для правильной привязки указывайте территорию явно. Если в системе нет ни одной территории и не указано название, метод вернёт ошибку.
Значения по умолчанию. Не переданные при создании lat, lon и minusale становятся равными 0.
Ответ
{"success":1,"id":"17","isnew":"1"}
| success | 1 — точка продаж сохранена |
| id | Ид точки продаж. При создании приходит строкой, при изменении — числом |
| isnew | «1» — создана, «0» — изменена существующая |
Примеры запросов
| Задача | Запрос |
|---|---|
| Все точки продаж | /api/warehouse?apikey=MySecret |
| Точка по ид с юридическим лицом | /api/warehouse?apikey=MySecret&id=6&fields=organisation_name |
| Точка по коду из 1С | /api/warehouse?apikey=MySecret&external_id=WH-6 |
| Создать точку | /api/warehouse/update?apikey=MySecret&create_if_not_exist=1&external_id=WH-7&name=Shop7&address=Moscow&location_id=8 |
| Изменить телефон | /api/warehouse/update?apikey=MySecret&id=6&phone=%2B79000000001 |
| Назначить основной прайс-лист | /api/warehouse/update?apikey=MySecret&id=6&default_pricelist_id=1 |
Ошибки
Ошибка авторизации и общие ошибки описаны в статье Общие сведения. Ошибки приходят с кодом HTTP 200 и success равным 0:
| Сообщение | Причина | Что делать |
|---|---|---|
| You have to specify [id] or [external_id] to update record | Нет id, external_id и create_if_not_exist | Передайте идентификатор или create_if_not_exist=1 |
| Record not found | Точка не найдена, а create_if_not_exist не указан | Проверьте идентификатор или передайте create_if_not_exist=1 |
| There is no any location in VirtualPos. Please create new location and try again | В системе нет территорий | Создайте территорию или передайте location_name |
| Data validation failed. … | Не заполнены название или адрес, нечисловые lat или lon | Исправьте поля, перечисленные в сообщении |
| Cannot save data. … | Ошибка сохранения; например, location_id или default_pricelist_id указывают на несуществующую запись | Проверьте ссылки на другие записи |
| Field '…' not found. Use combination of: [organisation_name] | Неизвестное поле в fields | Используйте organisation_name |