Техническое описание 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