Все операции, производимые на сайте интернет-магазина «ТоргПрод» (далее — ИМ), можно производить программным способом через HTTP-запросы. Данный документ описывает формат таких запросов и ответов.
1. Общее
Все объекты и атрибуты объектов, используемые в ИМ имеют два способа наименования. Их можно рассматривать, как одно и то же название одной сущности, используемое в разных ситуациях.
Далее в документации термины атрибут и поле считаются взаимозаменяемыми и означают одно и то же. |
Забегая вперед можно сказать, что одно название используется при операциях чтения и поиска по базе ИМ — read-название, а второе — при операциях записи (создания и редактирования сущностей) — write-название. В каждой конкретной операции будут описаны оба названия.
В качестве примера приведем атрибут, отвечающий за название в карточке продукции:
Атрибут | Write-название | Read-название |
---|---|---|
Название продукции |
|
|
1.1. Авторизация
Для всех участников ИМ — и покупателей, и поставщиков — единой точкой входа является сайт https://www.bgoperator.ru/bgmarket/. Далее личные кабинеты предоставляют разные функции в зависимости от типа логина. Через свой логин можно делать все операции с товарами, прайсом и заказами, как вручную (через веб-браузер), так и программно, посылая HTTP-запросы на определнные URL-ы.
При программном HTTP-запросе к ИМ необходимо указывать ваши логин и пароль в
HTTP-заголовке Authorization
. Значение заголовка можно сформировать, например,
так:
$ echo -n 'ВАШ_ЛОГИН:ВАШ_ПАРОЛЬ' | base64 -
На выходе должна получиться строка вида Z3B0YXNoa286cGFzc3dvcmQ=
. Далее
заголовок используется в таком виде:
Authorization:Basic Z3B0YXNoa286cGFzc3dvcmQ=
1.2. Общие принципы запросов
1.2.1. Write-запросы
Write-запросы используются для создания и редактирования объектов в базе ИМ.
Write-запросы — это обычные GET- или POST-запросы. На вход такие запросы
принимают параметры либо через query string, либо через указание param=value
в
теле POST-запроса. Ответ на такие запросы - это JSON, содержащий либо общие
ошибки, либо объект данных с указанием ошибок в конкретных полях, либо объект данных.
При write-запросах необходимо указывать все обязательные поля, а также все заполненные изменяемые поля. Иначе поле, для которого не было указано значение, но оно заполнено в базе ИМ будет затерто пустым значением. |
Также при write-запросах в ответ всегда возвращается наиболее полная информация о редактируемом объекте. То есть, если редактируется объект без указания необязательных полей, то в ответе все равно будут содержаться эти поля, но с пустыми значениями. |
Общие параметры
При каждом программном HTTP-запросе необходимо всегда указывать 3 обязательных параметры и один параметр, обязательный при определенных запросах.
-
fid
— значение этого параметра зависит от конкретного запроса, например,fid=101713762162
; -
__api
— значение этого параметра всегда должно быть равным2
:__api=2
; -
__act
— значение этого параметра всегда должно быть равнымsend
илиq
, например,__act=send
; -
__task
— значение этого параметра зависит от конкретного запроса, например,__task=add
. Этот параметр не всегда обязательный.
Заполнение полей
Следует обратить внимание, что при посыле программных HTTP-запросов необходимо
кодировать значения полей в URI encoding. Например, при запросе на создание
карточки товара с использованием curl
значение параметров нужно указывать с
использованием ключа --data-urlencode
, а не -d
. Пример, смотреть в Создание карточки продукции.
Ошибки при write-запросах
При создании или редактировании объектов могут возникнуть ошибки. Например, поле, указанное, как обязательное не будет передано в write-запросе.
Общие ошибки
Общие ошибки могут возникнуть до проверки указанных в write-запросе полей. Поэтому ответный JSON будет содержать только код общей ошибки и текстовый комментарий.
Пример общей ошибки:
{
"errors": [
{
"1107": [
"100212209492"
]
}
]
}
Здесь 1107
— код ошибки, а 100212209492
— комментарий к ошибке. Если
комментария к ошибке не предполагается, то вместо объекта в массиве errors
будет содердаться числовой код ошибки.
Коды общих ошибок можно посмотреть в Коды и описания общих ошибок |
Ошибки валидации полей
При ошибке валидации поля в ответном JSON для данного поля будет возвращено указанное значение и текст ошибки валидации.
Пример ошибки валидации поля:
...
"f_1002110007": {
"e": "Книга с таким штрихкодом уже существует. ",
"v": "9785950095704"
},
...
Здесь видно, что при создании товара указанный штрихкод уже существует в базе ИМ. В данном
случае для поля f_1002110007
в поле e
содержится текст ошибки валидации, а в
в поле v
указано значение, которое было отправлено при запросе.
1.2.2. Read-запросы
Чтение объекта из базы ИМ может осуществляеться при помощи простого GET-запроса по id объекта. Ответ на такой запрос - это JSON с полями объекта. Обязательными параметрами такого запроса являются следующие:
-
fid
— значение этого параметра зависит от конкретного запроса, например,fid=101713762162
; -
__act
— значение этого параметра всегда должно быть равнымsend
:__act=send
; -
__api
— значение этого параметра всегда должно быть равным2
:__api=2
.
Пример read-запроса:
$ curl -s -X GET \
-H 'Authorization:Basic AuthString' \
'https://www.bgoperator.ru/bgmarket/forms?fid=101713597138&act=send&__api=2'
Ответ:
{
"f_ci_row_num_100610024200": {
"v": "1"
},
"f_1006210028_100610024200": {
"v": "2"
},
"f_1006110005_100610024200": {
"v": "00005"
},
"f_1006910006_100610024200": {
"v": "100212662269"
},
"f_1006210013_100610024200": {
"v": "333"
},
"f_1006210008_100610024200": {
"v": "10"
},
"f_ci_row_num_100610024100": {
"v": "2"
},
"f_1006210028_100610024100": {
"v": "2"
},
"f_1006110005_100610024100": {
"v": "00004"
},
"f_1006910006_100610024100": {
"v": "100212662267"
},
"f_1006210013_100610024100": {
"v": "222"
},
...
}
1.2.3. Read-запросы на основе GraphQL
Поиск и чтение объектов из базы ИМ может осуществляеться при помощи языка запросов GraphQL. Это обычный POST-запрос с заголовком запроса:
Content-Type:application/json
Тело такого запроса — это JSON с двумя полями: query
и variables
. Ответ на
такой запрос - это опять же JSON. Конкретные запросы и ответы описаны ниже.
Пример запроса получения некоторых атрибутов товара по заданному id товара:
query {
meta {
t_2(id:100212209241) {
name
author
isbn_
}
}
}
И ответ на такой запрос:
{
"data": {
"meta": {
"t_2": {
"name": "Основные загрязнители и здоровье человека",
"author": "Надежкина Е.В., Надежкина Е.С., Тушавина О.В., Хуснетдинова К.А., Молодова О.В.",
"isbn_": [
"978-5-4316-0369-3"
]
}
}
}
}
2. Поставщику
2.1. Создание карточки продукции
Write-запрос.
Общее название объектов продукции в базе ИМ — t_2
.
После создания карточки продукции, она появится в списке
.Поля продукции ISBN и EAN13 (штрихкод) могут содержать несколько значений. Однако текущая версия Shop API не позволяет добавлять несколько значений к существующемим значениям поля за один вызов API. Добавить несколько значений возможно лишь передавая одно значение за один вызов API. Пример добавления новых ISBN и EAN13 в существуюшую карточку продукции смотреть в Редактирование карточки продукции. |
2.1.1. Обязательные поля
Атрибут | Требования к заполнению | Write-название | Read-название | ||
---|---|---|---|---|---|
Название (основное заглавие) |
|
|
|||
Автор |
|
|
|||
ISBN |
Корректный ISBN. Уникальный ISBN. Если в базе будет найдена книга с указанным ISBN, то новый объект не будет создан и запрос вернет ошибку валидации.
|
|
|
||
Штрихкод |
Штрихкод должен состоять из 13 цифр. Уникальный штрихкод. Если в базе будет найдена книга с указанным штрихкодом, то новый объект не будет создан и запрос вернет ошибку валидации.
|
|
|
||
Тираж |
Целое число больше нуля. |
|
|
||
Количество страниц |
Целое число больше нуля. |
|
|
||
Год издания |
Целое число больше нуля. |
|
|
||
Вид переплета |
Одна из двух строк: "в обл." или "в пер." |
|
|
||
Возрастная категория |
Одна из строк "0", "6", "12", "16", "18". |
|
|
||
Место издания |
|
|
|||
Вес в гр. |
Целое число больше нуля. |
|
|
||
Описание полное (аннотация) |
|
|
2.1.2. Остальные необязательные поля
Атрибут | Требования к заполнению | Write-название | Read-название |
---|---|---|---|
УДК |
|
|
|
Серия |
|
|
|
Ширина в см. |
Дробное число, разделитель точка ".". Максимум 4 разряда после точки. |
|
|
Толщина в см. |
Дробное число, разделитель точка ".". Максимум 4 разряда после точки. |
|
|
Высота в см. |
Дробное число, разделитель точка ".". Максимум 4 разряда после точки. |
|
|
Первые сведения об ответственности |
|
|
|
Редактор |
|
|
|
Составитель |
|
|
|
Переводчик |
|
|
|
Художник |
|
|
|
Сведения об издании |
|
|
2.1.3. Запрос
$ curl -s -X POST \
-H 'Authorization:Basic AuthString' \
--data-urlencode 'f_1002410001=Автор' \
--data-urlencode 'f_1002110000=Название' \
--data-urlencode 'f_1002110006=978-5-9500957-0-4' \
--data-urlencode 'f_1002110007=9785950095704' \
--data-urlencode 'f_1002110011=1000' \
--data-urlencode 'f_1002410018=100' \
--data-urlencode 'f_1002410019=2017' \
--data-urlencode 'f_1002410004=в обл.' \
--data-urlencode 'f_1002410015=0' \
--data-urlencode 'f_1002110013=Москва' \
--data-urlencode 'f_1002210000=500' \
--data-urlencode 'f_1002110018=<p>Описание <b>полное</b></p>' \
-d 'fid=101713762162' \
-d '__act=send' \
-d '__task=add' \
-d '__api=2' \
'https://www.bgoperator.ru/bgmarket/forms'
2.1.4. Ответ
{
"f_id": {
"v": "100212662274"
},
"f_1002410001": {
"v": "Автор"
},
"f_1002110000": {
"v": "Название"
},
"f_1002110006": {
"v": "978-5-9500957-0-4"
},
"f_1002110016": {
"v": ""
},
"f_1002110007": {
"v": "9785950095704"
},
"f_1002110011": {
"v": "1000"
},
"f_1002410018": {
"v": "100"
},
"f_1002410019": {
"v": "2017"
},
"f_1002410004": {
"v": "в обл."
},
"f_1002410003": {
"v": ""
},
"f_1002410015": {
"v": "0"
},
"f_1002110013": {
"v": "Москва"
},
"f_1002210000": {
"v": "500"
},
"f_1002210002": {
"v": ""
},
"f_1002210004": {
"v": ""
},
"f_1002210001": {
"v": ""
},
"f_1002110010": {
"v": ""
},
"f_1002410010": {
"v": ""
},
"f_1002410012": {
"v": ""
},
"f_1002410011": {
"v": ""
},
"f_1002410013": {
"v": ""
},
"f_1002110017": {
"v": ""
},
"f_1002110018": {
"v": "<p>Описание <b>полное<\\/b><\\/p>"
}
}
2.2. Поиск товаров в базе ИМ
Read-запрос на основе GraphQL.
Продукцию можно искать по разным атрибутам. Далее приводится пример поиска по ISBN.
2.2.1. GraphQL Запрос
query ($cond: [Condition]!) {
meta {
getSrcObs(typeName: t_2, first: 10, conditions:$cond) {
edges {
node {
... on t_2 {
id
name
author
isbn_
ean_13
edition
publishyear
cover
age_category
city
weight
text
subtitle
text_full
udc
series
width
thickness
height
contributorstatement
editor
compiler
translator
illustrator
coverimage
}
}
}
}
}
}
Переменные запроса:
{
"cond": [{
"attr": "isbn_",
"ct": "EQ",
"val": "978-5-9500957-0-1"
}]
}
2.2.2. curl
запрос
$ curl -s -XPOST \
-H 'Content-Type:application/json' \
-H 'Authorization:Basic AuthString' \
'https://www.bgoperator.ru/bgmarket/forms?fid=101713843141&__act=q' -s -d '
{
"query": "query ($cond: [Condition]!) { meta { getSrcObs(typeName: t_2, first: 10 conditions:$cond) { edges { node { ... on t_2 { id name author isbn_ ean_13 edition publishyear cover age_category city weight text subtitle text_full udc series width thickness height contributorstatement editor compiler translator illustrator } } } } } }",
"variables": {
"cond": [{
"attr": "isbn_",
"ct": "EQ",
"val": "978-5-9500957-0-1"
}]
}
}'
2.2.3. Ответ
{
"data": {
"meta": {
"getSrcObs": {
"edges": [
{
"node": {
"id": "100212662267",
"name": "Такое-то название",
"author": "Автор изменение",
"isbn_": [
"978-5-9500957-0-1"
],
"ean_13": [
"9785950095701"
],
"edition": "1000",
"publishyear": "2017",
"cover": "в обл.",
"age_category": "0",
"city": "Москва",
"weight": 500,
"text": null,
"subtitle": null,
"text_full": "<p>Описание <b>ПОЛНОЕ</b></p>",
"udc": null,
"series": null,
"width": null,
"thickness": null,
"height": null,
"contributorstatement": null,
"editor": null,
"compiler": null,
"translator": null,
"illustrator": null,
"coverimage": [
"1002110015/20180205/44855806/noun_63037_cc-3.png"
]
}
}
]
}
}
}
}
2.3. Редактирование карточки продукции
Write-запрос.
В данном запросе необходимо указать id продукции в базе ИМ. Данный запрос
отличается от запроса на создание карточки товара как раз тем, что
дополнительными параметрами здесь являются id
и __task
.
2.3.1. Запрос
$ curl -s -X POST \
-H 'Authorization:Basic AuthString' \
--data-urlencode 'f_1002410001=Отредатированнй автор' \
--data-urlencode 'f_1002110000=Оредактированное название' \
--data-urlencode 'f_1002110006=978-5-9500957-0-3' \
--data-urlencode 'f_1002110007=9785950095703' \
--data-urlencode 'f_1002110011=1000' \
--data-urlencode 'f_1002410018=100' \
--data-urlencode 'f_1002410019=2017' \
--data-urlencode 'f_1002410004=в обл.' \
--data-urlencode 'f_1002410015=0' \
--data-urlencode 'f_1002110013=Москва' \
--data-urlencode 'f_1002210000=500' \
--data-urlencode 'f_1002110018=<p>Описание <b>полное</b></p>' \
-d 'id=100212662274' \
-d 'fid=101713762162' \
-d '__act=send' \
-d '__task=edit' \
-d '__api=2' \
'https://www.bgoperator.ru/bgmarket/forms'
2.3.2. Ответ
{
"f_id": {
"v": "100212662274"
},
"f_1002410001": {
"v": "Отредатированнй автор"
},
"f_1002110000": {
"v": "Оредактированное название"
},
"f_1002110006": {
"v": [
"978-5-9500957-0-4",
"978-5-9500957-0-3"
]
},
"f_1002110016": {
"v": ""
},
"f_1002110007": {
"v": [
"9785950095704",
"9785950095703"
]
},
"f_1002110011": {
"v": "1000"
},
"f_1002410018": {
"v": "100"
},
"f_1002410019": {
"v": "2017"
},
"f_1002410004": {
"v": "в обл."
},
"f_1002410003": {
"v": ""
},
"f_1002410015": {
"v": "0"
},
"f_1002110013": {
"v": "Москва"
},
"f_1002210000": {
"v": "500"
},
"f_1002210002": {
"v": ""
},
"f_1002210004": {
"v": ""
},
"f_1002210001": {
"v": ""
},
"f_1002110010": {
"v": ""
},
"f_1002410010": {
"v": ""
},
"f_1002410012": {
"v": ""
},
"f_1002410011": {
"v": ""
},
"f_1002410013": {
"v": ""
},
"f_1002110017": {
"v": ""
},
"f_1002110018": {
"v": "<p>Описание <b>полное<\\/b><\\/p>"
}
}
2.4. Загрузка изображения к карточке продукции
Данный запрос является отдельным запросом из-за загрузки файла. Однако, запрос
все равно возвращает JSON. В качестве параметра здесь выступает параметр idOb
в query string URL-а запроса. Его значением должен быть id продукции.
2.4.1. Запрос
$ curl -s -X POST \
-H 'Authorization:Basic AuthString' \
-F 'fl=@/full/path/to/image.png' \
'https://www.bgoperator.ru/bgmarket/uploadutil?idOb=100212662267&idAt=1002110015&gmode=4&add=0&translit=1'
2.4.2. Ответ
{
"success": true,
"file": "1002110015/20180207/05522627/image.png#0#0#0"
}
2.5. Создание записей в прайсе
Write-запрос.
Прайс - это набор записей, каждая из которых содержит продукцию, цену поставщика за единицу продукции и ставку НДС. На сайте поставщик может просматривать и редактирвоать свое предложение на странице
. Если запись активная, то ИМ может заказать у поставщика данную позицию. В прайсе можно менять все атрибуты: цену, ставку НДС, активность. Позиии прайса также можно удалять совсем.В прайсе можно создавать несколько записей за один запрос. Но во избежание долгих ответов следует ограничиться максимум 100 записей на один запрос.
При создании записей в прайсе наименования параметров для каждой записи
формируются из постоянной и переменной частей. Переменная часть - это строка
вида $id<номер позиции прайса в запросе>
. Далее в таблице для простоты чтения
приводится описание параметров с переменной частью $id1
.
Атрибут | Требования к заполнению | Write-название | Read-название | ||
---|---|---|---|---|---|
Признак активности записи |
"2" - запись активна. "1" - запись неактивна. |
|
|
||
Артикул поставщика |
Обязательное для заполнение поле. Должно быть уникально в пределах всего прайса поставщика.
|
|
|
||
id продукции в базе ИМ |
Обязательное поле. Должен быть указан id существующей в базе ИМ продукции
|
|
|
||
Цена поставщика |
Дробное число, разделитель точка ".". Максимум 2 разряда после точки. |
|
|
||
Ставка НДС |
Если поствщик применяет ОСН, то одна из строк "0", "10" или "18". Если поставщик применяет УСН, то пусто. |
|
|
||
Признак добаления записи |
Всегда "1". |
|
Поле указания параметров для всех добавляемых в прайс записей нужно добавить еще
один параметр значение которого - это строка из всех переменных частей записей,
разделенных символом ";". Например, для двух записей это будет так:
f_companyitem=$id1;$id2
.
В ответе переменная часть заменяется на id созданной записи в прайсе.
Стоит также обратить внимание на два параметра запроса: f_companyitem_m
и
f_companyitem_entr
. При запросе на создание записей в прайсе значение
параметра f_companyitem_m
следует всегда указывать 0. А значение параметра
f_companyitem_entr
должно быть равно количеству создаваемых записей.
Далее приводится запрос на создание двух записей в прайсе.
2.5.1. Запрос
$ curl -s -X POST \
-H 'Authorization:Basic AuthString' \
--data-urlencode 'f_1006210028_$id1=2' \
--data-urlencode 'f_1006110005_$id1=00004' \
--data-urlencode 'f_1006910006_$id1=100212662267' \
--data-urlencode 'f_1006210013_$id1=222' \
--data-urlencode 'f_1006210008_$id1=10' \
--data-urlencode 'f_companyitem_$id1_add=1' \
--data-urlencode 'f_1006210028_$id2=2' \
--data-urlencode 'f_1006110005_$id2=00005' \
--data-urlencode 'f_1006910006_$id2=100212662269' \
--data-urlencode 'f_1006210013_$id2=333' \
--data-urlencode 'f_1006210008_$id2=10' \
--data-urlencode 'f_companyitem_$id2_add=1' \
--data-urlencode 'f_companyitem=$id1;$id2' \
--data-urlencode 'f_companyitem_m=0' \
--data-urlencode 'f_companyitem_entr=2' \
-d 'fid=101713597138' \
-d '__act=send' \
-d '__task=edit' \
-d '__api=2' \
'https://www.bgoperator.ru/bgmarket/forms'
2.5.2. Ответ
{
"f_ci_row_num_100610024200": {
"v": "1"
},
"f_1006210028_100610024200": {
"v": "2"
},
"f_1006110005_100610024200": {
"v": "00005"
},
"f_1006910006_100610024200": {
"v": "100212662269"
},
"f_1006210013_100610024200": {
"v": "333"
},
"f_1006210008_100610024200": {
"v": "10"
},
"f_ci_row_num_100610024100": {
"v": "2"
},
"f_1006210028_100610024100": {
"v": "2"
},
"f_1006110005_100610024100": {
"v": "00004"
},
"f_1006910006_100610024100": {
"v": "100212662267"
},
"f_1006210013_100610024100": {
"v": "222"
},
"f_1006210008_100610024100": {
"v": "10"
},
"f_ci_row_num_$id": {
"v": "3"
},
"f_1006210028_$id": {
"v": ""
},
"f_1006110005_$id": {
"v": ""
},
"f_1006910006_$id": {
"v": ""
},
"f_1006210013_$id": {
"v": ""
},
"f_1006210008_$id": {
"v": ""
},
"f_companyitem": {
"v": "100610024200;100610024100;$id"
}
}
2.6. Редактирование записей в прайсе
Write-запрос. Для подготовки данных используется read-запрос.
Чтобы отредактировать записи в прайс-листе необходимо сначала узнать их порядковые номера. Для этого сначала нужно прочитать прайс обычным read-запросом, найти нужные позиции, запомнить их id и порядковые номера.
Далее приводим запрос, редактирующий две позиции прайса, находящиеся на 10 и 11 позиции.
2.6.1. Read-запрос для чтения полного прайса
$ curl -s -X GET \
-H 'Authorization:Basic AuthString' \
'https://www.bgoperator.ru/bgmarket/forms?fid=101713597138&act=send&__api=2'
Ответ
...
"f_ci_row_num_100610010000": {
"v": "10"
},
"f_1006210028_100610010000": {
"v": "2"
},
"f_1006110005_100610010000": {
"v": "000011170"
},
"f_1006910006_100610010000": {
"v": "100212208545"
},
"f_1006210013_100610010000": {
"v": "1222"
},
"f_1006210008_100610010000": {
"v": "10"
},
"f_ci_row_num_100610008000": {
"v": "11"
},
"f_1006210028_100610008000": {
"v": "2"
},
"f_1006110005_100610008000": {
"v": "00002"
},
"f_1006910006_100610008000": {
"v": "100212194663"
},
"f_1006210013_100610008000": {
"v": "200"
},
"f_1006210008_100610008000": {
"v": "18"
},
...
Здесь видно, что в ответном JSON записи прайса идут последовательно. Каждая запись
начинается с объекта вида f_ci_row_num_100610010000
. Здесь 100610010000
— это
id записи прайса. А поле v
внутри объекта f_ci_row_num_100610010000
— порядковый номер записи в прайсе. Теперь можно переходить к редактированию
выбранных записей.
2.6.2. Write-запрос редактирования записей прайса
$ curl -s -X POST \
-H 'Authorization:Basic AuthString' \
--data-urlencode 'f_1006210028_100610010000=2' \
--data-urlencode 'f_1006210013_100610010000=2000' \
--data-urlencode 'f_1006210008_100610010000=18' \
--data-urlencode 'f_1006210028_100610008000=2' \
--data-urlencode 'f_1006210013_100610008000=3000' \
--data-urlencode 'f_1006210008_100610008000=18' \
--data-urlencode 'f_companyitem=100610010000;100610008000' \
--data-urlencode 'f_companyitem_m=9' \
--data-urlencode 'f_companyitem_entr=2' \
-d 'fid=101713597138' \
-d '__act=send' \
-d '__task=edit' \
-d '__api=2' \
'https://www.bgoperator.ru/bgmarket/forms'
Заполнение параметров здесь осуществляется по тем же правилам, что описаны в Редактирование записей в прайсе.
Интерес запроса представляют параметры f_companyitem_m=9
и
f_companyitem_entr=2
. Их значения задаются следующим образом:
-
Значение
f_companyitem_m
должно равняться минимальному порядковому номеру редактируемых записей минус 1; -
Значение
f_companyitem_entr
должно равняться количеству редактируемых записей в прайсе.
2.6.3. Ответ
{
"f_ci_row_num_100610008000": {
"v": "1"
},
"f_1006210028_100610008000": {
"v": "2"
},
"f_1006110005_100610008000": {
"v": "00002"
},
"f_1006910006_100610008000": {
"v": "100212194663"
},
"f_1006210013_100610008000": {
"v": "3000"
},
"f_1006210008_100610008000": {
"v": "18"
},
"f_ci_row_num_100612209288": {
"v": "2"
},
"f_1006210028_100612209288": {
"v": "2"
},
"f_1006110005_100612209288": {
"v": "5005"
},
"f_1006910006_100612209288": {
"v": "100210392677"
},
"f_1006210013_100612209288": {
"v": "100"
},
"f_1006210008_100612209288": {
"v": "0"
},
"f_ci_row_num_$id": {
"v": "3"
},
"f_1006210028_$id": {
"v": ""
},
"f_1006110005_$id": {
"v": ""
},
"f_1006910006_$id": {
"v": ""
},
"f_1006210013_$id": {
"v": ""
},
"f_1006210008_$id": {
"v": ""
},
"f_companyitem": {
"v": "100610008000;100612209288;$id"
}
}
В ответе можно не обращать внимание на объекты вида f_ci_row_num_*
. Они
содержут порядковые номера отредактированных записей в пределах этого ответа.
2.7. Выгрузка заказа поставщику
Заказ поставщику формируется в базе ИМ. Уведомление об этом рассылается на почту, выданную при регистрации поставщика. У каждого заказа есть id. Имея такой id заказ можно читать и изменять программно, используя логин и пароль поставщика. Читать заказ можно двумя способами. Через read-запрос на основе GraphQL и через обычный read-запрос. Запрос на основе GraphQL отличается от обычного read-запроса помимо формата ответа тем, что в GraphQL запросе можно указать только требуемые для ситуации поля заказа. И еще одно отличие состоит в том, что GraphQL запрос и ответ представляют более удобную для чтения человеком структуру. Так же, как и с прайсом write-запрос на изменение заказа подгтавливается при помощи данных, полученных из обычного read-запроса.
Заказ поставщику состоит из шапки и позиций заказа.
Общее название объектов заказов в базе ИМ -- t_8
.
Общее название объектов позиций заказов в базе ИМ -- t_9
.
2.7.1. Поля шапки заказа
Атрибут | Требования к заполнению | Write-название | Read-название |
---|---|---|---|
Статус заказа |
Обязательное для заполнение поле. Значение — число 1, 2, 4, 6 или 9.
|
|
|
Сумма заказа |
Значение данного поля не может быть изменено напрямую. Значение всегда пересчитывается на основе позиций заказа. В шапке заказа данное поле приводится для информации. |
|
|
id поставщика в базе ИМ |
Значение данного поля не может быть изменено. В шапке заказа данное поле приводится для информации. |
|
|
id покупателя в базе ИМ |
Значение данного поля не может быть изменено. В шапке заказа данное поле приводится для информации. |
|
|
Список id позиций заказа (см. Поля позиции заказа) |
Значение данного поля — это строка, состоящая из id позиций заказа, разделенных через симво ";". Значение данного поля не стоит менять, если редактируется заказ, состав позиций которого не нужно менять. Другими словами при write-запросе это поле нужно передавать как есть, без изменений. |
|
2.7.2. Поля позиции заказа
Названия полей позиции заказа формируются из постоянной и переменной частей. Переменная часть - это строка
вида <id позиции заказа в заказе>
. Далее в таблице для простоты чтения
приводится описание параметров с переменной частью $id1
(в рабочем режиме
переменная часть может выглядеть, например так: 100918030111826101
).
Атрибут | Требования к заполнению | Write-название | Read-название | ||
---|---|---|---|---|---|
id продукции в базе ИМ |
Значение данного поля не может быть изменено. В позиции заказа данное поле приводится для информации. |
|
|
||
Цена продукции |
Значение данного поля не может быть изменено. В позиции заказа данное поле приводится для информации. |
|
|
||
Количество |
Обязательное для заполнение поле. Целое число больше нуля.
|
|
|
||
Сумма позиции заказа |
Значение данного поля не может быть изменено напрямую. Значение всегда пересчитывается на основе позиции заказа. В позиции заказа данное поле приводится для информации. |
|
|
2.7.3. GraphQL Запрос
В GraphQL запросе позиции заказа объединяются в поле bind_t_9_order
, которое
содержит поле edges
, которое в свою очередь содержит массив объектов.
Каждый объект в этом массиве содержит поля конкретной позиции заказа.
query ($orderId:ID!) {
meta {
t_8(id:$orderId) {
dataN
supplier {
id
inn
}
buyer_org {
id
inn
}
order_starus
amount
bind_t_9_order(first:1000) {
edges {
node {
... on t_9 {
id
item {
id
}
price
quantity
order_item_status
}
}
}
}
}
}
}
Переменные запроса:
{
"orderId": "100818030111790008"
}
curl
запрос
$ curl -s -XPOST \
-H 'Content-Type:application/json' \
-H 'Authorization:Basic AuthString' \
'https://www.bgoperator.ru/bgmarket/forms?fid=101713704459&__act=q' -s -d '
{
"query": "query ($orderId:ID!) { meta { t_8(id:$orderId) { dataN supplier {
id inn } buyer_org { id inn } order_starus amount bind_t_9_order(first:1000) {
edges { node { id ... on t_9 { item { id } price quantity order_item_status } } } } } } }",
"variables": {
"orderId": "100818030111790008"
}
}'
Ответ
{
"data": {
"meta": {
"t_8": {
"dataN": "20.03.2018 10:52:13",
"supplier": {
"id": "100112114676",
"inn": "7707353941"
},
"buyer_org": {
"id": "100110735986",
"inn": "7701023055"
},
"order_starus": 1,
"amount": 3080,
"bind_t_9_order": {
"edges": [
{
"node": {
"id": "100918030111790108",
"item": {
"id": "100213751958"
},
"price": 440,
"quantity": 7,
"order_item_status": 1
}
}
]
}
}
}
}
}
2.8. Read-запрос
Здесь в параметрах query string в качестве значения обоих параметров — prx
и
id
— нужно указать id заказа.
$ curl -s -X GET \
-H 'Authorization:Basic AuthString' \
'https://www.bgoperator.ru/bgmarket/forms?prx=100818030111826001&id=100818030111826001&fid=101713704459&act=send&__api=2'
2.8.1. Ответ
{
"f_1008210044": {
"v": "2"
},
"f_1008910018": {
"v": "100113752451"
},
"f_1008910031": {
"v": "100112114676"
},
"f_1009910006_100918030111826101": {
"v": "100213751958"
},
"f_1009210015_100918030111826101": {
"v": "472"
},
"f_1009210025_100918030111826101": {
"v": "19"
},
"f_1009210023_100918030111826101": {
"v": "8968.0"
},
"f_orderitem": {
"v": "100918030111826101"
},
"f_1008210023": {
"v": "8968"
}
}
2.9. Редактирование заказа поставщику
Write-запрос.
В write-запросе на изменение заказа поставщику можно указывать только те поля, которые можно изменять (см. Поля шапки заказа и Поля позиции заказа). На данный момент это только количество позиции заказа и статус заказа. Статус можно менять только с 2 на 4.
Также, параметром данного write-запроса является id заказа, который
указывается в двух местах: поле id
тела запроса и поле prx
в query string
URL-а запроса.
2.9.1. Запрос
$ curl -s -X POST \
-H 'Authorization:Basic AuthString' \
--data-urlencode 'f_1008210044=2' \
--data-urlencode 'f_1009210025_100918030111826101=17' \
--data-urlencode 'f_orderitem=100918030111826101' \
-d 'id=100818030111826001' \
-d 'fid=101713704459' \
-d '__act=send' \
-d '__task=edit' \
-d '__api=2' \
'https://www.bgoperator.ru/bgmarket/forms?prx=100818030111826001'
2.9.2. Ответ
Как и описано в Write-запросы в ответ приходит наиболее полная информация о заказе, не смотря на то, что в запросе были указаны не все поля.
{
"f_1008210044": {
"v": "2"
},
"f_1008910018": {
"v": "100113752451"
},
"f_1008910031": {
"v": "100112114676"
},
"f_1009910006_100918030111826101": {
"v": "100213751958"
},
"f_1009210015_100918030111826101": {
"v": "472"
},
"f_1009210025_100918030111826101": {
"v": "17"
},
"f_1009210023_100918030111826101": {
"v": "8024.0"
},
"f_orderitem": {
"v": "100918030111826101"
},
"f_1008210023": {
"v": "8024.0"
}
}
3. Покупателю
3.1. Чтение оптового прайса
Read-запрос на основе GraphQL.
3.1.1. GraphQL Запрос
query {
meta {
getSrcObs(typeName: t_6, first: 100) {
edges {
node {
... on t_6 {
item {
id
name
author
isbn_
ean_13
edition
publishyear
cover
age_category
city
weight
text
subtitle
text_full
udc
series
width
thickness
height
contributorstatement
editor
compiler
translator
illustrator
coverimage
storage_rest
}
wholesale_price
vat
}
}
}
}
}
}
Переменные запроса:
{}
3.1.2. curl
запрос
$ curl -s -XPOST \
-H 'Content-Type:application/json' \
-H 'Authorization:Basic AuthString' \
'https://www.bgoperator.ru/bgmarket/forms?fid=101713757195&__act=q' -s -d '
{
"query": "query { meta { getSrcObs(typeName: t_6, first: 100) { edges { node { ... on t_6 { item { id name author isbn_ ean_13 edition publishyear cover age_category city weight text subtitle text_full udc series width thickness height contributorstatement editor compiler translator illustrator coverimage storage_rest} wholesale_price vat} } } } } }",
"variables": {}
}'
3.1.3. Ответ
{
"data": {
"meta": {
"getSrcObs": {
"edges": [
{
"node": {
"item": {
"id": "100213751958",
"name": "Роботы работают",
"author": "Антонов И. К., Зарудняк М. С.",
"isbn_": [
"978-5-9500957-0-2"
],
"ean_13": [
"9785950095702"
],
"edition": "500",
"publishyear": "2017",
"cover": null,
"age_category": "в обл.",
"city": "Москва",
"weight": 300,
"text": "<p></p>",
"subtitle": null,
"text_full": "<p><span>В этой книге описана история автоматизации туристического оператора \"Библио-Глобус\". Сформулированы принципы, которые позволили стать компании крупнейшей на конкурентном рынке и удерживать позиции при всех перипетиях последних лет. Не предлагая универсальных решений, авторы описывают проверенные собственной практикой подходы к организации работы ИТ-отдела максимально эффективным образом.</span></p>",
"udc": "004.9:379.85",
"series": null,
"width": 16,
"thickness": 1,
"height": 22,
"contributorstatement": null,
"editor": null,
"compiler": null,
"translator": null,
"illustrator": null,
"coverimage": [
"1002110015/20180110/74291065/978-5-9500957-0-2.png"
],
"storage_rest": 16.0,
},
"wholesale_price": 400,
"vat": null
}
}
]
}
}
}
}
3.2. Создание заказа
Секция в работе |
3.3. Чтение заказа
Секция в работе |
4. Коды и описания общих ошибок
Секция в работе |