Инструменты пользователя

Инструменты сайта


integrations:api

Содержание

Команды API

Введение

API предназначен для управления данными в Sellper из внешних приложений.

Это позволяет синхронизировать работу интернет-магазинов с управленческим учётом в Sellper.

API реализован основываясь на принципах REST.

Обмен осуществляется в формате XML по протоколу HTTPS посредством запросов GET, PUT, DELETE, POST.

Авторизация запросов:

  • Basic-авторизация - логин и пароль зарегистрированного в системе пользователя
  • С помощью token-ключа - генерируется системой в момент инсталляции приложения (см. раздел «Приложения») и передается в заголовке запроса «Karkas_token».

Форма запросов:

POST https://<домен>.sellper.ru/admin/clients.xml
GET https://<домен>.sellper.ru/admin/client/<id>.xml
...

Подписки на события представляет собой возможность получать уведомления об изменениях на складе путем отправки http-запроса. При возникновении события по указанному в подписке адресу будет выполнен POST-запрос, в теле которого будет передано описание события в формате XML.

Приложения

Приложения в системе «Sellper» могут быть двух видов: общие и частные. Общие приложения доступны для всех клиентов «Sellper». Частные приложения доступны только их авторам или заказчикам.

Общие положения:

  1. Изначально разработка приложения производится на собственном хосте разработчика, но при необходимости, разработчику может быть предоставлен выделенный хостинг на сервере Sellper, где будет доступен удобный PHP-класс для работы с крон-службами.
  2. Разработка может вестись с использованием PHP, а для хранения информации использоваться СУБД Postgres, MySQL или текстовые файлы
  3. Настройка приложения производится администратором(владельцем) домена через форму создания нового приложения (см. ниже) в настройках Sellper.
  4. Первоначально приложение рассматривается как частное (доступно только в домене, где оно создано)
  5. По окончании тестирования приложение становится общим (доступно всем доменам для установки и настройки)

Фактически, приложение может находится где угодно, важно лишь правильно настроить URL установки, входа и удаления.

После того как пользователь нажал ссылку установки приложения в настройках приложений, генерируется уникальный token-ключ, который отправляется в качестве GET-параметра по указанному URL установки приложения (см. форму редактирования свойств приложения). Помимо параметра «token» отправляется также GET-параметр «domain» c названием текущего домена. В этот момент, полученный token-ключ необходимо сохранить и использовать для token-авторизации для API-запросов (передавать в заголовке «Karkas_token» с каждым запросом).

