12

Техническое описание API
Версия API 2.7

Техническое описание API
Изменения
2.7
2.6
2.5
2.4
2.3
2.2.
2.1.
1. Основные сведения
2. Подключение к API
2.1. Аутентификация
3 Получение Каталога
3.1 Дерево категорий
3.2 Список товаров
3.3 Наличие товаров и цены
3.4 Получение изображений по товару
4. Работа с заказами
4.1 Чтение списка заказов
Получаем список заказов
Получаем конкретный заказ
Фильтрация заказов по дате создания
4.2 Создание
4.3 Добавление/Изменение/Удаление товаров
4.4 Получение списка строк по заказу
4.5 Подписка на отгрузку
Примеры
Получение каталога на PHP
Получение каталога в 1С
Обработки 1С для получение каталога и товаров
Изменения
2.7
Изменлися метод на получение изображений
2.6
Изменилаль логика работы со строками заказа. Старые методы на создание, изменение, удаление строк заказа (platform.order_items.create, platform.order_items.update, platform.order_items.destroy) будут отключены с 01.06.2021.
2.5
В списке товаров добавлены штрихкоды (параметр barcodes)
2.4
Фильтрация заказов по дате создания
2.3
Добавлена информация о гарантии и РРЦ в cписок товаров
2.2.
Добавлены обработки 1С для получения каталога и остатков
2.1.
При получении остатков и цен добавлен в ответе параметр delivery_days. Кол-во дней доставки, если 0 – это означает что товар на нашем основном складе и будет доступен для отгрузки “день в день”, если больше 0 – то товар находится на удаленном складе и дата отгрузки заказа будет увеличена на delivery_days.
1. Основные сведения
domain – домен по которому осуществляется вход в b2b

Обмен данными ведется через протокол HTTP (POST) по принципу JSON-RPC (кроме случаев получения данных из статики). JSON сообщение пересылается в теле HTTP запроса. Методы помеченные как “статика” вызываются получением данных по HTTP по указанному адресу, все остальные работают по принципу JSON-RPC по адресу https://%domain%/api/2.

При общении по JSON-RPC в ответе всегда будет приходить объект

{

“commandid”: 260767355,
“success” : true,
“message” : “some message”

}
success — обозначает успешность выполнения операции (true/false)
message — текстовое сообщение (описание ошибки если success=true)
commandid — ид команды, часто удобно для отладки и разбора почему Ваш запрос не выполнился
Просим Вас обратить внимание на ограничение кол-во вызовов на каждый метод и проектировать интеграцию с ресурсами компании согласно этим данным. Ограничения рассчитаны на максимально рациональное и адекватное использование ресурсов.

По вопросам работы с API Вы можете написать в техподержку на api@i-t-p.pro. В теме (заголовке) письма необходимо указать код клиента (можно запросить у Вашего менеджера) и один из ИНН. При отсутствии в теме письма кода клиента или ИНН – письмо рассматриваться не будет

2. Подключение к API
2.1. Аутентификация
Ограничение на кол-во вызовов 10 / мин

Аутентификация происходит на основе логина и пароля. Можно использовать логин пароль одного из Ваших аккаунтов. Для этого необходимо отправить запрос на

{
“data”: {
“login”: “ClientLogin”,
“password”: “ClientPassword”
},
“request”: {
“method”: “login”,
“model” : “auth”,
“module”: “quickfox”
}
}
При успешной аутентификации в ответе получим

{
“session” : “F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE”,
“event”: “0”,
“success”: true (false если аутентификация не удалась)
}
Все последующие запросы к API следует выполнять с указанием сессии в JSON сообщении

{

“session”: “F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE”

}
А при запросе файлов из статики в Cookie добавлять параметр

session=F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE

В случае ошибки прохождения авторизации на запрос к API в ответе будет success : false и соответсвующиее сообщение, а при запросе файлов статики будет HTTP 404.

3 Получение Каталога
3.1 Дерево категорий
Ограничение на кол-во вызовов 1 / мин

Адрес

Пример ответа

[

{
“id”:91,
“leaf”:true,
“name”:”кресла детские автомобильные”,
“childrens” : [ … ]
},

]
id — уникальный номер категории
leaf — обозначает является ли категория листовой ( т. е. не имеет дочерних элементов)
name — наименование категории
childrens — массив дочерних элементов
Список категорий обновляется раз в сутки ночью (чаще чем раз в сутки качать этот файл не имеет смысла)

3.2 Список товаров
Ограничение на кол-во вызовов 2 / час

Адрес

Пример ответа

[ …
{
“barcodes”:”02803497857632,2803497857632,4680011240549″
“category”:747,
“name”:”Ролик захвата обходного лотка (лоток 1) HP LJ P2015/P2014/M2727 MFP (RL1-1525)”,
“part”:”RL1-1525″,
“multiplicity” : 1,
“sku”:2881306,
“vendor”:”Hewlett-Packard”,
“volume”:0.000105,
“has_image” : true,
“rrp” : 5000,
“warranty”: “12”, в месяцах
“weight”:0.02
},

]
category — id категории товара
name — наименование товара
part — Партномер
multiplicity – Кратность
sku — Артикул
vendor — Вендор
volume — Объем
weight — Вес
has_image — Обозначает есть ли у товара изображения для скачивания
rrp — РРЦ
warranty — Гарантия
barcodes — список штрихкодов товара (данная информация может содержать ошибки)
Список товаров обновляется раз в сутки ночью (чаще чем раз в сутки качать этот файл не имеет смысла).

3.3 Наличие товаров и цены
Ограничение на кол-во вызовов 10 / час

Данный метод возвращает товары только в наличии.

Делаем запрос на со след. JSON сообщением

{
“request”: {
“method”: “get_active_products”,
“model”: “client_api”,
“module”: “platform”
},
“session”: “F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE”
}
При успешном выполнении в ответе будет

{
“data”: {
“products”: [

{
“price”: 58.21,
“qty”: “***”,
“sku”: 1586891,
“delivery_days” : 0
}

],
“total”: 119982
},
“message”: “read”,
“success”: true
}
price — Цена (руб.)
qty — Кол-во
sku — Артикул
delivery_days – Кол-во дней доставки, если 0 – это означает что товар на нашем основном складе и будет доступен для отгрузки “день в день”, если больше 0 – то товар находится на удаленном складе и дата отгрузки заказа будет увеличена на delivery_days
Получение активных товаров по категории (включая дочерние)

{
“request”: {
“method”: “get_active_products”,
“model”: “client_api”,
“module”: “platform”
},
“filter” : [
{
“property” : “category”,
“operator” : ‘=’,
“value” : 71 ид категории
}
],
“session”: “F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE”
}
Получение цены и остатка по конкретному товару

{
“request”: {
“method”: “get_active_products”,
“model”: “client_api”,
“module”: “platform”
},
“filter” : [
{
“property” : “sku”,
“operator” : ‘=’,
“value” : 1586891 артикул товара
}
],
“session”: “F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE”
}
3.4 Получение изображений по товару
Ограничение на кол-во вызовов 2 / c

Изображения на товары из категории 18+ отдаются без водных знаков. Остальные отдаются с водным знаком.

Делаем запрос на со след. JSON сообщением

{
“filter”: [
{
“operator”: “=”,
“property”: “sku”,
“value”: 43950 фильтр по артикулу товара
}
],
“request”: {
“method”: “read_new”,
“model”: “products_clients_images”,
“module”: “platform”
},
“session”: “F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE”,
}
Можно одним запросом получить изображения по нескольким товарам

{
“filter”: [
{
“operator”: “IN”,
“property”: “sku”,
“value”: [43950, 88943 …] фильтр по артикулам товаров ( не более 100 шт)
}
],
“request”: {
“method”: “read_new”,
“model”: “products_clients_images”,
“module”: “platform”
},
“session”: “F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE”,
}
При успешном выполнении в ответе будет

{
“Full_Time”: 36,
“commandid”: 318125009,
“data”: {
“product_images”: [
{
“id”: 2217386,
“sku”: 43950,
“url”: “product_images/with_watermark/472/4335472.jpg”,
},

],
“total”: 3
},
“event”: “177”,
“message”: “”,
“success”: true
}
url — относительный путь для скачивания ( полный путь будет выглядеть как https://%domain%/ + url + ?size=original прим. “/product_images/with_watermark/472/4335472.jpg?size=original”)
sku — Артикул
Ограничение на кол-во скачиваний фото по ссылкам – 5 / с

4. Работа с заказами
Статусы заказа

Наименование ID статуса
Новый 1
Частично в резерве 15
Нет в наличии 16
В резерве 2
Комплектуется 18
Отгружен 19
Отменен 20
Статусы позиции заказа

Наименование ID статуса
Новый 21
Частично в резерве 23
Нет в наличии 24
В резерве 22
Комплектуется 25
Отгружен 9
Отменен 10
4.1 Чтение списка заказов
Получаем список заказов
Ограничение на кол-во вызовов 20 / мин

Запрос

{
“filter”: [
{
“operator”: “IN”,
“property”: “status”,
“value”: [
1,
2,
15,
16,
18
]
}
],
“pager”: {
“limit”: 60,
“start”: 0
},
“request”: {
“method”: “read”,
“model”: “orders”,
“module”: “platform”
},
“session”: “F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE”,
“sort”: [
{
“direction”: “DESC”,
“property”: “id”
}
]
}
filter – блок указывающий на фильтрацию данных, в данном случае по полю статус заказа
pager – постраничная навигация, в данном случае берем первые 60 строк (limit) с начала ( start = 0)
sort – порядок сортировки, в данном случае по полю id ( property=id) по убыванию (direction=DESC)
Ответ

{
“Full_Time”: 105,
“commandid”: 260825759,
“data”: {
“orders”: [
{
“partner_comment”: “”,
“confirmed”: false,
“create_date”: “2017-07-25T17:08:54”,
“delivery_date”: “2017-07-26”,
“id”: 765889,
“partner_logins.name”: “some_login”,
“status”: 1,
“sum”: 10
},
{
“partner_comment”: “”,
“confirmed”: true,
“create_date”: “2017-07-25T16:35:14”,
“id”: 765786,
“partner_logins.name”: “some_login”,
“status”: 1,
“sum”: 10,
“sum_discount”: 10
}
],
“total”: 2
},
“event”: “”,
“message”: “p_read”,
“success”: true
}
id – ид заказа
status – статус
create_date – дата создания
confirmed – подписан на отгрузку
delivery_date – дата доставки
sum – сумма
sum_discount – сумма со скидкой
partner_logins.name – наименование логина под которым был сделан заказ
Получаем конкретный заказ
Ограничение на кол-во вызовов 1 / с

Запрос

{
“filter”: [
{
“operator”: “=”,
“property”: “id”,
“value”: 765786
}
],
“pager”: {
“limit”: 60,
“start”: 0
},
“request”: {
“method”: “read”,
“model”: “orders”,
“module”: “platform”
},
“session”: “F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE”,
“sort”: [
{
“direction”: “DESC”,
“property”: “id”
}
]
}
Ответ

{
“Full_Time”: 105,
“commandid”: 260825775,
“data”: {
“orders”: [
{
“partner_comment”: “”,
“confirmed”: true,
“create_date”: “2017-07-25T16:35:14”,
“id”: 765786,
“partner_logins.name”: “SomeLogin”,
“status”: 1,
“sum”: 10,
“sum_discount”: 10
}
],
“total”: 1
},
“event”: “”,
“message”: “p_read”,
“success”: true
}
Фильтрация заказов по дате создания
Ограничение на кол-во вызовов 1 / с

Запрос

{
“filter”: [
{
“operator”: “>”, >, <, >=, <=, =, != "property": "create_date", "value": "2021-01-01" YYYY-MM-DD } ], "pager": { "limit": 60, "start": 0 }, "request": { "method": "read", "model": "orders", "module": "platform" }, "session": "F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE", "sort": [ { "direction": "DESC", "property": "id" } ] } Фильтры можно комбинировать Запрос { "filter": [ { "operator": ">“,
“property”: “create_date”,
“value”: “2021-01-01”
},{
“operator”: “<", "property": "create_date", "value": "2021-02-01" }, { "operator": "IN", "property": "status", "value": [ 1, 2, 15, 16, 18 ] } ], "pager": { "limit": 60, "start": 0 }, "request": { "method": "read", "model": "orders", "module": "platform" }, "session": "F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE", "sort": [ { "direction": "DESC", "property": "id" } ] } 4.2 Создание Ограничение на кол-во вызовов 10 / мин Запрос { "request": { "method": "create", "model": "orders", "module": "platform" }, "session": "F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE", "data": [ { "partner_comment": " Комментарий " } ] } partner_comment - комментарий к заказу Ответ { "Full_Time": 50, "commandid": 260767355, "data": { "orders": [ { "partner_comment": " Комментарий ", "create_date": "2017-07-25T17:08:54", "id": 123, "status": 1 } ], "total": 1 }, "event": "", "message": "create", "success": true } id - ид заказа status - статус create_date - дата создания partner_comment - комментарий 4.3 Добавление/Изменение/Удаление товаров Ограничение на кол-во вызовов 1 / с Запрос { "data": { "destroy": [ { "doc_id": 2163923, "id": 10485199 } ], "update": [ { "doc_id": 2163923, "wish_price": 1106.92, "wish_price_comment" : "", "qty": 1, "sku": 40798 } ], }, "request": { "method": "client_update", "model": "order_items", "module": "platform" }, "session": "F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE", } destroy - массив строк на удаление doc_id - ид заказа id - ид строки заказа update - список строк на добавление/изменение doc_id - ид заказа qty - кол-во sku - артикул wish_price - желаемая цена wish_price_comment - комментарий к желаемой цене На каждый товарв из массива "update" будет следующая логика обработки : Если такого артикула нет в заказе, то он будет добавлен Если артикул уже есть в заказе, то его поля qty,wish_price, wish_price_comment будут обновлены. В ответе будет массив созданных и измененных товаров ( удаленных не будет) { "Full_Time": 76, "commandid": 260786118, "data": { "order_items": [ { "client_rezerv": 0, "cost_delivery": 0, "create_time": "2017-07-25T17:36:40", "discount_percent": 0, "doc_id": 765521, "id": 3744104, "nds_id": 1, "price": 515.63, "price_discount": 515.63, "price_with_delivery" : 515.63, "products.name": "Картридж струйный Cactus CS-C8727 черный для №27 HP DeskJet 3320/3325/3420/3425/3520 (20ml)", "products.part": "CS-C8727", "qty": 1, "sku": 282542, "status": 21, "wish_price": 0, "wish_price_comment": "" } ], "total": 1 }, "event": "", "message": "create", "success": true } client_rezerv - кол-во товара в резерве cost_delivery - стоимость доставки price_with_delivery - цена вместе с доставкой create_time - дата создания discount_percent - % скидки doc_id - ид заказа id - ид позиции nds_id - ид НДС price - цена (руб) price_discount - цена со скидкой (руб) products.name - наименование товара products.part - партномер товара qty - кол-во sku - артикул status - статус позиции wish_price - желаемая цена wish_price_comment - комментарий к желаемой цене total - кол-во добавленных строк 4.4 Получение списка строк по заказу Ограничение на кол-во вызовов 1 / с Запрос { "filter": [ { "operator": "=", "property": "doc_id", "value": 765521 ////ИД заказа } ], "pager": { "limit": 5000, "start": 0 }, "request": { "method": "read", "model": "order_items", "module": "platform" }, "session": "F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE", } Ответ { "Full_Time": 48, "commandid": 260850193, "data": { "order_items": [ { "client_rezerv": 0, "create_time": "2017-07-25T17:32:42", "discount_percent": 0, "doc_id": 765521, "id": 3744078, "nds_id": 1, "price": 299.98, "price_discount": 299.98, "products.name": "Сетевой фильтр SVEN Удлинитель Elongator 3G-10m, оранжевый { 1 розетка }", "products.part": "974", "qty": 1, "setId": 0, "sku": 106050, "status": 21, "wish_price": 0, "wish_price_comment": "" }, { "client_rezerv": 1, "create_time": "2017-07-25T17:36:40", "discount_percent": 0, "doc_id": 765521, "id": 3744104, "nds_id": 1, "price": 650.63, "price_discount": 650.63, "products.name": "Картридж струйный Cactus CS-C8727 черный для №27 HP DeskJet 3320/3325/3420/3425/3520 (20ml)", "products.part": "CS-C8727", "qty": 3, "setId": 0, "sku": 282542, "status": 21, "wish_price": 0, "wish_price_comment": "" } ], "total": 2 }, "event": "", "message": "read", "success": true } 4.5 Подписка на отгрузку Ограничение на кол-во вызовов 1 / с После успешного подписания заказа на отгрузку изменить заказ нельзя. Запрос { "data": [ { "confirmed": true, "id": 765521 } ], "request": { "method": "update", "model": "orders", "module": "platform" }, "session": "F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE" } Ответ { "Full_Time": 51, "commandid": 260821354, "data": { "orders": [ { "partner_comment": "", "confirmed": true, "create_date": "2017-07-25T16:35:14", "id": 765786, "status": 1, "sum": 0, "sum_discount": 0 } ], "total": 1 }, "event": "", "message": "update", "success": true } Примеры Получение каталога на PHP Для тестов использовались : php7.0, php7.0-curl, php7.0-json array(
“method” => “login”,
“model” => “auth” ,
“module” => “quickfox”
),
“data” => array(
“login” => “SomeLogin”,
“password” => “SomePassword”
)
);
$dataAuthString = json_encode($dataAuth);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, “POST”);
curl_setopt($ch, CURLOPT_POSTFIELDS, $dataAuthString);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
‘Content-Length: ‘ . strlen($dataAuthString)
));
$result = curl_exec($ch);
curl_close ($ch);
$resAuth = json_decode($result);
if (($resAuth) && ($resAuth->success) && ($resAuth->success == 1))
echo “Auth success. session=” . $resAuth->session;
else {
echo “Auth Error\n”;
print_r($resAuth);
die();
}
//Запоминаем сессию
$session = $resAuth->session;

//Получение дерева категорий
$ch = curl_init(“https://%domain%/download/catalog/json/catalog_tree.json”);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, “GET”);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
‘Cookie: session=’ . $session )
);
$result = curl_exec($ch);
curl_close ($ch);
$resCatalogTree = json_decode($result);
print_r($resCatalogTree);
//Список товаров получаем аналогичным образом
//Получение всех товаров в наличии их цены
$ch = curl_init(“https://%domain%/api/2”);
$dataAuth = array(“request” => array(
“method” => “get_active_products”,
“model” => “client_api”,
“module” => “platform”
),
“session” => $session
);
$dataAuthString = json_encode($dataAuth);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, “POST”);
curl_setopt($ch, CURLOPT_POSTFIELDS, $dataAuthString);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
‘Content-Length: ‘ . strlen($dataAuthString)
));
$result = curl_exec($ch);
curl_close ($ch);
$resProducts = json_decode($result);
print_r($resProducts);
?>

Для curl должен быть установлен валидный сертификат либо добавлены настройки

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
Получение каталога в 1С

&НаКлиенте
перем ИдентификаторСессии;

//
// Процедура нажатия кнопки для вызова метода прохождения аутентификации на веб-сервере
//

&НаКлиенте
Процедура ВыполнитьОбработку(Команда)
ClientLogin = «Логин»;
ClientPasswod = «пароль»;
ИдентификаторСессии = ПолучитьАутентификацию(“%domain%”, “/api/2”, ClientLogin, ClientPasswod);
Если ИдентификаторСессии = неопределено Тогда
#Если Клиент Тогда
Сообщить(“Невозможно подключиться к %domain%/api/2”);
#КонецЕсли
возврат;
ИначеЕсли ИдентификаторСессии = “” Тогда
#Если Клиент Тогда
Сообщить(“В аутентификации https://%domain%/api/2 отказано”);
#КонецЕсли
возврат;
Иначе
#Если Клиент Тогда
Сообщить(“Сессия аутентифицирована: “+ИдентификаторСессии);
#КонецЕсли
КонецЕсли;
КонецПроцедуры

///
//Процедура аутентификации на веб-сервере
//
&НаСервере
Функция ПолучитьАутентификацию(СерверAPI, РесурсAPI, ClientLogin, ClientPasswod) Экспорт

ЗапросJSON_Логин = Новый Структура;

ЗапросJSON_ = Новый Структура;
ЗапросJSON_.Вставить(“login”, ClientLogin);
ЗапросJSON_.Вставить(“password”, ClientPasswod);

ЗапросJSON_Логин.Вставить(“data”, ЗапросJSON_);

ЗапросJSON_ = Новый Структура;
ЗапросJSON_.Вставить(“method”, “login”);
ЗапросJSON_.Вставить(“model”, “auth”);
ЗапросJSON_.Вставить(“module”, “quickfox”);

ЗапросJSON_Логин.Вставить(“request”, ЗапросJSON_);

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ПроверятьСтруктуру = ложь;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(,Символы.Таб);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);

ЗаписатьJSON(ЗаписьJSON, ЗапросJSON_Логин);
СтрокаJSON = ЗаписьJSON.Закрыть();

Попытка
НТТР = Новый HTTPСоединение(СерверAPI);

ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить(“Content-Type”, “application/json; charset=utf-8”);

HTTPЗапрос = Новый HTTPЗапрос(РесурсAPI, ЗаголовокHTTP);
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, , ИспользованиеByteOrderMark.НеИспользовать);
Результат = НТТР.ОтправитьДляОбработки(HTTPЗапрос);
ОтветJSON = Результат.ПолучитьТелоКакСтроку();
HTTPЗапроc = неопределено;
НТТР = неопределено;
Исключение
ОтветJSON = неопределено;
КонецПопытки;

Если ОтветJSON = неопределено Тогда
Возврат неопределено;
КонецЕсли;

ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ОтветJSON);

РезультатЗапроса = ПрочитатьJSON(ЧтениеJSON, истина); // истина – получаем тип Соответствие
ЧтениеJSON.Закрыть();

Если РезультатЗапроса = неопределено Тогда
Возврат неопределено;
КонецЕсли;

Попытка
Если РезультатЗапроса.Получить(“success”) Тогда
session = РезультатЗапроса.Получить(“session”);
Иначе
session = “”;
КонецЕсли;
Исключение
session = “”;
КонецПопытки;

возврат session;

КонецФункции

///
//Процедура нажатия кнопки по вызову метода по получению каталога товаров с веб-сервера
//
&НаКлиенте
Процедура ОсновныеДействияФормыПолучитьКаталог(Кнопка)
ИдентификаторСессии = Неопределено;
Если ИдентификаторСессии = неопределено Тогда
ClientLogin = «Логин»;
ClientPasswod = «пароль»;
ИдентификаторСессии = ПолучитьАутентификацию(“%domain%”, “/api/2”, ClientLogin, ClientPasswod);
КонецЕсли;
Если ИдентификаторСессии = “” Тогда
#Если Клиент Тогда
Сообщить(“В аутентификации https://%domain%/api/2 отказано”);
#КонецЕсли
возврат;
КонецЕсли;
Каталог = ПолучитьКаталог(“%domain%”, “/download/catalog/json/catalog_tree.json”, ИдентификаторСессии);
КонецПроцедуры

///
//Процедура получения каталогов товаров с веб-сервера (возвращаемый формат данных массив структур)
//
&НаСервере
Функция ПолучитьКаталог(СерверAPI, РесурсAPI, session) Экспорт

ЗапросJSON_Логин = Новый Структура;
ЗапросJSON_Логин.Вставить(“session”, session);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ПроверятьСтруктуру = ложь;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(,Символы.Таб);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
ЗаписатьJSON(ЗаписьJSON, ЗапросJSON_Логин);
СтрокаJSON = ЗаписьJSON.Закрыть();

Попытка
НТТР = Новый HTTPСоединение(СерверAPI);

ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить(“Cookie”, “session=”+СокрЛП(session)+””);

HTTPЗапрос = Новый HTTPЗапрос(РесурсAPI, ЗаголовокHTTP);
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, , ИспользованиеByteOrderMark.НеИспользовать);
ИмяВыходногоФайла = ПолучитьИмяВременногоФайла(“txt”);
НТТР.Получить(HTTPЗапрос, ИмяВыходногоФайла); //GET
HTTPЗапроc = неопределено;
НТТР = неопределено;
ОтветJSON = истина
Исключение
ОтветJSON = ложь
КонецПопытки;

Если НЕ ОтветJSON Тогда
Возврат неопределено;
КонецЕсли;

ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.ОткрытьФайл(ИмяВыходногоФайла);

Попытка
РезультатЗапроса = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
УдалитьФайлы(ИмяВыходногоФайла);
Исключение
СтрокаJSON = ЧтениеJSON.Закрыть();
#Если Клиент Тогда
Сообщить(“Ошибка получения в файле JSON: “+ИмяВыходногоФайла + ” ” + ОписаниеОшибки());
#КонецЕсли
КонецПопытки;

Если РезультатЗапроса = неопределено Тогда
Возврат неопределено;
КонецЕсли;

возврат РезультатЗапроса;

КонецФункции

///
//Процедура нажатия кнопки по вызову метода получения цен и товаров с веб-сервера
//
&НаКлиенте
Процедура ОсновныеДействияФормыПолучитьЦеныПоТоварам(Команда)
ИдентификаторСессии = Неопределено;
Если ИдентификаторСессии = неопределено Тогда
ClientLogin = «Логин»;
ClientPasswod = «пароль»;
ИдентификаторСессии = ПолучитьАутентификацию(“%domain%”, “/api/2”, ClientLogin, ClientPasswod);
КонецЕсли;
Если ИдентификаторСессии = “” Тогда
#Если Клиент Тогда
Сообщить(“В аутентификации https://%domain%/api/2 отказано”);
#КонецЕсли
возврат;
КонецЕсли;
ТоварыЦены = ПолучитьТоварыИЦены(“%domain%”, “/api/2”, ИдентификаторСессии);
КонецПроцедуры

///
//Процедура получения информации по товарам и ценам с веб-сервера (возвращаемый формат данных массив структур)
//
&НаСервере
Функция ПолучитьТоварыИЦены(СерверAPI, РесурсAPI, session)
ЗапросJSON_Логин = Новый Структура;

ЗапросJSON_СтруктураПараметров = новый Структура;
ЗапросJSON_СтруктураПараметров.Вставить(“method”,”get_active_products”);
ЗапросJSON_СтруктураПараметров.Вставить(“model”,”client_api”);
ЗапросJSON_СтруктураПараметров.Вставить(“module”,”platform”);

ЗапросJSON_Логин.Вставить(“request” , ЗапросJSON_СтруктураПараметров);
ЗапросJSON_Логин.Вставить(“session”, session);

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ПроверятьСтруктуру = ложь;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(,Символы.Таб);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);

ЗаписатьJSON(ЗаписьJSON, ЗапросJSON_Логин);
СтрокаJSON = ЗаписьJSON.Закрыть();

Попытка
НТТР = Новый HTTPСоединение(СерверAPI);

ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить(“Cookie”, “session=”+СокрЛП(session)+””);

HTTPЗапрос = Новый HTTPЗапрос(РесурсAPI, ЗаголовокHTTP);
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, , ИспользованиеByteOrderMark.НеИспользовать);
ИмяВыходногоФайла = ПолучитьИмяВременногоФайла(“txt”);
НТТР.ОтправитьДляОбработки(HTTPЗапрос, ИмяВыходногоФайла);
HTTPЗапроc = неопределено;
НТТР = неопределено;
ОтветJSON = истина
Исключение
ОтветJSON = ложь
КонецПопытки;

Если НЕ ОтветJSON Тогда
Возврат неопределено;
КонецЕсли;

ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.ОткрытьФайл(ИмяВыходногоФайла);

Попытка
МассивРезультат = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
УдалитьФайлы(ИмяВыходногоФайла);
Исключение
СтрокаJSON = ЧтениеJSON.Закрыть();
#Если Клиент Тогда
Сообщить(“Ошибка получения в файле JSON: “+ИмяВыходногоФайла + ” ” + ОписаниеОшибки());
#КонецЕсли
КонецПопытки;

Если МассивРезультат = неопределено Тогда
Возврат неопределено;
КонецЕсли;

Возврат МассивРезультат;
КонецФункции
Обработки 1С для получение каталога и товаров
Обработка 1С 8.2
Обработка 1С 8.3