Версия API 2.13
domain - домен по которому осуществляется вход в b2b
Обмен данными ведется через протокол HTTP (POST) по принципу JSON-RPC (кроме случаев получения данных из статики). JSON сообщение пересылается в теле HTTP запроса с заголовком "Content-Type: application/json". Методы помеченные как "статика" вызываются получением данных по HTTP по указанному адресу, все остальные работают по принципу JSON-RPC по адресу https://%domain%/api/2.
При общении по JSON-RPC в ответе всегда будет приходить объект
{
...
"commandid": 260767355,
"success" : true,
"message" : "some message"
...
}
Просим Вас обратить внимание на ограничение кол-во вызовов на каждый метод и проектировать интеграцию с ресурсами компании согласно этим данным. Ограничения рассчитаны на максимально рациональное и адекватное использование ресурсов.
По техническим вопросам работы с API Вы можете написать в техподержку на api@i-t-p.pro. В теме (заголовке) письма необходимо указать код клиента (можно запросить у Вашего менеджера), ИНН и поставить в копию Вашего менеджера. При отсутствии в теме письма кода клиента или ИНН - письмо рассматриваться не будет
Ограничение на кол-во вызовов 10 / мин
Аутентификация происходит на основе логина и пароля. Можно использовать логин пароль одного из Ваших аккаунтов. Для этого необходимо отправить запрос на </api/2>
{
"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.
Ограничение на кол-во вызовов 1 / мин
Прайс-лист Адрес </download/catalog/json/catalog_tree_9.json>
Пример ответа
[
...
{
"id":91,
"leaf":true,
"name":"кресла детские автомобильные",
"childrens" : [ ... ]
},
...
]
Список категорий обновляется раз в сутки ночью (чаще чем раз в сутки качать этот файл не имеет смысла)
Ограничение на кол-во вызовов 2 / час
Прайс-лист Адрес </download/catalog/json/products_9.json>
Пример ответа
[ ...
{
"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
},
...
]
Список товаров обновляется раз в сутки ночью (чаще чем раз в сутки качать этот файл не имеет смысла).
Ограничение на кол-во вызовов 10 / час
Данный метод возвращает товары только в наличии.
Делаем запрос на </api/2> со след. JSON сообщением
{
"request": {
"method": "get_active_products",
"model": "client_api",
"module": "platform"
},
"session": "F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE"
}
При успешном выполнении в ответе будет
{
"data": {
"products": [
...
{
"price": 58.21,
"qty": "***",
"nearest_logistic_center_qty": '**',
"sku": 1586891,
"delivery_days" : 0
}
...
],
"total": 119982
},
"message": "read",
"success": true
}
Получение цены и остатка только по ближайшему складу ( не МСК)
{
"request": {
"method": "get_active_products",
"model": "client_api",
"module": "platform"
},
"filter" : [
{
"property" : "nearest_logistic_center_only",
}
],
"session": "F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE"
}
Получение активных товаров по категории (включая дочерние)
{
"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"
}
Получение цены и остатка по нескольким товарам
{
"request": {
"method": "get_active_products",
"model": "client_api",
"module": "platform"
},
"filter" : [
{
"property" : "sku",
"operator" : 'IN',
"value" : [1586891, 1586892,1586893] артикулы товара
}
],
"session": "F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE"
}
Ограничение на кол-во вызовов 2 / c
Изображения на товары из категории 18+ отдаются без водных знаков. Остальные отдаются с водным знаком.
Делаем запрос на </api/2> со след. 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",
"deleted" : false,
"priority" : 100
},
...
],
"total": 3
},
"event": "177",
"message": "",
"success": true
}
Ограничение на кол-во скачиваний фото по ссылкам - 5 / с
Отдает список всех товаров 18+ с характеристиками
Делаем запрос на </api/2> со след. JSON сообщением
{
"request": {
"method": "get_adult_products_characteristics",
"model": "client_api",
"module": "platform"
},
"session": "F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE",
}
При успешном выполнении в ответе будет
{
"Full_Time": 20307,
"commandid": 318125009,
"data": {
"adult_products_characteristics": [
{
"characteristics": [
{
"name": "Описание",
"value": "..."
},
{
"name": "Страна производства",
"value": "США, Китай"
},
{
"name": "Коллекция",
"value": "..."
},
{
"name": "Гарантийный срок",
"value": "12 месяцев"
},
{
"name": "Цвет",
"value": "черный"
},
{
"name": "Материал",
"value": "нейлон"
},
{
"name": "Упаковка",
"value": "картонная коробка"
},
{
"name": "Наименование",
"value": "..."
}
],
"sku": 10524309
},
...
],
"total": 15970
},
"event": "177",
"message": "",
"success": true
}
Делаем запрос на </api/2> со след. JSON сообщением
{
"request": {
"module": "platform",
"model": "client_api",
"method": "get_available_logistic_centers"
},
"session": "123"
}
При успешном выполнении в ответе будет
{
"Full_Time": 15,
"data": {
"logistic_centers": [
{
"id": 1,
"name": "МСК"
},
{
"id": 2,
"name": "Краснодар"
}
],
"total": 2
},
"success": true,
}
Статусы заказа
Наименование | ID статуса |
---|---|
Новый | 1 |
Частично в резерве | 15 |
Нет в наличии | 16 |
В резерве | 2 |
Комплектуется | 18 |
Отгружен | 19 |
Отменен | 20 |
Статусы позиции заказа
Наименование | ID статуса |
---|---|
Новый | 21 |
Частично в резерве | 23 |
Нет в наличии | 24 |
В резерве | 22 |
Комплектуется | 25 |
Отгружен | 9 |
Отменен | 10 |
Ограничение на кол-во вызовов 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"
}
]
}
Ответ
{
"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",
"logistic_center" : 1,
"status": 1,
"sum": 10
},
{
"partner_comment": "",
"confirmed": true,
"create_date": "2017-07-25T16:35:14",
"id": 765786,
"partner_logins.name": "some_login",
"logistic_center" : 1,
"status": 1,
"sum": 10,
"sum_discount": 10
}
],
"total": 2
},
"event": "",
"message": "p_read",
"success": true
}
Ограничение на кол-во вызовов 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",
"logistic_center" : 1,
"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"
}
]
}
Ограничение на кол-во вызовов 10 / мин
Запрос
{
"request": {
"method": "create",
"model": "orders",
"module": "platform"
},
"session": "F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE",
"data": [
{
"partner_comment": " Комментарий ",
"logistic_center" : 1 - указываем ид склада, если не указать заказ будет создан под склад МСК (1)
}
]
}
Ответ
{
"Full_Time": 50,
"commandid": 260767355,
"data": {
"orders": [
{
"partner_comment": " Комментарий ",
"create_date": "2017-07-25T17:08:54",
"logistic_center" : 1,
"id": 123,
"status": 1
}
],
"total": 1
},
"event": "",
"message": "create",
"success": true
}
Ограничение на кол-во вызовов 1 / с
Запрос
{
"data": {
"doc_id": 2163923,
"destroy": [
{
"id": 10485199
}
],
"update": [
{
"wish_price": 1106.92,
"wish_price_comment" : "",
"qty": 1,
"sku": 40798
}
],
},
"request": {
"method": "client_update",
"model": "order_items",
"module": "platform"
},
"session": "F123123123AAD8776E1B20E87ED26BDD9DFFFFFFFAAAAEEEEE",
}
doc_id - ид заказа ( новое поле запроса ), при отсутствии данного поля будет возвращена ошибка "Отсутствует номер заказа"
destroy - массив строк на удаление
id - ид строки заказа
update - список строк на добавление/изменение
qty - кол-во
sku - артикул
wish_price - желаемая цена
wish_price_comment - комментарий к желаемой цене
На каждый товарв из массива "update" будет следующая логика обработки :
В ответе будет массив созданных и измененных товаров ( удаленных не будет)
{
"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
}
Ограничение на кол-во вызовов 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
}
Ограничение на кол-во вызовов 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
}
Для тестов использовались : php7.0, php7.0-curl, php7.0-json
<?php
$ch = curl_init("https://%domain%/api/2");
//Аутентификация
$dataAuth = array("request" => 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-Type: application/json',
'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);
&НаКлиенте
перем ИдентификаторСессии;
//
// Процедура нажатия кнопки для вызова метода прохождения аутентификации на веб-сервере
//
&НаКлиенте
Процедура ВыполнитьОбработку(Команда)
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: "+ИмяВыходногоФайла + " " + ОписаниеОшибки());
#КонецЕсли
КонецПопытки;
Если МассивРезультат = неопределено Тогда
Возврат неопределено;
КонецЕсли;
Возврат МассивРезультат;
КонецФункции