Чтобы настроить приложение, администратору необходимо заполнить соответствующие поля, нажав кнопку создания нового приложения в списке приложений (меню Настройки / Приложения):

  • Классификация приложения
  • Название приложения (будет показываться в списке приложений)
  • URL логотипа приложения
  • URL сайта приложения
  • URL описания приложения
  • Текст краткого описания приложения (в html формате, будет показываться в списке приложений)
  • URL для установки приложения (например http://myapp.ru/install)
  • URL страницы входа в приложение, куда попадает пользователь после нажатия кнопки входа в приложение (например http://myapp.ru/login)
  • URL страницы приложения, куда отправляется запрос после нажатия кнопки удаления приложения (например http://myapp.ru/uninstall)
  • Контакты для пользователей.

В дальнейшем, при необходимости сделать разрабатываемое приложение общим для всех клиентов, необходимо получить согласие от администрации. Приложение может быть как бесплатным, так и платным - в зависимости от тарифа и договоренности с администрацией.

Склады и магазины

Получение списка складов

Запроc:

 GET /admin/stores.xml 

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<stores type="array">
  <store id="1"><name>Главный склад</name></store>
  <store id="2"><name>Дополнительный склад</name></store>
</stores>

Добавление склада

Запроc:

 POST /admin/stores.xml 

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<store>
  <name>Новый склад</name>
</store>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<store id="3">
  <name>Новый склад</name>
</store>

Изменение склада

Запроc:

 PUT /admin/stores/3.xml 

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<store>
  <name>Другое название склада</name>
</store>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<store id="3">
  <name>Другое название склада</name>
</store>

Получение списка магазинов

Запроc:

 GET /admin/shops.xml 

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<shops type="array">
  <shop id="1"><name>Мой интернет-магазин</name><store>1</store></shop>
  <shop id="2"><name>Моя розничная точка</name><store>1</store></shop>
</shops>

Добавление магазина

Запроc:

 POST /admin/shops.xml 

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<shop>
  <name>Новый магазин</name>
</shop>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<shop id="3">
  <name>Новый магазин</name>
</shop>

Изменение магазина

Запроc:

 PUT /admin/shops/3.xml 

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<shop>
  <name>Другое название магазина</name>
  <store>2</store>
</shop>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<shop id="3">
  <name>Другое название магазина</name>
  <store>2</store>
</shop>

Получение товарных остатков у конкретного склада

Помимо общего состояния склада имеется возможность получить вместо полного списка только те позиции, которые подверглись изменению на складе, начиная с указанной даты. К измененным остаткам относится товар, у которого изменились количественно-стоимостные показатели.

Запроc:

 GET /admin/stores/1.xml?parameter=value 

Параметры:

  • page - номер страницы, начиная с нуля. Используется для листания списка. Чтобы получить все нужно в цикле листать страницы пока не закончатся позиции.
  • page-size - размер страницы (количество модификаций товаров на странице). По-умолчанию и не может превышать 250.
  • changed-from=<date time> - только те остатки, которые подверглись изменению с указанной даты. Удаленные товары будут указаны с количеством = 0. Дату можно указать как в формате 'YYYY-MM-DD HH:II:SS', так и указав timestamp.
  • product-id - через запятую идентификаторы карточек
  • extId=<N> - остатки только по одному товару с внешнем кодом N
  • products=detail - развернутые теги <product>
  • show-barcodes - признак наличия штрих-кодов в ответе
  • with-totals=1 - признак того, что в ответе нужно показать общее кол-во позиций на складе (атрибут totalItemsCount тега store).
  • category - ID категории (фильтр)
  • article - маска поиска по артикулу (фильтр).
  • name - маска поиска по названию (фильтр)
  • barcode - поиск по штрих-коду (фильтр)
  • ns - namespace карточки, указанный при ее создании. Данный параметр НЕ является фильтром, нуден для уточнения item.id после объединения карточек в одну из разных namespace.
  • good-filter - фильтр по параметрам товара в формате JSON. Например: {«parameters»:[{«ns»:«wb»,«name»:«Комплектация», «value»:«кеды»}, {«name»:«Торговая марка», «value»:«Vorsh»}], «name»:«%Кроссовки V534%»,«article»:«V534 черн CITY»}

Например, чтобы отобрать все товары, у которых артикул начинается на «2», используйте в запросе параметр: …&article=2%25 , где %25 в url-кодировке (символ % ) означает любую последовательность символов

В ответе значение тега <price/> указано без учета скидки. Чтобы получить текущую цену, нужно из значения тега <price> вычесть значение тега <discount>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<store type="array">
    <items type="array">
        <item id="86e03fab6db4c6d9cf33e616622b6c45">
            <product id="123" extId="3004">Товар 1</product>
            <modification>
                <parameter name="Размер">55</parameter>
            </modification>
            <quantity>100</quantity>
            <price>10</price>
            <cost>2</cost>
            <currency>RUB</currency>
            <rate>1</rate>
            <discount>0</discount>
            <barcodes>
                <barcode>2047308355270</barcode>
            </barcodes>
        </item>
        <item id="010ef0a8841bd2490a7e39a474cfed03">
            <product id="123" extId="3004">Товар 1</product>
            <modification>
            <parameter name="Размер">57</parameter>
            </modification>
            <quantity>10</quantity>
            <price>10</price>
            <cost>2</cost>
            <currency>RUB</currency>
            <rate>1</rate>            
        </item>
    </items>
</store>

Получение товарных остатков сразу по нескольким складам

Помимо общего состояния указанных складов имеется возможность получить вместо полного списка только те позиции, которые подверглись изменению на указанных складах, начиная с указанной даты. К измененным остаткам относится товар, у которого изменились количественно-стоимостные показатели.

Запроc:

 GET|POST /admin/stores_items.xml?parameter=value 

Параметры: … - теже параметры, что у предыдущего запроса

  • stores - идентификаторы рассматриваемых складов, указанные через запятую.
  • filter - тело запроса, переданное методом POST. Реализует фильтрацию по списку штрих-кодов: <filter><barcodes><barcode>12334…</barcode>…</barcodes></filter>.

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<items type="array">
    <item id="86e03fab6db4c6d9cf33e616622b6c45">
    <product id="123" extId="3004">Товар 1</product>
    <modification>
        <parameter name="Размер">55</parameter>
        </modification>
        <quantity>100</quantity>
        <price>10</price>
        <cost>2</cost>
        <currency>RUB</currency>
        <rate>1</rate>
        <barcodes>
        <barcode>2047308355270</barcode>
        </barcodes>
    </item>
    <item id="010ef0a8841bd2490a7e39a474cfed03">
        <product id="123" extId="3004">Товар 1</product>
        <modification>
        <parameter name="Размер">57</parameter>
        </modification>
        <quantity>10</quantity>
        <price>10</price>
        <cost>2</cost>
        <currency>RUB</currency>
        <rate>1</rate>
    </item>
</items>

Получение торговых предложений (формат ICML)

Атрибут «quantity» тега <offer> в ответе содержит количество товарной позиции на всех складах.

Запроc:

 GET /admin/icml.xml

Параметры:

  • stores - идентификаторы рассматриваемых складов, указанные через запятую.
  • good-filter - фильтр по параметрам товара в формате JSON. Например: {«parameters»:[{«ns»:«wb»,«name»:«Комплектация», «value»:«кеды»}, {«name»:«Торговая марка», «value»:«Vorsh»}], «name»:«%Кроссовки V534%»,«article»:«V534 черн CITY»}

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<yml_catalog date="2013-06-20 10:09:18"> 
    <shop> 
        <name>Vorsh</name> 
        <company>Интернет-магазин Vorsh</company> 
        <categories> 
          <category id="12">Кроссовки</category>
            <category id="13">Мокасины</category>
            <category id="14">Туфли</category>
            <category id="15">Ботинки</category>
            <category id="16">Сабо</category>
            <category id="17">Сандалеты</category>
            <category id="18">Полусапоги</category>
        </categories> 
        <offers> 
             <offer id="97709e3f36e134e02ca69192ba8414da" productId="5970" quantity="0">
                <price>4700.00</price>
                <xmlId>97709e3f36e134e02ca69192ba8414da</xmlId>
                <purchasePrice>2150.00</purchasePrice>
                <categoryId>12</categoryId>
                <name>Vorsh Кроссовки V534 черн CITY "черная кожа шнурки" (Размер 39)</name>
                <productName>Vorsh Кроссовки V534 черн CITY "черная кожа шнурки"</productName>
                <picture>http://localhost/clients_as/vmens/images/3338.jpg</picture>
                <picture>http://localhost/clients_as/vmens/images/3170.jpg</picture>
                <param name="Артикул" code="article">V534 черн CITY</param>
                <param name="Размер" is-modificator="1">39</param>
                <param name="Цвет" is-modificator="0">Черный</param>
                <param name="Подкладка" is-modificator="0">натур. кожа</param>
                <param name="Материал верха" is-modificator="0">натур. кожа</param>
                <param name="Производство" is-modificator="0">Bochetti</param>
                <param name="Тип товара" is-modificator="0">обычный</param>
                <barcode>2083782861821</barcode>
            </offer>
            <offer id="c5febc1bc1e95d99622e53069b51f3f6" productId="5970" quantity="2">
                <price>4700.00</price>
                <xmlId>c5febc1bc1e95d99622e53069b51f3f6</xmlId>
                <purchasePrice>2150.00</purchasePrice>
                <categoryId>12</categoryId>
                <name>Vorsh Кроссовки V534 черн CITY "черная кожа шнурки" (Размер 40)</name>
                <productName>Vorsh Кроссовки V534 черн CITY "черная кожа шнурки"</productName>
                <picture>http://localhost/clients_as/vmens/images/3338.jpg</picture>
                <picture>http://localhost/clients_as/vmens/images/3170.jpg</picture>
                <param name="Артикул" code="article">V534 черн CITY</param>
                <param name="Размер" is-modificator="1">40</param>
                <param name="Цвет" is-modificator="0">Черный</param>
                <param name="Подкладка" is-modificator="0">натур. кожа</param>
                <param name="Материал верха" is-modificator="0">натур. кожа</param>
                <param name="Производство" is-modificator="0">Bochetti</param>
                <param name="Тип товара" is-modificator="0">обычный</param>
                <barcode>2092300603737</barcode>
            </offer>
            <offer id="1430b747b8dfae0894c1b72443553aad" productId="5970" quantity="1">
                <price>4700.00</price>
                <xmlId>1430b747b8dfae0894c1b72443553aad</xmlId>
                <purchasePrice>2150.00</purchasePrice>
                <categoryId>12</categoryId>
                <name>Vorsh Кроссовки V534 черн CITY "черная кожа шнурки" (Размер 41)</name>
                <productName>Vorsh Кроссовки V534 черн CITY "черная кожа шнурки"</productName>
                <picture>http://localhost/clients_as/vmens/images/3338.jpg</picture>
                <picture>http://localhost/clients_as/vmens/images/3170.jpg</picture>
                <param name="Артикул" code="article">V534 черн CITY</param>
                <param name="Размер" is-modificator="1">41</param>
                <param name="Цвет" is-modificator="0">Черный</param>
                <param name="Подкладка" is-modificator="0">натур. кожа</param>
                <param name="Материал верха" is-modificator="0">натур. кожа</param>
                <param name="Производство" is-modificator="0">Bochetti</param>
                <param name="Тип товара" is-modificator="0">обычный</param>
                <barcode>2090315165004</barcode>
            </offer>

        </offers> 
    </shop> 
</yml_catalog>

Установить посещаемость (проходимость)

Запроc:

 POST /admin/visitors.xml 

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<item>
    <shopId>10</shopId>
    <date>2023-06-29</date>
    <count>100</count>
</item>

Ответ: 200 Ok

Категории товаров

Получение списка категорий

Запроc:

 GET /admin/categories.xml 

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<categories type="array">
  <category id=23>
    <name>Брюки</name>
    <created type="timestamp">2012-01-01 01:01:01 +0400</created>
  </category>
  <category id=25>
    <name>Сапоги</name>
    <created type="timestamp">2012-01-01 01:01:01 +0400</created>
  </category>
</categories>

Запрос категории

Запроc :

 GET /admin/categories/25.xml 

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<category id=25>
  <name>Одежда/Костюмы</name>
  <created type="timestamp">2012-01-01 01:01:01 +0400</created>
</category>

Добавление категории

Запроc:

 POST /admin/categories.xml 

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<category>
  <name>Одежда/Мужская/Сорочки</name>
</category>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<category id="56">
  <name>Одежда/Мужская/Сорочки</name>
  <created type="timestamp">2012-01-01 01:01:01 +0400</created>
</category>

Изменение категории

Запроc:

 PUT /admin/categories/55.xml 

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<category>
  <name>Сапоги</name>
</category>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<category id=55>
  <name>Сапоги</name>
  <created type="timestamp">2012-01-01 01:01:01 +0400</created>
</category>

Удаление категории

Запроc:

 DELETE /admin/categories/77.xml 

Ответ:

HTTP/1.1 200 OK

Товары

В тегах штрихкодов <barcode> может быть необязательный атрибут ns, определяющий принадлежность штрихкода конкретному внешнему источнику. Например, после объединения карточек товаров, полученных из разных маркетплейсов, но фактически являющихся одним товаром, будет ясно, какой из штрихкодов принадлежит какому маркетплейсу.

Получение списка товаров

Запроc:

 GET /admin/products.xml?parameter=value 

По-умолчанию, список сортируется по времени создания товара. Чтобы поменять направление сортировки используйте параметр order-by-creation=desc

Параметры:

  • page - номер страницы, начиная с нуля. Используется для листания списка. Чтобы получить все, нужно в цикле листать страницы пока не закончатся позиции.
  • page-size - размер страницы (количество товаров на странице). По-умолчанию и не может превышать 250.
  • order-by-creation - сортировать по времени создания товара. Возможные значения desc (по-убыванию) и asc (по-возрастанию).
  • stores - признак наличия товара на одном из указанных складов (перечислите id складов через запятую) (фильтр)
  • category - ID категории (фильтр)
  • article - маска поиска по артикулу (фильтр).
  • name - маска поиска по названию (фильтр)
  • barcode - поиск по штрих-коду (фильтр)
  • extId - поиск по внешнему коду
  • product-id - через запятую идентификаторы карточек
  • with-deleted - признак поиска так же в архивных карточках

Например, чтобы отобрать все товары, у которых артикул начинается на «2», используйте в запросе параметр: …&article=2%25 , где %25 в url-кодировке (символ % ) означает любую последовательность символов

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<products type="array">
  <product id="234234" hidden="false" extId="3004">
    <category id="3333">Одежда/Мужская/Сорочки</category>
    <name>Сорочка мужская B101</name>
    <article>W-101/202</article>
    <description>Полное описание товара</description>
    <short-description>Краткое описание</short-description>
    <created>2009-06-04 14:22:34 +0400</created>
    <parameters>
      <parameter name="Торговая марка">Velaner</parameter>
      <parameter name="Производитель">Россия, ООО "Ромашка"</parameter>
      <parameter name="Состав">100% хлопок</parameter>
      <parameter name="Дата производства">2014-02-13</parameter>
    </parameters>
    <default-prices>
        <cost>856</cost>
        <price>1500</price>
        <old-price>2000</old-price>
    </default-prices>
    <vendor id="10">Chili Technologies S.L.</vendor>
    <modifications>
      <modification>
        <parameter name="Размер">XS</parameter>
        <barcodes>
          <barcode>2046497976600</barcode>
          <barcode>4602347974121</barcode>
        </barcodes>
      </modification>
      <modification>
        <parameter name="Размер">S</parameter>
        <barcodes>
          <barcode>2046497345345</barcode>
        </barcodes>
      </modification>
      <modification>
        <parameter name="Размер">M</parameter>
        <barcodes>
          <barcode>2046497345764</barcode>
          <barcode>2046497345466</barcode>
        </barcodes>
      </modification>
    </modifications>
    <images>
      <image id="123123">
        <original-url>image.png</original-url>
        <url>https://image.sellper.ru/12349.jpg</url>
        <description/>
      </image>
      <image id="123321">
        <original-url>image.png</original-url>
        <url>https://image.sellper.ru/12349.jpg</url>
        <description/>
      </image>
    </images>
  </product>
  <product id="234234"  extId="3005">
    <category id="3333">Одежда/Мужская/Брюки</category>
    <name>Брюки мужские B2101</name>
    <article>W-1014/2002</article>
    <description>Полное описание товара</description>
    <created>2009-06-04 14:22:34 +0400</created>
    <parameters>
      <parameter name="Торговая марка">Velaner</parameter>
      <parameter name="Производитель">Россия, ООО "Ромашка"</parameter>
      <parameter name="Состав">70% хлопок</parameter>
      <parameter name="Дата производства">2014-02-14</parameter>
    </parameters>
    <default-prices>
        <cost>786</cost>
        <price>2000</price>
        <old-price>2400</old-price>
    </default-prices>
    <vendor id="10">Chili Technologies S.L.</vendor>
    <modifications>
      <modification>
        <parameter name="Размер">44</parameter>
        <parameter name="Рост">2</parameter>
        <barcodes>
          <barcode>2046495345355</barcode>
          <barcode>2046345345554</barcode>
        </barcodes>
      </modification>
      <modification>
        <parameter name="Размер">44</parameter>
        <parameter name="Рост">3</parameter>
        <barcodes>
          <barcode>2046497345345</barcode>
        </barcodes>
      </modification>
      <modification>
        <parameter name="Размер">46</parameter>
        <parameter name="Рост">2</parameter>
        <barcodes/>
      </modification>
    </modifications>
    <images>
      <image id="1234">
        <original-url>image4.png</original-url>
        <url>https://image.sellper.ru/1259.jpg</url>
        <description/>
      </image>
      <image id="1231">
        <original-url>image5.png</original-url>
        <url>https://image.sellper.ru/123.jpg</url>
        <description/>
      </image>
    </images>
  </product>
</products>

Запрос товарной позиции

Запроc:

 GET /admin/products/234234.xml 

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<product id="234234" hidden="false"  extId="3004">
  <category id="3333">Одежда/Мужская/Сорочки</category>
  <name>Сорочка мужская B101</name>
  <article>W-101/202</article>
  <description>&lt;p&gt;&lt;span style=&quot;font-family: 'Times New Roman'; font-size: 16px;&quot;&gt; &lt;/span&gt;&lt;/p&gt;</description>
  <short-description>Тут краткое описание товара</short-description>
  <created>2009-06-04 14:22:34 +0400</created>
  <parameters>
    <parameter name="Торговая марка">Velaner</parameter>
    <parameter name="Производитель">Россия, ООО "Ромашка"</parameter>
    <parameter name="Состав">100% хлопок</parameter>
    <parameter name="Дата производства">2014-02-13</parameter>
  </parameters>
  <default-prices>
      <cost>786</cost>
      <price>2000</price>
      <old-price>2400</old-price>
  </default-prices>
  <vendor id="10">Chili Technologies S.L.</vendor>
  <modifications>
    <modification itemId="60a70f9aeb399bec32500d331bbe4152">
      <parameter name="Размер">XS</parameter>
      <barcodes>
        <barcode>2046497976600</barcode>
        <barcode>4602347974121</barcode>
      </barcodes>
    </modification>
    <modification itemId="b78f692708305e860c1068819a74457e">
      <parameter name="Размер">S</parameter>
      <barcodes>
        <barcode>2046497972345</barcode>
      </barcodes>
    </modification>
    <modification itemId="5bb39ec9322f1a831f6c1d3f7bd883ac">
      <parameter name="Размер">M</parameter>
      <barcodes>
        <barcode>2046497976600</barcode>
      </barcodes>
    </modification>
  </modifications>
  <images>
    <image id="123123">
      <original-url>image.png</original-url>
      <url>https://image.sellper.ru/12349.jpg</url>
      <description/>
    </image>
    <image id="123321">
      <original-url>image.png</original-url>
      <url>https://image.sellper.ru/12349.jpg</url>
      <description/>
    </image>
  </images>
</product>

Добавление товара

Запрос:

POST /admin/products.xml
Можно передать необязательный атрибут ns (namespace), который в дальнейшем позволит не допустить объединение карточек, созданных из одного источника. Также этот атрибут будет участвует в уточнении идентификации товарной позиции в запросах stores/4.xml или stores_items.xml если карточка была объединена с карточкой из другого namespace.

В случае, если добавляемый товар с указанным extId уже имеется в списке действующих товаров или в списке удаленных (в корзине), то возвращается ошибка 409 с XML конфликтующего товара. Чтобы отличить удаленный товар от действующего, используйте атрибут deleted=0|1 тега <product/> конфликтующего товара.

Если нужно создать товар с пометкой «архивный», то нужно добавить атрибут deleted=«1» в тег <product>

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<product extId="123123123" ns="wb">
  <categoryId>202</categoryId> или <category>Одежда/Мужская/Сорочки</category>
  <name>Сорочка мужская B101</name>
  <article>W-101/202</article>
  <description>Полное описание товара</description>
  <short-description>Краткое описание</short-description>
  <default-prices>
        <cost>856</cost>
        <price>1500</price>
        <old-price>2000</old-price>
  </default-prices>
  <parameters>
    <parameter name="Торговая марка">Velaner</parameter>
    <parameter name="Производитель">Россия, ООО "Ромашка"</parameter>
    <parameter name="Состав">100% хлопок</parameter>
    <parameter name="Дата производства">2014-02-13</parameter>
  </parameters>
  <barcodes><barcode>2055566611122</barcode></barcodes> /* если без модификаций товаров */
  <modifications>
    <modification itemId="03f544613917945245041ea1581df0c2">
      <parameter name="Размер">XS</parameter>
      <barcodes>
        <barcode>2046497345345</barcode>
      </barcodes>
    </modification>
    <modification itemId="a20695d961021da9ca2faca910b5d7de">
      <parameter name="Размер">S</parameter>
      <barcodes>
        <barcode>2046497375454</barcode>
      </barcodes>
    </modification>
    <modification itemId="9f36407ead0629fc166f14dde7970f68">
      <parameter name="Размер">M</parameter>
      <barcodes>
        <barcode>2046498767834</barcode>
      </barcodes>
    </modification>
  </modifications>
  <images>
    <image>
      <original-url>http://site.ru/image1.png</original-url>
      <description>Вид сбоку</description>
    </image>
    <image>
      <original-url>http://site.ru/image2.png</original-url>
      <description/>
    </image>
  </images>
</product>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<product id="234234">
  <created>2009-06-04 14:22:34 +0400</created>
  <category id="3333">Одежда/Мужская/Сорочки</category>
  <name>Сорочка мужская B101</name>
  <article>W-101/202</article>
  <description>Полное описание товара</description>
  <short-description>Краткое описание</short-description>
  <parameters>
    <parameter name="Торговая марка">Velaner</parameter>
    <parameter name="Производитель">Россия, ООО "Ромашка"</parameter>
    <parameter name="Состав">100% хлопок</parameter>
    <parameter name="Дата производства">2014-02-13</parameter>
  </parameters>
  <modifications>
    <modification>
      <parameter name="Размер">XS</parameter>
      <barcodes>
        <barcode>2046497345345</barcode>
      </barcodes>
    </modification>
    <modification>
      <parameter name="Размер">S</parameter>
      <barcodes>
        <barcode>2046497375454</barcode>
      </barcodes>
    </modification>
    <modification>
      <parameter name="Размер">M</parameter>
      <barcodes>
        <barcode>2046498767834</barcode>
      </barcodes>
    </modification>
  </modifications>
  <images>
    <image id="123123">
      <original-url>http://site.ru/image1.png</original-url>
      <url>https://image.sellper.ru/12349.png</url>
      <description>Вид сбоку</description>
    </image>
    <image id="123321">
      <original-url>http://site.ru/image2.png</original-url>
      <url>https://image.sellper.ru/12349.png</url>
      <description/>
    </image>
  </images>
</product>

Добавление множества товаров

При необходимости добавить в рамках одной транзакции множество товаров, необходимо их передавать в корневом тэге <products> Разрешается создавать в одном запросе не более 300 товаров.

Запрос:

POST /admin/products.xml

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<products>
  <product>...</product>
  ...
  <product>...</product>
</products>

Ответ:

HTTP/1.1 200 OK

<products>
  <product>...</product>
  ...
  <product>...</product>
</products>
В случае ошибки создания каких-либо товаров, остальные товары буду созданы, а теги ошибочных товаров будут содержать описание ошибки.

Изменение товара

Запроc:

 PUT /admin/products/234234.xml 

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<product>
  <extId>3004</extId>
  <categoryId>202</categoryId>
  <name>Сорочка мужская B101</name>
  <article>W-101/202</article>
  <description>Полное описание товара</description>
  <short-description>Краткое описание</short-description>
  <parameters>
    <parameter name="Торговая марка">Velaner</parameter>
    <parameter name="Производитель">Россия, ООО "Ромашка"</parameter>
    <parameter name="Состав">100% хлопок</parameter>
    <parameter name="Дата производства">2014-02-13</parameter>
  </parameters>
  <barcodes><barcode>2055566611122</barcode></barcodes> /* если без модификаций товаров */
  <modifications>
    <modification>
      <parameter name="Размер">XS</parameter>
      <barcodes>
        <barcode>2046497345345</barcode>
      </barcodes>
    </modification>
    <modification>
      <parameter name="Размер">S</parameter>
      <barcodes/>
    </modification>
    <modification>
      <parameter name="Размер">M</parameter>
      <barcodes>
        <barcode>2046498767834</barcode>
      </barcodes>
    </modification>
  </modifications>
  <images>
    <image>
      <original-url>http://site.ru/image1.png</original-url>
      <description>Вид сбоку</description>
    </image>
    <image>
      <original-url>http://site.ru/image2.png</original-url>
      <description/>
    </image>
  </images>
</product>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<product id="234234" extId="3004">
  <created>2009-06-04 14:22:34 +0400</created>
  <category id="3333">Одежда/Мужская/Сорочки</category>
  <name>Сорочка мужская B101</name>
  <article>W-101/202</article>
  <description>Полное описание товара</description>
  <short-description>Краткое описание</short-description>
  <parameters>
    <parameter name="Торговая марка">Velaner</parameter>
    <parameter name="Производитель">Россия, ООО "Ромашка"</parameter>
    <parameter name="Состав">100% хлопок</parameter>
    <parameter name="Дата производства">2014-02-13</parameter>
  </parameters>
  <modifications>
    <modification>
      <parameter name="Размер">XS</parameter>
      <barcodes>
        <barcode>2046497345345</barcode>
      </barcodes>
    </modification>
    <modification>
      <parameter name="Размер">S</parameter>
      <barcodes/>
    </modification>
    <modification>
      <parameter name="Размер">M</parameter>
      <barcodes>
        <barcode>2046498767834</barcode>
      </barcodes>
    </modification>
  </modifications>
  <images>
    <image id="123123">
      <original-url>http://site.ru/image1.png</original-url>
      <url>https://image.sellper.ru/12349.png</url>
      <description>Вид сбоку</description>
    </image>
    <image id="123321">
      <original-url>http://site.ru/image2.png</original-url>
      <url>https://image.sellper.ru/12349.png</url>
      <description/>
    </image>
  </images>
</product>

Удаление товара

Запроc:

 DELETE /admin/products/12343.xml 

Ответ:

HTTP/1.1 200 OK

Клиенты

Получение списка клиентов

Запроc:

 GET /admin/clients.xml?parameter=value 

Параметры:

  • page - номер страницы, начиная с нуля. Используется для листания списка. Чтобы получить все нужно в цикле листать страницы пока не закончатся позиции.
  • page-size - размер страницы (количество клиентов на странице). По-умолчанию и не может превышать 250.

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<clients type="array">
  <client id="167">
    <name>Иванов Иван Иванович</name>
    <created>2013-08-25 20:32:08+04</created>
    <phone>+79115554126</phone>
    <card>26323</card>
    <discount>5</discount>
    <address>ул.Ленина д.5</address>
    <email>ivanov@mail.ru</email>
    <comment/>
    <birthday>1996-01-25</birthday>
  </client>
  <client id="185">
    <name>Сидоров Сидр Сидорович</name>
    <created>2013-09-24 12:05:20+04</created>
    <phone>+79125550252</phone>
    <card>27652</card>
    <discount>5</discount>
    <address/>
    <email>sidr@yandex.ru</email>
    <comment/>
    <birthday/>
  </client>
</clients>

Получение параметров клиента

Запрос:

 GET /admin/clients/167.xml

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
  <client id="167">
   <type>person</type>
    <name>Иванов Иван Иванович</name>
    <created>2013-08-25 20:32:08+04</created>
    <phone>+79115554126</phone>
    <card>26323</card>
    <discount>5</discount>
    <start-sales-sum>2000</start-sales-sum>
    <address>ул.Ленина д.5</address>
    <email>ivanov@mail.ru</email>
    <comment/>
    <sex>1</sex>
    <birthday>1996-01-25</birthday>
  </client>

Добавление клиента

Запрос:

 POST /admin/clients.xml

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
  <client>
    <name>Иванов Иван Иванович</name>
    <phone>+79115554126</phone>
    <card>26323</card>
    <discount>5</discount>
    <address>ул.Ленина д.5</address>
    <email>ivanov@mail.ru</email>
    <comment/>
    <birthday>1996-01-25</birthday>
  </client>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
  <client id="167">
    <name>Иванов Иван Иванович</name>
    <created>2013-08-25 20:32:08+04</created>
    <phone>+79115554126</phone>
    <card>26323</card>
    <discount>5</discount>
    <address>ул.Ленина д.5</address>
    <email>ivanov@mail.ru</email>
    <comment/>
    <birthday>1996-01-25</birthday>
  </client>

Изменение клиента

Запрос:

 PUT /admin/clients/167.xml

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
  <client>
    <name>Иванов Иван Иванович</name>
    <phone>+79115554126</phone>
    <card>26323</card>
    <discount>5</discount>
    <address>ул.Ленина д.5</address>
    <email>ivanov@mail.ru</email>
    <comment/>
    <birthday>1996-01-25</birthday>
  </client>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
  <client id="167">
    <name>Иванов Иван Иванович</name>
    <created>2013-08-25 20:32:08+04</created>
    <phone>+79115554126</phone>
    <card>26323</card>
    <discount>5</discount>
    <address>ул.Ленина д.5</address>
    <email>ivanov@mail.ru</email>
    <comment/>
    <birthday>1996-01-25</birthday>
  </client>

Удаление клиента

Запроc:

 DELETE /admin/clients/234.xml 

Ответ:

HTTP/1.1 200 OK

Пользователи

Получение списка пользователей

Запроc:

 GET /admin/users.xml?parameter=value 

Параметры:

  • page - номер страницы, начиная с нуля. Используется для листания списка. Чтобы получить все нужно в цикле листать страницы пока не закончатся позиции.
  • page-size - размер страницы (количество пользователей на странице). По-умолчанию и не может превышать 250.

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<users type="array">
  <user id="1">
    <name>Наталья Иванова</name>
    <created>2013-08-25 20:32:08+04</created>
    <phone>+79115554126</phone>
    <email>ivanov@mail.ru</email>
  </user>
  <user id="2">
    <name>Марина Петрова</name>
    <created>2013-09-24 12:05:20+04</created>
    <phone>+79125550252</phone>
    <email>sidr@yandex.ru</email>
  </user>
</users>

Добавление пользователя

Запроc:

 POST /admin/users.xml 

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<user>
  <first_name>Мария</first_name>
  <login>Мария</login>
  <password>md5(явный_пароль)</password>
 </user>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<shop id="3">
  <name>Новый магазин</name>
  <created type="timestamp">2012-01-01 01:01:01 +0400</created>
</category>

Получение параметров пользователя

Запрос:

 GET /admin/users/1.xml

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
  <user id="1">
    <name>Наталья Иванова</name>
    <created>2013-08-25 20:32:08+04</created>
    <phone>+79115554126</phone>
    <email>ivanov@mail.ru</email>
  </user>

Заказы

Список заказов

Запрос:

 GET /admin/orders.xml?parameter=value

Параметры:

  • page - номер страницы, начиная с нуля. Используется для листания списка. Чтобы получить все нужно в цикле листать страницы пока не закончатся заказы.
  • page-size - размер страницы (количество заказов на странице). По-умолчанию и не может превышать 250.
  • id - список идентификаторов заказов, перечисленных через запятую без пробелов
  • products=detail - развернутые теги <product>
  • show-barcodes - признак наличия штрих-кодов в ответе
  • show-expenditures - признак наличия статей расходов в ответе

В ответе присутствует информация о резерве, если заказ еще не отправлен:

<reserved-percent type="integer">73</reserved-percent> - показывает процент реального наполнения товаром по заказу
<reserved-all>0</reserved-all> - означает признак полного резервированная (заказ можно отправлять клиенту)
<reserve id="21153">Резерв по заказу №16</reserve> - краткую информацию о резерве. Для получения полной информации по резерву необходимо выполнить соответствующий запрос admin/reserves/16.xml

Ответ:

<orders type="array">
  <order id="16">
    <shop id="1">Магазин "Ромашка"</shop>
    <number>10003</number>
    <client id="148">
      <name>Сидоров Сидр Сергеевич</name>
      <created>2013-08-15 20:05:41+04</created>
      <phone>+79215454545</phone>
      <card>26725</card>
      <discount>5</discount>
      <address>ул. Сидорова 55 кв.44</address>
      <email>sidr@mail.ru</email>
      <comment/>
      <birthday>1984-12-23</birthday>
    </client>
    <created>2014-06-26 21:44:27+04</created>
    <status>new</status>
    <summa>3360.15</summa>
    <delivery-type id="4">Курьером</delivery-type>
    <delivery-cost>300.15</delivery-cost>
    <delivery-address>на деревню дедушке</delivery-address>
    <delivery-begin-time/>
    <delivery-end-time>2012-12-12 00:00:00+04</delivery-end-time>
    <pay-time/>
    <pay-type>Наличными</pay-type>
    <comment>оплачено 1000р осталось 2360,15р.</comment>
    <items type="array">
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product id="1056" ext="4334">
          <name>Рубашка Апельсин 33549 в полоску</name>
          <article>33549</article>
          <category id="3">Рубашка</category>
          <parameters>
            <parameter name="Торговая марка">Апельсин</parameter>
            <parameter name="Производитель">Китай</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>u2ccsAso5FM.jpg</original-url>
              <url>https://demo.sellper.ru/?image=1037</url>
              <description>Вид сверху</description>
            </image>
          </images>
          <created>2013-02-26 20:15:00+04</created>
        </product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <price>2400</price>
        <discount>0</discount>
        <quantity>1</quantity>
        <barcodes>
             <barcode>2032914541315</barcode>
        </barcodes>
      </item>
      <item id="010ef0a8841bd2490a7e39a474cfed03">
        <product id="2557">
          <name>Чулки а-355</name>
          <article>а-355</article>
          <category id="76">Чулки</category>
          <parameters>
            <parameter name="Торговая марка">Колобок</parameter>
            <parameter name="Производитель">Россия</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>chulki-355.jpg</original-url>
              <url>https://demo.sellper.ru/?image=3455</url>
              <description/>
            </image>
          </images>
          <created>2013-06-16 22:16:00+04</created>
        </product>
        <modification>
          <parameter name="Рост">30</parameter>
          <parameter name="Цвет">Красный</parameter>
        </modification>
        <price>400</price>
        <discount>70</discount>
        <quantity>2</quantity>
      </item>
    </items>
    <reserved-percent type="integer">73</reserved-percent>
    <reserved-all>0</reserved-all>
    <reserve id="21153">Резерв по заказу №16</reserve>
  </order>
</orders>

Информация о заказе

Запрос:

 GET /admin/orders/16.xml?parameter=value

Параметры:

  • products=detail - развернутые теги <product>
  • show-barcodes - признак наличия штрих-кодов в ответе
  • show-expenditures - признак наличия статей расходов в ответе

В ответе присутствует информация о резерве, если заказ еще не отправлен:

<reserved-percent type="integer">73</reserved-percent> - показывает процент реального наполнения товаром по заказу
<reserved-all>0</reserved-all> - означает признак полного резервированная (заказ можно отправлять клиенту)
<reserve id="21153">Резерв по заказу №16</reserve> - краткую информацию о резерве. 

Для получения полной информации по резерву необходимо выполнить соответствующий запрос admin/reserves/16.xml

Ответ:

<order id="16">
  <shop id="1">Магазин "Ромашка"</shop>
  <number>10003</number>
  <client id="148">
    <name>Сидоров Сидр Сергеевич</name>
    <created>2013-08-15 20:05:41+04</created>
    <phone>+79215454545</phone>
    <card>26725</card>
    <discount>5</discount>
    <address>ул. Сидорова 55 кв.44</address>
    <email>sidr@mail.ru</email>
    <comment/>
    <birthday>1984-12-23</birthday>
  </client>
  <created>2014-06-26 21:44:27+04</created>
  <status>new</status>
  <dispatch-required-time/>
  <summa>3360.15</summa>
  <products-summa>3060</products-summa>
  <products-summa-with-discount>3200</products-summa-with-discount>
  <delivery-type id="4">Курьером</delivery-type>
  <delivery-cost>300.15</delivery-cost>
  <delivery-address>на деревню дедушке</delivery-address>
  <delivery-begin-time/>
  <delivery-end-time>2012-12-12 00:00:00+04</delivery-end-time>
  <pay-time/>
  <pay-type>Наличными</pay-type>
  <comment>оплачено 1000р осталось 2360,15р.</comment>
  <items type="array">
    <item id="86e03fab6db4c6d9cf33e616622b6c45">
      <product id="1056" ext="4333">
        <name>Рубашка Апельсин 33549 в полоску</name>
        <article>33549</article>
        <category id="3">Рубашка</category>
        <parameters>
          <parameter name="Торговая марка">Апельсин</parameter>
          <parameter name="Производитель">Китай</parameter>
        </parameters>
        <images>
          <image id="1037">
            <original-url>u2ccsAso5FM.jpg</original-url>
            <url>https://demo.sellper.ru/?image=1037</url>
            <description>Вид сверху</description>
          </image>
        </images>
        <created>2013-02-26 20:15:00+04</created>
      </product>
      <modification>
        <parameter name="Размер">40</parameter>
      </modification>
      <price>2400</price>
      <discount>0</discount>
      <quantity>1</quantity>
        <barcodes>
             <barcode>2032914541315</barcode>
        </barcodes>
    </item>
    <item id="010ef0a8841bd2490a7e39a474cfed03">
      <product id="2557">
        <name>Чулки а-355</name>
        <article>а-355</article>
        <category id="76">Чулки</category>
        <parameters>
          <parameter name="Торговая марка">Колобок</parameter>
          <parameter name="Производитель">Россия</parameter>
        </parameters>
        <images>
          <image id="1037">
            <original-url>chulki-355.jpg</original-url>
            <url>https://demo.sellper.ru/?image=3455</url>
            <description/>
          </image>
        </images>
        <created>2013-06-16 22:16:00+04</created>
      </product>
      <modification>
        <parameter name="Рост">30</parameter>
        <parameter name="Цвет">Красный</parameter>
      </modification>
      <price>400</price>
      <discount>70</discount>
      <quantity>2</quantity>
    </item>
  </items>
  <reserved-percent type="integer">73</reserved-percent>
  <reserved-all>0</reserved-all>
  <reserve id="21153">Резерв по заказу №16</reserve>
  <expenditures>
    <expenditure id="25555">
      <budgetId>33</budgetId>
      <summa>50</summa>
      <comment>Логистика до клиента</comment>
      <action-time>2023-09-22 00:00:00+03</action-time>
      <cash>1</cash>
    </expenditure>
  </expenditures>
</order>

Изменение заказа

Запрос:

 PUT /admin/orders/16.xml

При указании тега <reserved-all>1</reserved-all> система попытается зарезервировать полностью товар для заказа. Если это не удается, то возвращается ошибка.

При необходимости поменять сумму всем товарным позициям, не указывая конкретно товар, нужно указать значения стоимости товаров и стоимости товаров с учетом скидки соответственно в тегах <products-summa> и <products-summa-with-discount>. В этом случае указанная сумма будет равномерно распределена по предметам в заказе. На практике это удобно применять для заказов внутри которых указаны товарные позиции с одинаковыми ценами.

Тело запроса:

<order>
  <number>10003</number>
  <client>148</client>
  <dispatch-required-time/>
  <status>accepted</status>
  <delivery-type>Курьером</delivery-type>
  <delivery-cost>300.15</delivery-cost>
  <delivery-address>на деревню дедушке</delivery-address>
  <delivery-begin-time/>
  <delivery-end-time>2012-12-12 00:00:00+04</delivery-end-time>
  <pay-time/>
  <pay-type>Наличными</pay-type>
  <comment>заказ изменен</comment>
  <items type="array">
    <item id="86e03fab6db4c6d9cf33e616622b6c45">
      <product>2557</product>
      <modification>
        <parameter name="Рост">30</parameter>
        <parameter name="Цвет">Зеленый</parameter>
      </modification>
      <price>400</price>
      <discount>70</discount>
      <quantity>5</quantity>
    </item>
  </items>
  <reserved-all>1</reserved-all>
  <expenditures action-before="remove-putting-budgets" action-when-setting="update">
    <expenditure>
      <budgetId>33</budgetId>
      <summa>50</summa>
      <comment>Логистика до клиента</comment>
      <action-time>2023-09-22</action-time>
    </expenditure>
  </expenditures>
</order>

Ответ:

<order id="16">
  <shop>1</shop>
  <number>10003</number>
  <client id="148">
    <name>Сидоров Сидр Сергеевич</name>
    <created>2013-08-15 20:05:41+04</created>
    <phone>+79215454545</phone>
    <card>26725</card>
    <discount>5</discount>
    <address>ул. Сидорова 55 кв.44</address>
    <email>sidr@mail.ru</email>
    <comment/>
    <birthday>1984-12-23</birthday>
  </client>
  <created>2014-06-26 21:44:27+04</created>
  <status>new</status>
  <dispatch-required-time/>
  <summa>1960.15</summa>
  <delivery-type id="4">Курьером</delivery-type>
  <delivery-cost>300.15</delivery-cost>
  <delivery-address>на деревню дедушке</delivery-address>
  <delivery-begin-time/>
  <delivery-end-time>2012-12-12 00:00:00+04</delivery-end-time>
  <pay-time/>
  <pay-type>Наличными</pay-type>
  <comment>заказ изменен</comment>
  <items type="array">
    <item id="010ef0a8841bd2490a7e39a474cfed03">
      <product id="2557" ext="4334">
        <name>Чулки а-355</name>
        <article>а-355</article>
        <category id="76">Чулки</category>
        <parameters>
          <parameter name="Торговая марка">Колобок</parameter>
          <parameter name="Производитель">Россия</parameter>
        </parameters>
        <images>
          <image id="1037">
            <original-url>chulki-355.jpg</original-url>
            <url>https://demo.sellper.ru/?image=3455</url>
            <description/>
          </image>
        </images>
        <created>2013-06-16 22:16:00+04</created>
      </product>
      <modification>
        <parameter name="Рост">30</parameter>
        <parameter name="Цвет">Красный</parameter>
      </modification>
      <price>400</price>
      <discount>70</discount>
      <quantity>5</quantity>
    </item>
  </items>
  <reserved-percent type="integer">100</reserved-percent>
  <reserved-all>1</reserved-all>
  <reserve id="21153">Резерв по заказу №16</reserve>
</order>

Добавление заказа

Запрос:

 POST /admin/orders.xml
Если не указать в запросе идентификатор магазина (тег <shop>), то заказ будет привязан автоматически к первому действующему магазину из списка магазинов.

Товарную позицию можно идентифицировать 3-мя способами перечисленными в разделе добавления поступления.

По-умолчанию, новый заказ создается с авто-поступлением соответствующего товара, т.е. свободный остаток на складе не изменится. Если нужно поменять поведение заказа по отношению к складу, то необходимо указать атрибут goods-source-behaviour со значениями reserve или find-impersonal-reserve.

  1. reserve: указывает, что при создании заказа необходимо сначала зарезервировать товар под заказ на складе. т.е. свободный остаток на складе уменьшится.
  2. find-impersonal-reserve: указывает, что прежде чем пытаться резервировать товар под заказ, сначала пытаться найти ранее сформированный резерв, соответствующий этому заказу.
В случае goods-source-behaviour=«reserve», и, отсутствия на складе соответствующих товаров, заказ невозможно перевести в статусы собран, отгружен, доставляется, доставлен.

При создании заказа можно указать дополнительный атрибут status-change-block-for-user, который запретит пользователю менять в дальнейшем статус данного заказа и может принимать значения:

  1. all: указывает, что пользователь не может менять статус во всех случаях.
  2. перечисленные через запятую статусы: указывает, что пользователь не может менять статус только тем заказам, статус которых указан в перечислении.

Тело запроса:

<order ns="ozon">
  <shop>1</shop>
  <number>10150</number>
  <client>238</client>
  <dispatch-required-time/>
  <delivery-type id="8">Самовывоз</delivery-type>
  <delivery-cost>500</delivery-cost>
  <delivery-address>на деревню бабушке</delivery-address>
  <delivery-begin-time/>
  <delivery-end-time>2013-12-12 00:00:00+04</delivery-end-time>
  <pay-time/>
  <pay-type>Наличными</pay-type>
  <comment>новый супер заказ</comment>
  <items type="array">
    <item> /* запись по id товара и модификации без кода позиции */
      <product>6557</product>
      <modification>
        <parameter name="Цвет">Синий</parameter>
      </modification>
      <price>300</price>
      <discount>60</discount>
      <quantity>1</quantity>
    </item>
    <item id="010ef0a8841bd2490a7e39a474cfed03"> /* запись по коду позиции */
      <price>1300</price>
      <discount>0</discount>
      <quantity>2</quantity>
    </item>
  </items>
  <reserved-all>1</reserved-all>
</order>

Ответ:

<order id="26" ns="ozon">
  <shop>1</shop>
  <number>10150</number>
  <client id="238">
    <name>Иванов Иван Сергеевич</name>
    <created>2013-03-25 10:05:31+04</created>
    <phone>+79291212121</phone>
    <card>3425</card>
    <discount>3</discount>
    <address>ул. Иванова 55 кв.44</address>
    <email>ivan@mail.ru</email>
    <comment/>
    <birthday>1904-10-23</birthday>
  </client>
  <created>2012-06-26 21:44:27+04</created>
  <dispatch-required-time/>
  <status>new</status>
  <summa>3140</summa>
  <delivery-type id="8">Самовывоз</delivery-type>
  <delivery-cost>500</delivery-cost>
  <delivery-address>на деревню бабушке</delivery-address>
  <delivery-begin-time/>
  <delivery-end-time>2013-12-12 00:00:00+04</delivery-end-time>
  <pay-time/>
  <pay-type>Наличными</pay-type>
  <comment>новый супер заказ</comment>
  <items type="array">
    <item id="86e03fab6db4c6d9cf33e616622b6c45">
      <product id="6557">
        <name>Носки б-355</name>
        <article>б-355</article>
        <category id="54">Носки</category>
        <parameters>
          <parameter name="Торговая марка">Колобок</parameter>
          <parameter name="Производитель">Россия</parameter>
        </parameters>
        <images/>
        <created>2013-01-16 02:06:10+04</created>
      </product>
      <modification>
        <parameter name="Цвет">Синий</parameter>
      </modification>
      <price>300</price>
      <discount>60</discount>
      <quantity>1</quantity>
    </item>
    <item id="010ef0a8841bd2490a7e39a474cfed03">
      <product id="67">
        <name>Табурет</name>
        <article>2125м</article>
        <category id="58">Мебель</category>
        <parameters>
          <parameter name="Цвет">Красный</parameter>
        </parameters>
        <images/>
        <created>2013-06-24 22:06:10+04</created>
      </product>
      <modification/>
      <price>1300</price>
      <discount>0</discount>
      <quantity>2</quantity>
    </item>
  </items>
  <reserved-percent type="integer">100</reserved-percent>
  <reserved-all>1</reserved-all>
  <reserve id="21153">Резерв по заказу №16</reserve>
</order>

Внесение расходов по заказу

Запрос:

 PUT|POST /admin/orders/:orderId.xml
Можно управлять поведением расходов перед их вставкой при помощи атрибута action-before. Дынный атрибут может быть либо пустым, либо иметь значение 'remove-all-budgets', что приведет к удалению всех расходов в заказе перед его обновлением.

Тело запроса:

<?xml version="1.0"?>
<order>
    <expenditures action-before="remove-all-budgets" >
        <expenditure>
            <action-time></action-time>
            <budgetId>33</budgetId>
            <summa>307.88</summa>
            <comment>Логистика до клиента</comment>
        </expenditure>
    </expenditures>
</order>

Ответ:

<order id="26">
   ....
   <expenditures>
        <expenditure id="28665">
            <budgetId>33</budgetId>
            <summa>307.88</summa>
            <comment>Логистика до клиента</comment>
            <action-time>2023-10-18 18:41:20.134846+03</action-time>
            <cash>1</cash>
        </expenditure>
    </expenditures>
</order>

Удаление заказа

Запрос:

 DELETE /admin/orders/16.xml

Ответ:

HTTP/1.1 200 OK

Список статусов заказов

Запрос:

 GET /admin/orders-statuses.xml

Ответ:

<orders-statuses type="array">
  <status id="new">Новый</status>
  <status id="accepted">В обработке</status>
  <status id="approved">Согласован</status>
  <status id="packing">На сборке</status>
  <status id="packed">Собран</status>
  <status id="dispatched">Отгружен</status>
  <status id="delivering">Доставляется</status>
  <status id="delivered">Доставлен</status>
  <status id="declined">Отменен</status>
</orders-statuses>

Список типов оплаты

Запрос:

 GET /admin/pay-types.xml

Ответ:

<pay-types type="array">
    <pay-type id="bn">Безналичный расчет</pay-type>
    <pay-type id="cash">Наличными</pay-type>
</pay-types>

Список типов доставки

Запрос:

 GET /admin/delivery-types.xml

Ответ:

<delivery-types type="array">
    <delivery-type id="1">Доставка курьером в черте города</delivery-type>
    <delivery-type id="2">Самовывоз</delivery-type>
</delivery-types>

Добавление типа доставки

Запрос:

 POST /admin/delivery-types.xml

Тело запроса:

<?xml version="1.0"?>
<delivery-type>
    <name>На собачьей упряжке</name>
    <price>550</price>
</delivery-type>

Ответ:

<?xml version="1.0"?>
<delivery-type id='28'>
    <name>На собачьей упряжке</name>
    <price>550</price>
</delivery-type>

В случае, если добавляемый тип уже имеется в списке, то возвращается ошибка 409.

Необязательный тег <price> определяет цену по-умолчанию для данного типа доставки.

Обновление типа доставки

Запрос:

 PUT /admin/delivery-types/11.xml

Тело запроса:

<?xml version="1.0"?>
<delivery-type>
    <name>Через проводника в поезде</name>
    <price>5000</price>
</delivery-type>

Ответ:

<?xml version="1.0"?>
<delivery-type id='11'>
    <name>Через проводника в поезде</name>
    <price>5000</price>
</delivery-type>

Удаление типа доставки

Запроc:

 DELETE /admin/delivery-types/11.xml 

Ответ:

HTTP/1.1 200 OK

В случае, если удаляемый тип доставки относится хотя бы к одному заказу, то будет ошибка 409.

Продажи

Список продаж

Запрос:

 GET /admin/sales.xml?parameter=value

Параметры:

  • page - номер страницы, начиная с нуля. Используется для листания списка. Чтобы получить все нужно в цикле листать страницы пока не закончатся продажи.
  • page-size - размер страницы (количество продаж на странице). По-умолчанию и не может превышать 250.
  • products=detail - развернутые теги <product>
  • show-barcodes - признак наличия штрих-кодов в ответе

Ответ:

<sales type="array">
  <sale id="16">
    <shop id="1">Ромашка</shop>
    <store id="1">Склад "Ромашка"</store>
     <client id="148">Сидоров Сидр Сергеевич</client>
    <created>2014-06-26 21:44:27+04</created>
    <action-time>2014-06-26 21:44:27+04</action-time>
    <summa>3360.15</summa>
    <cash>3360.15</cash>
    <comment>оплачено наличными</comment>
    <items type="array">
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product id="1056">
          <name>Рубашка Апельсин 33549 в полоску</name>
          <article>33549</article>
          <category id="3">Рубашка</category>
          <parameters>
            <parameter name="Торговая марка">Апельсин</parameter>
            <parameter name="Производитель">Китай</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>u2ccsAso5FM.jpg</original-url>
              <url>https://demo.sellper.ru/?image=1037</url>
              <description>Вид сверху</description>
            </image>
          </images>
          <created>2013-02-26 20:15:00+04</created>
        </product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <price>2400</price>
        <discount>0</discount>
        <quantity>1</quantity>
        <barcodes>
             <barcode>2032914541315</barcode>
        </barcodes>
      </item>
      <item id="010ef0a8841bd2490a7e39a474cfed03">
        <product id="2557">
          <name>Чулки а-355</name>
          <article>а-355</article>
          <category id="76">Чулки</category>
          <parameters>
            <parameter name="Торговая марка">Колобок</parameter>
            <parameter name="Производитель">Россия</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>chulki-355.jpg</original-url>
              <url>https://demo.sellper.ru/?image=3455</url>
              <description/>
            </image>
          </images>
          <created>2013-06-16 22:16:00+04</created>
        </product>
        <modification>
          <parameter name="Рост">30</parameter>
          <parameter name="Цвет">Красный</parameter>
        </modification>
        <price>400</price>
        <discount>70</discount>
        <quantity>2</quantity>
      </item>
    </items>
  </sale>
</sales>

Информация о продаже

Запрос:

 GET /admin/sales/16.xml

Параметры:

  • products=detail - развернутые теги <product>
  • show-barcodes - признак наличия штрих-кодов в ответе

Ответ:

  <sale id="16">
    <shop id="1">Ромашка</shop>
    <store id="1">Склад "Ромашка"</store>
     <client id="148">Сидоров Сидр Сергеевич</client>
    <created>2014-06-26 21:44:27+04</created>
    <action-time>2014-06-26 21:44:27+04</action-time>
    <summa>3360.15</summa>
    <cash>3360.15</cash>
    <comment>оплачено наличными</comment>
    <items type="array">
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product id="1056">
          <name>Рубашка Апельсин 33549 в полоску</name>
          <article>33549</article>
          <category id="3">Рубашка</category>
          <parameters>
            <parameter name="Торговая марка">Апельсин</parameter>
            <parameter name="Производитель">Китай</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>u2ccsAso5FM.jpg</original-url>
              <url>https://demo.sellper.ru/?image=1037</url>
              <description>Вид сверху</description>
            </image>
          </images>
          <created>2013-02-26 20:15:00+04</created>
        </product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <price>2400</price>
        <discount>0</discount>
        <quantity>1</quantity>
        <barcodes>
             <barcode>2032914541315</barcode>
        </barcodes>
      </item>
      <item id="010ef0a8841bd2490a7e39a474cfed03">
        <product id="2557">
          <name>Чулки а-355</name>
          <article>а-355</article>
          <category id="76">Чулки</category>
          <parameters>
            <parameter name="Торговая марка">Колобок</parameter>
            <parameter name="Производитель">Россия</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>chulki-355.jpg</original-url>
              <url>https://demo.sellper.ru/?image=3455</url>
              <description/>
            </image>
          </images>
          <created>2013-06-16 22:16:00+04</created>
        </product>
        <modification>
          <parameter name="Рост">30</parameter>
          <parameter name="Цвет">Красный</parameter>
        </modification>
        <price>400</price>
        <discount>70</discount>
        <quantity>2</quantity>
      </item>
    </items>
  </sale>

Добавление продажи

Запрос:

 POST /admin/sales.xml

Каждая товарная позиция может быть идентифицирована как уникальным атрибутом <item id='…'>, полученным ранее, так и тегом <product> с тегом модификации, при необходимости. Атрибут <item id='…'> считается более приоритетным над тегами <product> + <modification>

Если не указать в запросе идентификатор магазина (тег <shop>), то продажа будет привязана автоматически к первому действующему магазину из списка магазинов.
Тег <cash> задает сумму оплаты продажи наличными. Соответственно, остаток суммы оплаты система проведет по безналу. Таким образом, <cash>0<cash> задает признак оплаты по безналу. Если тег <cash/> опущен, то, по-умолчанию, рассматривается как оплата наличными.

Тело запроса:

<sale uuid="8d2a202e-4d6b-4d3c-9813-6728dc29baa6">
  <shop>1</shop>
  <client>238</client>
  <user>23</user>
  <seller>24</seller>
  <action-time>2018-10-20 10:36:00</action-time>
  <cash>500</cash>
  <comment>новая супер продажа</comment>
    <items type="array">
    <item>
      <product>6557</product>
      <modification>
        <parameter name="Цвет">Синий</parameter>
      </modification>
      <price>300</price>
      <discount>60</discount>
      <quantity>1</quantity>
    </item>
    <item>
      <product>67</product>
      <modification/>
      <price>1300</price>
      <discount>0</discount>
      <quantity>2</quantity>
    </item>
  </items>
</sale>
Необязательный внешний уникальный идентификатор (атрибут «uuid» тега «sale») гарантирует уникальность продажи в системе. Другими словами, при попытке создать продажу с таким же uuid (например, <sale uuid=«8d2a202e-4d6b-4d3c-9813-6728dc29baa6»), как и у ранее созданной, будет ошибка «409 Conflict».

Ответ:

<sale id="26768">
  <shop>1</shop>
  <user id="23">
      <name>Иванова Лариса</name>
  </user>
  <client id="238">
    <name>Иванов Иван Сергеевич</name>
    <created>2013-03-25 10:05:31+04</created>
    <phone>+79291212121</phone>
    <card>3425</card>
    <discount>3</discount>
    <address>ул. Иванова 55 кв.44</address>
    <email>ivan@mail.ru</email>
    <comment/>
    <birthday>1904-10-23</birthday>
  </client>
  <created>2012-06-26 21:44:27+04</created>
  <summa>2840</summa>
  <cash>500</cash>
  <comment>новая супер продажа</comment>
  <items type="array">
    <item id="86e03fab6db4c6d9cf33e616622b6c45">
      <product id="6557">
        <name>Носки б-355</name>
        <article>б-355</article>
        <category id="54">Носки</category>
        <parameters>
          <parameter name="Торговая марка">Колобок</parameter>
          <parameter name="Производитель">Россия</parameter>
        </parameters>
        <images/>
        <created>2013-01-16 02:06:10+04</created>
      </product>
      <modification>
        <parameter name="Цвет">Синий</parameter>
      </modification>
      <price>300</price>
      <discount>60</discount>
      <quantity>1</quantity>
    </item>
    <item id="010ef0a8841bd2490a7e39a474cfed03">
      <product id="67">
        <name>Табурет</name>
        <article>2125м</article>
        <category id="58">Мебель</category>
        <parameters>
          <parameter name="Цвет">Красный</parameter>
        </parameters>
        <images/>
        <created>2013-06-24 22:06:10+04</created>
      </product>
      <modification/>
      <price>1300</price>
      <discount>0</discount>
      <quantity>2</quantity>
    </item>
  </items>
</sale>

Отмена продажи

Запрос:

 DELETE /admin/sales/16.xml

Ответ:

HTTP/1.1 200 OK

Возвраты от клиентов

Список возвратов от клиентов

Запрос:

 GET /admin/refunds.xml?parameter=value

Параметры:

  • page - номер страницы, начиная с нуля. Используется для листания списка. Чтобы получить все нужно в цикле листать страницы пока не закончатся возвраты.
  • page-size - размер страницы (количество возвратов на странице). По-умолчанию и не может превышать 250.
  • products=detail - развернутые теги <product>
  • show-barcodes - признак наличия штрих-кодов в ответе

Ответ:

<refunds type="array">
  <refund id="16">
    <saleId>35623</saleId>
    <shop id="1">Ромашка</shop>
    <store id="1">Склад "Ромашка"</store>
    <client id="148">Сидоров Сидр Сергеевич</client>
    <created>2014-06-26 21:44:27+04</created>
    <action-time>2014-06-26 21:44:27+04</action-time>
    <summa>2300</summa>
    <cash>0</cash>
    <comment>возвращено по безналу</comment>
    <items type="array">
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product id="1056">
          <name>Рубашка Апельсин 33549 в полоску</name>
          <article>33549</article>
          <category id="3">Рубашка</category>
        </product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <price>2400</price>
        <discount>100</discount>
        <quantity>1</quantity>
        <barcodes>
             <barcode>2032914541315</barcode>
        </barcodes>
      </item>
    </items>
  </refund>
</refunds>

Информация о возврате

Запрос:

 GET /admin/refunds/16.xml

Параметры:

  • products=detail - развернутые теги <product>
  • show-barcodes - признак наличия штрих-кодов в ответе

Ответ:

  <refund id="16">
    <saleId>35623</saleId>
    <shop id="1">Ромашка</shop>
    <store id="1">Склад "Ромашка"</store>
    <client id="148">Сидоров Сидр Сергеевич</client>
    <created>2014-06-26 21:44:27+04</created>
    <action-time>2014-06-26 21:44:27+04</action-time>
    <summa>2300</summa>
    <cash>0</cash>
    <comment>возвращено по безналу</comment>
    <items type="array">
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product id="1056">
          <name>Рубашка Апельсин 33549 в полоску</name>
          <article>33549</article>
          <category id="3">Рубашка</category>
        </product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <price>2400</price>
        <discount>100</discount>
        <quantity>1</quantity>
        <barcodes>
             <barcode>2032914541315</barcode>
        </barcodes>
      </item>
    </items>
  </refund>

Добавление возврата

Запрос:

 POST /admin/refunds.xml
Возврат создается через указание номера продажи (тег <sale>). Т.е. вернуть можно только тот товар, который был проведен через систему.
Тег <cash> задает сумму возврата наличных денег. Соответственно, остаток суммы возврата система проведет по безналу. Таким образом, <cash>0<cash> задает признак возврата по безналу. Если тег <cash/> опущен, то, по-умолчанию, рассматривается возврат наличности.
При создании возврата можно указать дополнительный атрибут goods-source-behaviour, который может принимать значения:
  1. reserve: указывает, что при создании возврата необходимо вернуть товар в резерв на склад, в результате чего товар в свободном остатке не изменится.
  2. default: является значением по-умолчанию и указывает на необходимо вернуть товар в свободный остаток склада.

Тело запроса:

<refund>
  <sale>35623</sale>
  <user>23</user>
  <cash>500</cash>
  <comment>возврат брака</comment>
  <items type="array">
    <item>
      <product>6557</product>
      <modification>
        <parameter name="Цвет">Синий</parameter>
      </modification>
      <price>300</price>
      <discount>60</discount>
      <quantity>1</quantity>
    </item>
    <item>
      <product>67</product>
      <modification/>
      <price>1300</price>
      <discount>0</discount>
      <quantity>2</quantity>
    </item>
  </items>
</refund>

Ответ:

  <refund id="16">
    <saleId>35623</saleId>
    <user id="23"></user>
    <shop id="1">Ромашка</shop>
    <store id="1">Склад "Ромашка"</store>
    <client id="148">Сидоров Сидр Сергеевич</client>
    <created>2014-06-26 21:44:27+04</created>
    <action-time>2014-06-26 21:44:27+04</action-time>
    <summa>2300</summa>
    <cash>500</cash>
    <comment>возвращено по безналу</comment>
    <items type="array">
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product id="1056">Рубашка Апельсин 33549 в полоску</product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <price>2400</price>
        <discount>100</discount>
        <quantity>1</quantity>
      </item>
    </items>
  </refund>

Отмена возврата

Запрос:

 DELETE /admin/refunds/16.xml

Ответ:

HTTP/1.1 200 OK

Поступления и закупки от поставщиков

Закупка от поставщика отличается от обычного поступления только наличием тега <vendor>. Тег <cost> определяет суммарную закупочную стоимость всех позиций поступления.

Для работы с планируемыми (не проведенными) поступлениями, необходимо в путях запросов указывать planpurchases вместо purchases.

Список поступлений

Запрос:

 GET /admin/purchases.xml

Параметры:

  • page - номер страницы, начиная с нуля. Используется для листания списка. Чтобы получить все нужно в цикле листать страницы пока не закончатся поступления.
  • page-size - размер страницы (количество поступлений на странице). По-умолчанию и не может превышать 250.
  • products=detail - развернутые теги <product>
  • show-barcodes - признак наличия штрих-кодов в ответе
Список архивных(проведенных) и список планируемых(не проведеных) поступлений - это два разных списка, каждый из которых имеет свой счетчик id. Т.е. после проведения поступления он попадает в список архивных под новым id.

Ответ:

<purchases type="array">
  <purchase id="16">
    <store id="1">Склад "Ромашка"</store>
    <vendor id="22">ИП "Иванов И.И."</vendor>
    <user id="23">Иванов Андрей</user>
    <created>2014-06-26 21:44:27+04</created>
    <action-time>2014-06-26 21:44:27+04</action-time>
    <cost>3200</cost>
    <currency>RUB</currency>
    <rate>1</rate>
    <quantity>3</quantity>
    <comment>возврат брака</comment>
    <items type="array">
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product id="1056">
          <name>Рубашка Апельсин 33549 в полоску</name>
          <article>33549</article>
          <category id="3">Рубашка</category>
          <parameters>
            <parameter name="Торговая марка">Апельсин</parameter>
            <parameter name="Производитель">Китай</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>u2ccsAso5FM.jpg</original-url>
              <url>https://demo.sellper.ru/?image=1037</url>
              <description>Вид сверху</description>
            </image>
          </images>
          <created>2013-02-26 20:15:00+04</created>
        </product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <cost>2400</cost>
        <currency>RUB</currency>
        <rate>1</rate>
        <quantity>1</quantity>
        <barcodes>
             <barcode>2032914541315</barcode>
        </barcodes>
      </item>
      <item id="010ef0a8841bd2490a7e39a474cfed03">
        <product id="2557">
          <name>Чулки а-355</name>
          <article>а-355</article>
          <category id="76">Чулки</category>
          <parameters>
            <parameter name="Торговая марка">Колобок</parameter>
            <parameter name="Производитель">Россия</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>chulki-355.jpg</original-url>
              <url>https://demo.sellper.ru/?image=3455</url>
              <description/>
            </image>
          </images>
          <created>2013-06-16 22:16:00+04</created>
        </product>
        <modification>
          <parameter name="Рост">30</parameter>
          <parameter name="Цвет">Красный</parameter>
        </modification>
        <cost>400</cost>
        <currency>RUB</currency>
        <rate>1</rate>
        <quantity>2</quantity>
      </item>
    </items>
  </purchase>
</purchases>

Информация о поступлении

Запрос:

 GET /admin/purchases/16.xml

Параметры:

  • products=detail - развернутые теги <product>
  • show-barcodes - признак наличия штрих-кодов в ответе

Ответ:

  <purchase id="16">
    <store id="1">Склад "Ромашка"</store>
    <vendor id="22">ИП "Иванов И.И."</vendor>
    <created>2014-06-26 21:44:27+04</created>
    <action-time>2014-06-26 21:44:27+04</action-time>
    <cost>3200</cost>
    <currency>RUB</currency>
    <rate>1</rate>    
    <quantity>3</quantity>
    <comment>возврат брака</comment>
    <items type="array">
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product id="1056">
          <name>Рубашка Апельсин 33549 в полоску</name>
          <article>33549</article>
          <category id="3">Рубашка</category>
          <parameters>
            <parameter name="Торговая марка">Апельсин</parameter>
            <parameter name="Производитель">Китай</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>u2ccsAso5FM.jpg</original-url>
              <url>https://demo.sellper.ru/?image=1037</url>
              <description>Вид сверху</description>
            </image>
          </images>
          <created>2013-02-26 20:15:00+04</created>
        </product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <cost>2400</cost>
        <currency>RUB</currency>
        <rate>1</rate>
        <quantity>1</quantity>
        <barcodes>
             <barcode>2032914541315</barcode>
        </barcodes>
      </item>
      <item id="010ef0a8841bd2490a7e39a474cfed03">
        <product id="2557">
          <name>Чулки а-355</name>
          <article>а-355</article>
          <category id="76">Чулки</category>
          <parameters>
            <parameter name="Торговая марка">Колобок</parameter>
            <parameter name="Производитель">Россия</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>chulki-355.jpg</original-url>
              <url>https://demo.sellper.ru/?image=3455</url>
              <description/>
            </image>
          </images>
          <created>2013-06-16 22:16:00+04</created>
        </product>
        <modification>
          <parameter name="Рост">30</parameter>
          <parameter name="Цвет">Красный</parameter>
        </modification>
        <cost>400</cost>
        <currency>RUB</currency>
        <rate>1</rate>
        <quantity>2</quantity>
      </item>
    </items>
  </purchase>

Добавление поступления

Запрос:

 POST /admin/purchases.xml

Закупка от поставщика отличается от обычного поступления только наличием тега <vendor>. Тег <cost> определяет закупочную стоимость позиций поступления/возврата.

Тег <currency> определяет валюту текущего поступления. Одно из значений (RUB, USD, EUR, BYN, KZT, UAH).

Тег <rate> определяет курс указанной валюты для текущего поступления.

Товарную позицию можно идентифицировать 3-мя способами (в порядке приоритета):

  1. явно передать id товарной позиции (атрибут id тега item)
  2. явно передать ШК товарной позиции (атрибут barcode тега item)
  3. передать id карточки товара (тег product) + модификацию (тег modification)

Тело запроса:

<purchase>
  <store>1</store>
  <vendor>22</vendor>
  <user>23</user>
  <action-time>2020-06-26 21:53</action-time>
  <comment>новое супер-поступление</comment>
  <currency>RUB</currency>
  <rate>1</rate>
  <items>
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product>1056</product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <cost>2400</cost>
        <quantity>1</quantity>
      </item>
      <item id="010ef0a8841bd2490a7e39a474cfed03">
        <product>2557</product>
        <modification>
          <parameter name="Рост">30</parameter>
          <parameter name="Цвет">Красный</parameter>
        </modification>
        <cost>400</cost>
        <quantity>2</quantity>
      </item>
  </items>
</purchase>

Ответ:

<purchase id="116">
     <store id="1">Склад "Ромашка"</store>
    <vendor id="22">ИП "Иванов И.И."</vendor>
    <user id="23">Иванов Андрей</user>
    <created>2014-06-26 21:44:27+04</created>
    <action-time>2014-06-26 21:44:27+04</action-time>
    <cost>3200</cost>
    <currency>RUB</currency>
    <rate>1</rate>
    <quantity>3</quantity>
    <comment>возврат брака</comment>
    <items type="array">
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product id="1056">
          <name>Рубашка Апельсин 33549 в полоску</name>
          <article>33549</article>
          <category id="3">Рубашка</category>
          <parameters>
            <parameter name="Торговая марка">Апельсин</parameter>
            <parameter name="Производитель">Китай</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>u2ccsAso5FM.jpg</original-url>
              <url>https://demo.sellper.ru/?image=1037</url>
              <description>Вид сверху</description>
            </image>
          </images>
          <created>2013-02-26 20:15:00+04</created>
        </product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <cost>2400</cost>
        <currency>RUB</currency>
        <rate>1</rate>
        <quantity>1</quantity>
      </item>
      <item id="010ef0a8841bd2490a7e39a474cfed03">
        <product id="2557">
          <name>Чулки а-355</name>
          <article>а-355</article>
          <category id="76">Чулки</category>
          <parameters>
            <parameter name="Торговая марка">Колобок</parameter>
            <parameter name="Производитель">Россия</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>chulki-355.jpg</original-url>
              <url>https://demo.sellper.ru/?image=3455</url>
              <description/>
            </image>
          </images>
          <created>2013-06-16 22:16:00+04</created>
        </product>
        <modification>
          <parameter name="Рост">30</parameter>
          <parameter name="Цвет">Красный</parameter>
        </modification>
        <cost>400</cost>
        <currency>RUB</currency>
        <rate>1</rate>
        <quantity>2</quantity>
      </item>
    </items>
</purchase>

Изменение поступления

Если поступление еще не проведено (планируемое поступление), то в нем можно менять все.

Если поступление проведено (находится в архиве), то изменить в нем можно все, кроме склада и количества.

Провести(выполнить) планируемое поступление можно либо указав GET-параметр purchase, либо указав значение тега action-time. Например, …/planpurchases/234.xml?purchase В этом случае, в ответе поступлению будет присвоен идентификатор нового проведенного поступления.

Запрос:

 PUT /admin/purchases/116.xml

Тело запроса:

<purchase>
  <store>1</store>
  <vendor>22</vendor>
  <user>23</user>
  <action-time>2020-06-26 21:53</action-time>
  <comment>новое супер-поступление</comment>
  <currency>RUB</currency>
  <rate>1</rate>
  <items>
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product>1056</product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <cost>2400</cost>
        <quantity>1</quantity>
      </item>
      <item id="010ef0a8841bd2490a7e39a474cfed03">
        <product>2557</product>
        <modification>
          <parameter name="Рост">30</parameter>
          <parameter name="Цвет">Красный</parameter>
        </modification>
        <cost>400</cost>
        <quantity>2</quantity>
      </item>
  </items>
  </purchase>

Ответ: Аналогичен, ответу на добавление поступления.

Удаление поступления

В результате удаления, проведенного ранее поступления, будет создано аналогичное планируемое поступление, которое будет возвращено в ответе запроса на отмену проведенного поступления.

Запрос:

 DELETE /admin/purchases/116.xml

Ответ:

HTTP/1.1 200

<?xml version="1.0"?>
<purchase id="8284">
    <store id="1">2-o&#x439; &#x41C;&#x443;&#x440;&#x438;&#x43D;&#x441;&#x43A;&#x438;&#x439; &#x43F;&#x440;. 38</store>
    <vendor id="3">&#x436;&#x430;&#x43D;&#x43D;&#x430; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x434;&#x441;&#x442;&#x432;&#x43E;</vendor>
    <created>2022-01-29 17:29:07+03</created>
    <action-time/>
    <cost>0</cost>
    <currency>RUB</currency>
    <rate>1.00</rate>
    <quantity>20</quantity>
    <comment>&#x43D;&#x43E;&#x432;&#x43E;&#x435; &#x441;&#x443;&#x43F;&#x435;&#x440;-&#x43F;&#x43E;&#x441;&#x442;&#x443;&#x43F;&#x43B;&#x435;&#x43D;&#x438;&#x435;</comment>
    <items type="array" count="1">
        <item id="93a47e2f8219b9304ae61eb25496c7fe">
            <product id="48">&#x425;&#x430;&#x43B;&#x430;&#x442; &#x436;&#x435;&#x43D;. 215(&#x441;&#x430;&#x442;&#x43E;&#x440;&#x438;)</product>
            <modification>
                <parameter name="size">40</parameter>
                <parameter name="colour-sleeve">&#x431;&#x435;&#x43B;&#x44B;&#x439;-2</parameter>
            </modification>
            <cost>111</cost>
            <rate>77</rate>
            <cost_nat>8547</cost_nat>
            <price>3990</price>
            <discount>1000</discount>
            <quantity>20</quantity>
        </item>
    </items>
</purchase>

Перемещения

Список перемещений

Запрос:

 GET /admin/migrations.xml?parameter=value

Параметры:

  • page - номер страницы, начиная с нуля. Используется для листания списка. Чтобы получить все нужно в цикле листать страницы пока не закончатся перемещения.
  • page-size - размер страницы (количество перемещений на странице). По-умолчанию и не может превышать 250.
  • products=detail - развернутые теги <product>
  • show-barcodes - признак наличия штрих-кодов в ответе

Ответ:

<migrations type="array">
  <migration id="16">
    <store_from id="1">Склад "Ромашка"</store>
    <store_to id="2">Главный склад</store>
    <created>2014-06-26 21:44:27+04</created>
    <action-time>2014-06-26 21:44:27+04</action-time>
    <cost>3360.15</cost>
    <quantity>3</quantity>
    <comment>оплачено наличными</comment>
    <items type="array">
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product id="1056">
          <name>Рубашка Апельсин 33549 в полоску</name>
          <article>33549</article>
          <category id="3">Рубашка</category>
          <parameters>
            <parameter name="Торговая марка">Апельсин</parameter>
            <parameter name="Производитель">Китай</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>u2ccsAso5FM.jpg</original-url>
              <url>https://demo.sellper.ru/?image=1037</url>
              <description>Вид сверху</description>
            </image>
          </images>
          <created>2013-02-26 20:15:00+04</created>
        </product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <price>2400</price>
        <discount>0</discount>
        <quantity>1</quantity>
       <barcodes>
             <barcode>2032914541315</barcode>
        </barcodes>
      </item>
      <item id="010ef0a8841bd2490a7e39a474cfed03">
        <product id="2557">
          <name>Чулки а-355</name>
          <article>а-355</article>
          <category id="76">Чулки</category>
          <parameters>
            <parameter name="Торговая марка">Колобок</parameter>
            <parameter name="Производитель">Россия</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>chulki-355.jpg</original-url>
              <url>https://demo.sellper.ru/?image=3455</url>
              <description/>
            </image>
          </images>
          <created>2013-06-16 22:16:00+04</created>
        </product>
        <modification>
          <parameter name="Рост">30</parameter>
          <parameter name="Цвет">Красный</parameter>
        </modification>
        <price>400</price>
        <discount>70</discount>
        <quantity>2</quantity>
      </item>
    </items>
  </migration>
</migrations>

Информация о перемещении

Запрос:

 GET /admin/migrations/16.xml

Параметры:

  • products=detail - развернутые теги <product>
  • show-barcodes - признак наличия штрих-кодов в ответе

Ответ:

  <migration id="16">
    <store_from id="1">Склад "Ромашка"</store>
    <store_to id="2">Главный склад</store>
    <created>2014-06-26 21:44:27+04</created>
    <action-time>2014-06-26 21:44:27+04</action-time>
    <cost>3360.15</cost>
    <comment>оплачено наличными</comment>
    <items type="array">
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product id="1056">
          <name>Рубашка Апельсин 33549 в полоску</name>
          <article>33549</article>
          <category id="3">Рубашка</category>
          <parameters>
            <parameter name="Торговая марка">Апельсин</parameter>
            <parameter name="Производитель">Китай</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>u2ccsAso5FM.jpg</original-url>
              <url>https://demo.sellper.ru/?image=1037</url>
              <description>Вид сверху</description>
            </image>
          </images>
          <created>2013-02-26 20:15:00+04</created>
        </product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <price>2400</price>
        <discount>0</discount>
        <quantity>1</quantity>
       <barcodes>
             <barcode>2032914541315</barcode>
        </barcodes>
      </item>
      <item id="010ef0a8841bd2490a7e39a474cfed03">
        <product id="2557">
          <name>Чулки а-355</name>
          <article>а-355</article>
          <category id="76">Чулки</category>
          <parameters>
            <parameter name="Торговая марка">Колобок</parameter>
            <parameter name="Производитель">Россия</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>chulki-355.jpg</original-url>
              <url>https://demo.sellper.ru/?image=3455</url>
              <description/>
            </image>
          </images>
          <created>2013-06-16 22:16:00+04</created>
        </product>
        <modification>
          <parameter name="Рост">30</parameter>
          <parameter name="Цвет">Красный</parameter>
        </modification>
        <price>400</price>
        <discount>70</discount>
        <quantity>2</quantity>
      </item>
    </items>
  </migration>

Добавление перемещения

Запрос:

 POST /admin/migrations.xml

Тело запроса:

<migration>
  <store_from>1</store_from>
  <store_to>2</store_to>
  <user>23</user>
  <comment>новое супер-перемещение</comment>
  <items type="array">
    <item id="86e03fab6db4c6d9cf33e616622b6c45">
      <product>6557</product>
      <modification>
        <parameter name="Цвет">Синий</parameter>
      </modification>
      <quantity>1</quantity>
    </item>
    <item id="010ef0a8841bd2490a7e39a474cfed03">
      <product>67</product>
      <modification/>
      <quantity>2</quantity>
    </item>
  </items>
</migration>

Ответ:

<migration id="116">
  <store_from>1</store_from>
  <store_to>2</store_to>
  <user id="23">Иванова Лариса</user>
  <created>2012-06-26 21:44:27+04</created>
  <cost>2840</cost>
  <comment>новое супер-перемещение</comment>
  <items type="array">
    <item id="86e03fab6db4c6d9cf33e616622b6c45">
      <product id="6557">
        <name>Носки б-355</name>
        <article>б-355</article>
        <category id="54">Носки</category>
        <parameters>
          <parameter name="Торговая марка">Колобок</parameter>
          <parameter name="Производитель">Россия</parameter>
        </parameters>
        <images/>
        <created>2013-01-16 02:06:10+04</created>
      </product>
      <modification>
        <parameter name="Цвет">Синий</parameter>
      </modification>
      <price>300</price>
      <discount>60</discount>
      <quantity>1</quantity>
    </item>
    <item id="010ef0a8841bd2490a7e39a474cfed03">
      <product id="67">
        <name>Табурет</name>
        <article>2125м</article>
        <category id="58">Мебель</category>
        <parameters>
          <parameter name="Цвет">Красный</parameter>
        </parameters>
        <images/>
        <created>2013-06-24 22:06:10+04</created>
      </product>
      <modification/>
      <price>1300</price>
      <discount>0</discount>
      <quantity>2</quantity>
    </item>
  </items>
</migration>

Отмена перемещения

Запрос:

 DELETE /admin/migrations/116.xml

Ответ:

HTTP/1.1 200 OK

Списания и возвраты поставщикам

Возврат поставщику отличается от обычного списания только наличием тега <vendor>. Тег <cost> определяет закупочную стоимость списания и его позиций.

Список списаний

Запрос:

 GET /admin/restores.xml

Параметры:

  • page - номер страницы, начиная с нуля. Используется для листания списка. Чтобы получить все нужно в цикле листать страницы пока не закончатся списания.
  • page-size - размер страницы (количество списаний на странице). По-умолчанию и не может превышать 250.
  • products=detail - развернутые теги <product>
  • show-barcodes - признак наличия штрих-кодов в ответе

Ответ:

<restores type="array">
  <restore id="16">
    <store id="1">Склад "Ромашка"</store>
    <vendor id="22">ИП "Иванов И.И."</vendor>
    <user id="23">Иванов Андрей</user>
    <created>2014-06-26 21:44:27+04</created>
    <action-time>2014-06-26 21:44:27+04</action-time>
    <cost>3200</cost>
    <quantity>3</quantity>
    <comment>возврат брака</comment>
    <items type="array">
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product id="1056">
          <name>Рубашка Апельсин 33549 в полоску</name>
          <article>33549</article>
          <category id="3">Рубашка</category>
          <parameters>
            <parameter name="Торговая марка">Апельсин</parameter>
            <parameter name="Производитель">Китай</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>u2ccsAso5FM.jpg</original-url>
              <url>https://demo.sellper.ru/?image=1037</url>
              <description>Вид сверху</description>
            </image>
          </images>
          <created>2013-02-26 20:15:00+04</created>
        </product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <cost>2400</cost>
        <currency>RUB</currency>
        <rate>1</rate>
        <quantity>1</quantity>
        <barcodes>
             <barcode>2032914541315</barcode>
        </barcodes>
      </item>
      <item id="010ef0a8841bd2490a7e39a474cfed03">
        <product id="2557">
          <name>Чулки а-355</name>
          <article>а-355</article>
          <category id="76">Чулки</category>
          <parameters>
            <parameter name="Торговая марка">Колобок</parameter>
            <parameter name="Производитель">Россия</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>chulki-355.jpg</original-url>
              <url>https://demo.sellper
              .ru/?image=3455</url>
              <description/>
            </image>
          </images>
          <created>2013-06-16 22:16:00+04</created>
        </product>
        <modification>
          <parameter name="Рост">30</parameter>
          <parameter name="Цвет">Красный</parameter>
        </modification>
        <cost>400</cost>
        <currency>RUB</currency>
        <rate>1</rate>
        <quantity>2</quantity>
      </item>
    </items>
  </restore>
</restores>

Информация о списании

Запрос:

 GET /admin/restores/16.xml

Параметры:

  • products=detail - развернутые теги <product>
  • show-barcodes - признак наличия штрих-кодов в ответе

Ответ:

  <restore id="16">
    <store id="1">Склад "Ромашка"</store>
    <vendor id="22">ИП "Иванов И.И."</vendor>
    <created>2014-06-26 21:44:27+04</created>
    <action-time>2014-06-26 21:44:27+04</action-time>
    <cost>3200</cost>
    <quantity>3</quantity>
    <comment>возврат брака</comment>
    <items type="array">
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product id="1056">
          <name>Рубашка Апельсин 33549 в полоску</name>
          <article>33549</article>
          <category id="3">Рубашка</category>
          <parameters>
            <parameter name="Торговая марка">Апельсин</parameter>
            <parameter name="Производитель">Китай</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>u2ccsAso5FM.jpg</original-url>
              <url>https://demo.sellper.ru/?image=1037</url>
              <description>Вид сверху</description>
            </image>
          </images>
          <created>2013-02-26 20:15:00+04</created>
        </product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <cost>2400</cost>
        <currency>RUB</currency>
        <rate>1</rate>
        <quantity>1</quantity>
        <barcodes>
             <barcode>2032914541315</barcode>
        </barcodes>
      </item>
      <item id="010ef0a8841bd2490a7e39a474cfed03">
        <product id="2557">
          <name>Чулки а-355</name>
          <article>а-355</article>
          <category id="76">Чулки</category>
          <parameters>
            <parameter name="Торговая марка">Колобок</parameter>
            <parameter name="Производитель">Россия</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>chulki-355.jpg</original-url>
              <url>https://demo.sellper.ru/?image=3455</url>
              <description/>
            </image>
          </images>
          <created>2013-06-16 22:16:00+04</created>
        </product>
        <modification>
          <parameter name="Рост">30</parameter>
          <parameter name="Цвет">Красный</parameter>
        </modification>
        <cost>400</cost>
        <currency>RUB</currency>
        <rate>1</rate>
        <quantity>2</quantity>
      </item>
    </items>
  </restore>

Добавление списания

Запрос:

 POST /admin/restores.xml

Возврат поставщику отличается от обычного списания только наличием тега <vendor>. Тег <cost> определяет закупочную стоимость позиций списания/возврата.

Товарную позицию можно идентифицировать 3-мя способами перечисленными в разделе добавления поступления.

Тело запроса:

<restore>
  <store>1</store>
  <vendor>22</vendor>
  <user>23</user>
  <comment>новое супер-списание</comment>
  <items>
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product>1056</product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <cost>2400</cost>
        <currency>RUB</currency>
        <rate>1</rate>
        <quantity>1</quantity>
      </item>
      <item id="010ef0a8841bd2490a7e39a474cfed03">
        <product>2557</product>
        <modification>
          <parameter name="Рост">30</parameter>
          <parameter name="Цвет">Красный</parameter>
        </modification>
        <cost>400</cost>
        <currency>RUB</currency>
        <rate>1</rate>
        <quantity>2</quantity>
      </item>
  </items>
</restore>

Ответ:

<restore id="116">
     <store id="1">Склад "Ромашка"</store>
    <vendor id="22">ИП "Иванов И.И."</vendor>
    <user id="23">Иванов Андрей</user>
    <created>2014-06-26 21:44:27+04</created>
    <action-time>2014-06-26 21:44:27+04</action-time>
    <cost>3200</cost>
    <quantity>3</quantity>
    <comment>возврат брака</comment>
    <items type="array">
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product id="1056">
          <name>Рубашка Апельсин 33549 в полоску</name>
          <article>33549</article>
          <category id="3">Рубашка</category>
          <parameters>
            <parameter name="Торговая марка">Апельсин</parameter>
            <parameter name="Производитель">Китай</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>u2ccsAso5FM.jpg</original-url>
              <url>https://demo.sellper.ru/?image=1037</url>
              <description>Вид сверху</description>
            </image>
          </images>
          <created>2013-02-26 20:15:00+04</created>
        </product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <cost>2400</cost>
        <currency>RUB</currency>
        <rate>1</rate>
        <quantity>1</quantity>
      </item>
      <item id="010ef0a8841bd2490a7e39a474cfed03">
        <product id="2557">
          <name>Чулки а-355</name>
          <article>а-355</article>
          <category id="76">Чулки</category>
          <parameters>
            <parameter name="Торговая марка">Колобок</parameter>
            <parameter name="Производитель">Россия</parameter>
          </parameters>
          <images>
            <image id="1037">
              <original-url>chulki-355.jpg</original-url>
              <url>https://demo.sellper.ru/?image=3455</url>
              <description/>
            </image>
          </images>
          <created>2013-06-16 22:16:00+04</created>
        </product>
        <modification>
          <parameter name="Рост">30</parameter>
          <parameter name="Цвет">Красный</parameter>
        </modification>
        <cost>400</cost>
        <currency>RUB</currency>
        <rate>1</rate>
        <quantity>2</quantity>
      </item>
    </items>
</restore>

Отмена списания

Запрос:

 DELETE /admin/restores/116.xml

Ответ:

HTTP/1.1 200 OK

Резервы

Список резервов

Запрос:

 GET /admin/reserves.xml?parameter=value

Параметры:

  • page - номер страницы, начиная с нуля. Используется для листания списка. Чтобы получить все нужно в цикле листать страницы пока не закончатся резервы.
  • page-size - размер страницы (количество резервов на странице). По-умолчанию и не может превышать 250.
  • products=detail - развернутые теги <product>
  • show-barcodes - признак наличия штрих-кодов в ответе
  • type - тип(назначение) резерва: migration|reject|order|other

Ответ:

<reserves type="array">
  <reserve id="16">
    <type>migration</type>
    <status>new</status>
    <name>Мой резерв</name>
    <store id="1">Склад "Ромашка"</store>
    <store_to id="2">Склад "Второй"</store_to>
    <vendor id="2">ООО "Поставщик 1"</vendor>
    <order id="1001">100023</order>
    <client id="148">Сидоров Сидр Сергеевич</client>
    <created>2014-06-26 21:44:27+04</created>
    <comment>возвращено по безналу</comment>
    <items type="array">
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product id="1056">Рубашка Апельсин 33549 в полоску</product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <price>2400</price>
        <discount>100</discount>
        <quantity>1</quantity>
      </item>
       <barcodes>
             <barcode>2032914541315</barcode>
        </barcodes>
    </items>
  </reserve>
</reserves>

Информация о резерве

Запрос:

 GET /admin/reserves/16.xml

Параметры:

  • products=detail - развернутые теги <product>
  • show-barcodes - признак наличия штрих-кодов в ответе

Ответ:

  <reserve id="16">
    <type>migration</type>
    <status>new</status>
    <name>Мой резерв</name>
    <store id="1">Склад "Ромашка"</store>
    <store_to id="2">Склад "Второй"</store_to>
    <vendor id="2">ООО "Поставщик 1"</vendor>
    <order id="1001">100023</order>
    <client id="148">Сидоров Сидр Сергеевич</client>
    <created>2014-06-26 21:44:27+04</created>
    <comment>возвращено по безналу</comment>
    <items type="array">
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product id="1056">Рубашка Апельсин 33549 в полоску</product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <price>2400</price>
        <discount>100</discount>
        <quantity>1</quantity>
       <barcodes>
             <barcode>2032914541315</barcode>
        </barcodes>
      </item>
    </items>
  </reserve>

Создание резерва

Запрос:

 POST /admin/reserves.xml
При необходимости, можно создать резерв-перемещение. Для этого укажите идентификатор склада-приемника в теге store_to и тип migration в теге type.

Тело запроса:

<reserve>
  <store>1</store>
  <type>migration</type> /* 'migration', 'restore', 'reject' */
  <store_to>2</store_to> /* идентификатор склада-приемника */
  <name>Мой резерв</name>
  <comment>произвольный коментарий…</comment>
  <items>
    <item id="86e03fab6db4c6d9cf33e616622b6c45">
      <product>1056</product>
      <modification>
        <parameter name="Цвет">Синий</parameter>
      </modification>
      <price>2400</price>
      <discount>100</discount>
      <quantity>1</quantity>
    </item>
  </items>
</reserve>

Ответ:

  <reserve id="16">
    <type>other</type>
    <status>new</status>
    <name>Мой резерв</name>
    <store id="1">Склад "Ромашка"</store>
    <created>2014-06-26 21:44:27+04</created>
    <comment>возвращено по безналу</comment>
    <items type="array">
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product id="1056">Рубашка Апельсин 33549 в полоску</product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <price>2400</price>
        <discount>100</discount>
        <quantity>1</quantity>
      </item>
    </items>
  </reserve>

Изменение резерва

Запрос:

 PUT /admin/reserves/16.xml

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<reserve>
  <items>
    <item id="86e03fab6db4c6d9cf33e616622b6c45">
      <product>1056</product>
      <modification>
        <parameter name="Цвет">Синий</parameter>
      </modification>
      <quantity>2</quantity>
    </item>
  </items>
</reserve>

Ответ:

  <reserve id="16">
    <type>other</type>
    <status>new</status>
    <name>Мой резерв</name>
    <store id="1">Склад "Ромашка"</store>
    <created>2014-06-26 21:44:27+04</created>
    <comment>возвращено по безналу</comment>
    <items type="array">
      <item id="86e03fab6db4c6d9cf33e616622b6c45">
        <product id="1056">Рубашка Апельсин 33549 в полоску</product>
        <modification>
          <parameter name="Размер">40</parameter>
        </modification>
        <price>2400</price>
        <discount>100</discount>
        <quantity>2</quantity>
      </item>
    </items>
  </reserve>

Удаление(расформирование) резерва

Запрос:

 DELETE /admin/reserves/16.xml

Ответ:

HTTP/1.1 200 OK

Расходы и доходы

Получение списка расходов/доходов

Запроc:

 GET /admin/expenditures?parameter=value 

Параметры:

  • page - номер страницы, начиная с нуля. Используется для листания списка. Чтобы получить все нужно в цикле листать страницы пока не закончится список.
  • page-size - размер страницы (количество позиций на странице). По-умолчанию равен и не может превышать 250.
  • expense - признак расходов (указывается без значения).
  • income - признак доходов (указывается без значения).

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<expenditures type="array">
  <expenditure id="1">
    <budget id="3" class="retail">Из кассы</budget>
    <expense>1</expense>
    <employee id="22">Иванов Иван Иванович</employee> 
    <shop id="2">Магазин "Ромашка"</shop>
    <value>200</value>
    <comment>такси</comment>
    <cash>1</cash>
    <action>2013-09-24 12:05:20+04</action>
  </expenditure>
  <expenditure id="1">
    <budget id="4" class="retail">В кассу</budget>
    <income>1</income>
    <employee id="22">Иванов Иван Иванович</employee> 
    <shop id="2">Магазин "Ромашка"</shop>
    <value>500</value>
    <comment>за опоздание</comment>
    <cash>1</cash>
    <action>2013-09-24 13:05:20+04</action>
  </expenditure>
</expenditures>

Теги: - cash - признак наличных денег - employee - необязательный тег, привязка расхода к конкретному сотруднику (записать за сотрудником) - shop - необязательный тег, привязка расхода к конкретному магазину (записать за магазином) - expense - признак расхода - income - признак дохода

Получение параметров расхода/дохода

Запрос:

 GET /admin/expenditures/2.xml

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
  <expenditure id="2">
    <budget id="3" class="retail">Из кассы</budget>
    <expense>1</expense>
    <employee id="22">Иванов Иван Иванович</employee> 
    <shop id="2">Магазин "Ромашка"</shop>
    <value>200</value>
    <comment>такси</comment>
    <cash>1</cash>
    <action>2013-09-24 12:05:20+04</action>
  </expenditure>

Добавление расхода/дохода

Расходы можно добавлять пакетно по аналогии с товарами: достаточно корневым элементом сделать тег <expenditures>. Ответ отрабатывается аналогичным с товарами образом.
При необходимости указать расход за период, нужно использовать тег <period>. Например, расход, привязанный к конкретному дню (например, реклама), должен иметь <period>1 day</period>. Семантика значения соответствует семантики периода в PostgreSQL.

Тег <period> указывает на принадлежность расхода ко временному интервалу. Атрибут uniq не позволит добавить расход повторно.

Запрос:

 POST /admin/expenditures.xml

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
  <expenditure uniq="de65d240-ce2c-4044-a81e-589d593de071">
    <budget>3</budget>
    <period>7 days</period> 
    <shop>2</shop>
    <value>200</value>
    <comment>такси</comment>
    <cash>1</cash>
    <action>2013-09-24 12:05:20+04</action>
  </expenditure>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
  <expenditure id="2">
    <budget id="3" class="retail">Из кассы</budget>
    <expense>1</expense>
    <employee id="22">Иванов Иван Иванович</employee> 
    <shop id="2">Магазин "Ромашка"</shop>
    <value>200</value>
    <comment>такси</comment>
    <cash>1</cash>
    <action>2013-09-24 12:05:20+04</action>
  </expenditure>

Добавление множества расходов

При необходимости добавить в рамках одной транзакции множество расходов, необходимо их передавать в корневом тэге <expenditures> Разрешается создавать в одном запросе не более 300 расходов.

Запрос:

POST /admin/expenditures.xml

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<expenditures>
  <expenditure>...</expenditure>
  ...
  <expenditure>...</expenditure>
</expenditures>

Ответ:

HTTP/1.1 200 OK

<expenditures>
  <expenditure>...</expenditure>
  ...
  <expenditure>...</expenditure>
</expenditures>
В случае ошибки создания каких-либо расходов, остальные расходы буду созданы, а теги ошибочных расходов будут содержать описание ошибки.

Изменение параметров расхода/дохода

Запрос:

 PUT /admin/expenditures/2.xml

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
  <expenditure>
    <value>250</value>
  </expenditure>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
  <expenditure id="2">
    <budget id="3" class="retail">Из кассы</budget>
    <expense>1</expense>
    <employee id="22">Иванов Иван Иванович</employee> 
    <shop id="2">Магазин "Ромашка"</shop>
    <value>250</value>
    <comment>такси</comment>
    <cash>1</cash>
    <action>2013-09-24 12:05:20+04</action>
  </expenditure>

Удаление дохода/расхода

Запроc:

 DELETE /admin/expenditures/2.xml 

Ответ:

HTTP/1.1 200 OK

Справочники

Справочник статей расходов и доходов

Получение списка статей

Запроc:

 GET /admin/budgets?parameter=value 

Параметры:

  • page - номер страницы, начиная с нуля. Используется для листания списка. Чтобы получить все нужно в цикле листать страницы пока не закончится список.
  • page-size - размер страницы (количество позиций на странице). По-умолчанию и не может превышать 250.
  • expense - признак расходов (указывается без значения).
  • income - признак доходов (указывается без значения).

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<budgets type="array">
  <budget id="1">
    <name>Зарплата</name>
    <parent/>
    <comment>основная часть</comment>    
    <default_summa>30000</default_summa>
    <permanent>1</permanent>
    <analysis>1</analysis>
    <expense>1</expense>
    <income>0</income>
    <class/>
    <user id="23">Иванов Иван Иванович</user>
    <created>2013-09-24 12:05:20+04</created>
  </budget>
  <budget id="2">
    <name>Процент от продаж</name>
    <parent id="1">Зарплата</parent>
    <comment/>    
    <default_summa/>
    <permanent>0</permanent>
    <analysis>1</analysis>
    <expense>1</expense>
    <income>0</income>
    <class/>
     <created>2013-09-24 12:05:20+04</created>
  </budget>
  <budget id="3">
    <name>Из кассы</name>
    <parent/>
    <comment/>    
    <default_summa/>
    <permanent>0</permanent>
    <analysis>1</analysis>
    <expense>1</expense>
    <income>0</income>
    <class>retail</class>
     <created>2013-09-24 12:05:20+04</created>
  </budget>
</budgets>

Теги: - default_summa - сумма, которая будет подставляться по-умолчанию при вводе, если не указана другая - parent - родительская статья - permanent 0|1 - признак постоянной статьи - analysis 0|1 - признак участия в анализе работы предприятия - expense 0|1 - признак того, что статья является статьей расхода - income 0|1 - признак того, что статья является статьей дохода - class - произвольная классификация статьи для внутреннего использования

Получение параметров статьи

Запрос:

 GET /admin/budgets/2.xml

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
  <budget id="2">
    <name>Процент от продаж</name>
    <parent id="1">Зарплата</parent>
    <comment/>    
    <default_summa/>
    <permanent>0</permanent>
    <analysis>1</analysis>
    <expense>1</expense>
    <income>0</income>
    <class/>
    <created>2013-09-24 12:05:20+04</created>
  </budget>

Добавление статьи

Запрос:

 POST /admin/budgets.xml

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
  <budget>
    <name>Процент от продаж</name>
    <parent>1</parent>
  </budget>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
  <budget id="2">
    <name>Процент от продаж</name>
    <parent id="1">Зарплата</parent>
    <comment/>    
    <default_summa/>
    <permanent>0</permanent>
    <analysis>1</analysis>
    <expense>1</expense>
    <income>0</income>
    <class/>
    <created>2013-09-24 12:05:20+04</created>
  </budget>

Изменение статьи

Запрос:

 PUT /admin/budgets/2.xml

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
  <budget>
    <name>% от продаж</name>
  </budget>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
  <budget id="2">
    <name>% от продаж</name>
    <parent id="1">Зарплата</parent>
    <comment/>    
    <default_summa/>
    <permanent>0</permanent>
    <analysis>1</analysis>
    <expense>1</expense>
    <income>0</income>
    <class/>
    <created>2013-09-24 12:05:20+04</created>
  </budget>

Удаление статьи

Запроc:

 DELETE /admin/budgets/2.xml 

Ответ:

HTTP/1.1 200 OK

Подписки на события

Программа «Sellper» генерирует события определенных типов, перечисленных ниже. У Вас имеется возможность подписаться на любое из них. Под подпиской понимается привязка любого Вашего URL к конкретному типу события, при наступлении которого, по соответствующему URL будет отправлен POST-запрос с XML-данными события, в том числе данные объекта события <info/> (товара, клиента, склада). На одно событие можно оформить любое количество подписок.

Типы событий в программе:

  • order.create - создание нового заказа
  • order.update - изменение статуса заказа
  • order.delete - удаление заказа
  • reserve.create - создание нового резерва
  • reserve.update - изменение статуса резерва
  • reserve.delete - удаление (расформирование) резерва
  • client.create - создание нового клиента
  • client.update - изменение свойств клиента
  • client.delete - удаление клиента
  • product.create - создание нового товара
  • product.update - изменение свойств товара
  • product.delete - удаление товара
  • purchase.create - оприходование нового поступления
  • restore.create - списание резерва со склада
  • migration.create - перемещение резерва со склада в свободный остаток другого склада
  • sale.create - продажа клиенту
  • refund.create - возврат от клиента

Фактически подписчик информируется о происшедшем событии не сразу после его наступления, а через небольшой промежуток времени (несколько секунд). В теге <time/> передается реальное время возникновения события - именно когда событие было инициировано программой, а не доставлено подписчику.

Пример данных передаваемых подписчику при генерации события:

<?xml version="1.0" encoding="UTF-8"?>
<event>
    <time>2015-10-20 16:43:33</time>
    <name>product.create</name>
    <objectId>5362</objectId>
    <info><product id="10323"> ... </product></info>
</event>
При создании новой подписки у которой URL подписчика и название событие совпали с уже ранее созданной подпиской, новая подписка создана не будет, а будет возвращен XML ранее созданной подписки с указанием соответствующего атрибута (already-exists=1).

Подписка на создание нового заказа

Запроc:

 POST /admin/subs.xml 

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<sub>
  <event>order.create</event>
  <url>https://my-inet-magaz.ru/from-sellper/action.php</url>
</sub>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<sub id="101">
  <event>order.create</event>
  <url>https://my-inet-magaz.ru/from-sellper/action.php</url>
</sub>

POST-данные передаваемые подписчику:

<?xml version="1.0" encoding="UTF-8"?>
<event>
    <time>2020-10-22 19:45:43</time>
    <name>order.create</name>
    <objectId>1001</objectId>
</event>

Подписка на изменение заказа

Запроc:

 POST /admin/subs.xml 

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<sub>
  <event>order.update</event>
  <url>https://my-inet-magaz.ru/from-sellper/action.php</url>
</sub>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<sub id="102">
  <event>order.update</event>
  <url>https://my-inet-magaz.ru/from-sellper/action.php</url>
</sub>

POST-данные передаваемые подписчику:

<?xml version="1.0" encoding="UTF-8"?>
<event>
    <time>2020-10-22 19:45:43</time>
    <name>order.update</name>
    <objectId>1001</objectId>
</event>

Подписка на добавление клиента

Запроc:

 POST /admin/subs.xml 

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<sub>
  <event>client.create</event>
  <url>https://my-inet-magaz.ru/from-sellper/action.php</url>
</sub>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<sub id="103">
  <event>client.create</event>
  <url>https://my-inet-magaz.ru/from-sellper/action.php</url>
</sub>

POST-данные передаваемые подписчику:

<?xml version="1.0" encoding="UTF-8"?>
<event>
    <time>2015-10-22 19:45:43</time>
    <name>client.create</name>
    <info><client id="443"> ... </client></info>
</event>

Подписка на изменение клиента

Запроc:

 POST /admin/subs.xml 

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<sub>
  <event>client.update</event>
  <url>https://my-inet-magaz.ru/from-sellper/action.php</url>
</sub>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<sub id="104">
  <event>client.update</event>
  <url>https://my-inet-magaz.ru/from-sellper/action.php</url>
</sub>

POST-данные передаваемые подписчику:

<?xml version="1.0" encoding="UTF-8"?>
<event>
    <time>2015-10-22 19:45:43</time>
    <name>client.update</name>
    <info><client id="443"> ... </client></info>
</event>

Подписка на удаление клиента

Запроc:

 POST /admin/subs.xml 

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<sub>
  <event>client.delete</event>
  <url>https://my-inet-magaz.ru/from-sellper/action.php</url>
</sub>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<sub id="105">
  <event>client.delete</event>
  <url>https://my-inet-magaz.ru/from-sellper/action.php</url>
</sub>

POST-данные передаваемые подписчику:

<?xml version="1.0" encoding="UTF-8"?>
<event>
    <time>2015-10-22 19:45:43</time>
    <name>client.delete</name>
    <info><client id="443"> ... </client></info>
</event>

Подписка на добавление товара

Запроc:

 POST /admin/subs.xml 

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<sub>
  <event>product.create</event>
  <url>https://my-inet-magaz.ru/from-sellper/action.php</url>
</sub>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<sub id="106">
  <event>product.create</event>
  <url>https://my-inet-magaz.ru/from-sellper/action.php</url>
</sub>

POST-данные передаваемые подписчику:

<?xml version="1.0" encoding="UTF-8"?>
<event>
    <time>2015-10-22 19:45:43</time>
    <name>product.create</name>
    <info><product id="5432"> ... </product></info>
</event>

Подписка на изменение свойств товара

Запроc:

 POST /admin/subs.xml 

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<sub>
  <event>product.update</event>
  <url>https://my-inet-magaz.ru/from-sellper/action.php</url>
</sub>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<sub id="107">
  <event>product.update</event>
  <url>https://my-inet-magaz.ru/from-sellper/action.php</url>
</sub>

POST-данные передаваемые подписчику:

<?xml version="1.0" encoding="UTF-8"?>
<event>
    <time>2015-10-22 19:45:43</time>
    <name>product.update</name>
    <info><product id="5432"> ... </product></info>
</event>

Подписка на удаление товара

Запроc:

 POST /admin/subs.xml 

Тело запроса:

<?xml version="1.0" encoding="UTF-8"?>
<sub>
  <event>product.delete</event>
  <url>https://my-inet-magaz.ru/from-sellper/action.php</url>
</sub>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<sub id="108">
  <event>product.delete</event>
  <url>https://my-inet-magaz.ru/from-sellper/action.php</url>
</sub>

POST-данные передаваемые подписчику:

<?xml version="1.0" encoding="UTF-8"?>
<event>
    <time>2015-10-22 19:45:43</time>
    <name>product.delete</name>
    <info><product id="5432"> ... </product></info>
</event>

</sub></code>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<sub id="109">
  <event>store.update</event>
  <url>https://my-inet-magaz.ru/from-sellper/action.php</url>
  <store>1</store>
</sub>

POST-данные передаваемые подписчику:

<?xml version="1.0" encoding="UTF-8"?>
<event>
    <time>2015-10-22 19:45:43</time>
    <name>store.update</name>
    <info><store id="1" modified-time="2015-10-22 19:44:01"></store></info>
</event>

Пример PHP-кода подписчика обработки события на изменения остатков на складе:

<code>
<?php
// Получить и разобрать XML объекта события
$data = file_get_contents('php://input');
$xevent = new SimpleXMLElement($data);
$eventName = (string)$xevent->name;
$storeID = (int)$xevent->info->store->attributes()[['id']];
$time = (string)$xevent->info->store->attributes()[['modified-time']];

// получить измененные позиции склада для store.update
$time = urlencode($time);
$request = new HTTP_Request2("https://mylogin:mypassword@mydomain.sellper.ru/admin/stores/{$storeID}.xml?changed-from={$time}", HTTP_Request2::METHOD_GET);
$request->setConfig(array(
     'ssl_verify_peer'   => FALSE,
     'ssl_verify_host'   => FALSE
));
$response = $request->send();
$response_Body = $response->getBody();  
$xstoreItems = new SimpleXMLElement($response_Body);

// сохранить измененные позиции остатков товаров в файл
file_put_contents("/tmp/{$eventName}.{$storeID}.xml", $xstoreItems->asXML());
?>

*/

Получение списка подписок

Запроc:

 GET /admin/subs.xml 

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<subs type="array">
  <sub id="100">
    <event>order.create</event>
    <url>https://my-inet-magaz.ru/admin/create-order.php</url>
    <shop>1</shop>
  </sub>
  <sub id="102">
    <event>client.create</event>
    <url>https://my-inet-magaz.ru/admin/create-client.php</url>
  </sub>
</subs>

Получение данных по конкретной подписке

Запроc:

 GET /admin/subs/56.xml 

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
  <sub id="56">
    <event>order.create</event>
    <url>https://my-inet-magaz.ru/admin/create-order.php</url>
    <shop>1</shop>
  </sub>

Удаление подписки

Запроc:

 DELETE /admin/subs/77.xml 

Ответ:

HTTP/1.1 200 OK

Заголовки и логические ошибки ответа

В ответе сервера, в случае ошибки 500, может придти xml с логической ошибкой работы приложения.

Например, при попытке создать карточку товара с названием, аналогичным в списке, система вернет xml:

<?xml version="1.0" encoding="UTF-8"?>
<error type="logic" index="ALREADY EXISTS" class="product" id="3497" name="1000">Аналогичная карточка товара "1000" уже существует</error>

, где, в качестве атрибутов ошибки, выступает вся необходимая для анализа информация. В значении тега будет представлен «читаемый» текст ошибки.

Возможные заголовки

	        400 => 'Bad request',
	        401 => 'Unauthorized',
	        402 => 'Payment Required',
	        403 => 'Forbidden',
	        404 => 'Not found',
	        500 => 'Internal Server Error',
	        501 => 'Not Implemented',
	        503 => 'Service Temporarily Unavailable',

Получение списка возможных логических ошибок

Запроc:

 GET /admin/errors.xml 

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
<errors>
  <error>IS NOT FOUND</error>
  <error>ALREADY EXISTS</error>
  <error>EMPTY VALUE</error>
  <error>INVALID VALUE</error>
  <error>IMPOSSIBLE TO DO</error>
</errors>
integrations/api.txt · Последнее изменение: 2024/04/10 08:25 — admin

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki