API Личного кабинета клиента Stynergy
Данное API предназначено для интеграции внешних систем с личным кабинетом клиента Stynergy. С его помощью можно получать информацию о товарах, договорах и заказах, а также передавать заказы из 1С на сайт для обработки.
<!-- TODO: ... --> для последующего уточнения.
Базовый URL
Все запросы к методам чтения выполняются по базовому адресу:
https://lk.stynergy.pro/lkapi
Вызов метода осуществляется через параметр task:
https://lk.stynergy.pro/lkapi?task=<МЕТОД>&apikey=<ВАШ_API_КЛЮЧ>
Для передачи заказов используется отдельный URL:
POST https://lk.stynergy.pro/setorders1c
Авторизация
Для доступа ко всем методам API требуется API-ключ, который передаётся в параметре
apikey в строке запроса либо в теле запроса (для метода отправки заказов).
Значение ключа выдаётся администратором сайта.
| Параметр | Расположение | Тип | Описание |
|---|---|---|---|
apikey |
query / body | string | Уникальный ключ для авторизации клиента в API. |
{
"error": "API key is missing."
}
{
"error": "Invalid API key"
}
Формат запросов и ответов
Методы чтения (GET)
Методы getProducts, getProductsPrice,
getContracts, getOrders, getStock
вызываются методом GET. Параметры передаются в строке запроса.
Методы записи (POST)
Метод setorders1c предназначен для передачи заказов с вашей 1С-системы
и вызывается методом POST. Данные передаются в формате JSON.
Формат данных
- Кодировка: UTF-8
- Ответы: JSON-массив или JSON-объект
- Числа могут возвращаться как строки (например, цена, вес, количество)
- Десятичный разделитель в некоторых полях может быть запятая (например, длина, цена)
Параметры пагинации
Для большинства методов используются базовые параметры пагинации:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
limit |
integer | нет | Количество записей, возвращаемых за один запрос. |
offset |
integer | нет | Номер первой записи (смещение от начала выборки). |
Обработка ошибок
В случае ошибок API возвращает JSON-объект с полем error, содержащим
текстовое описание проблемы.
{
"error": "Invalid task"
}
1. getProducts – Получение информации о продукции
Метод возвращает список товаров с основной информацией: артикул, наименование, возможные длины, наличие, категорию, цену и др.
Параметры запроса
| Имя | Тип | Обязательный | Описание |
|---|---|---|---|
limit |
integer | нет | Количество записей за один запрос. |
offset |
integer | нет | Номер первой записи. |
created |
string | нет |
Дата создания продукта. Формат: DD.MM.YYYY (например, 01.01.2024).
TODO: Уточнить, является ли это фильтр «с даты и позже» или точное совпадение.
|
modified |
string | нет |
Дата изменения продукта. Формат: DD.MM.YYYY.
TODO: Уточнить логику фильтрации (с указанной даты и позже или только на указанную дату).
|
sku |
string | нет |
Артикул продукции. Можно передавать несколько значений, разделяя их символом |.
Например: ST-00027961|ST-00018348.
|
apikey |
string | да | API-ключ клиента. |
Пример запроса
GET https://lk.stynergy.pro/lkapi?task=getProducts&limit=10&apikey=ВАШ_АПИ_КЛЮЧ
Пример ответа
[
{
"id": 27961,
"sku": "ST-00027961",
"name": "Металлочерепица СМ Классик CORUNDUM50® RAL 5018 0.50",
"weight": "4.4050",
"stock": 0,
"stock_metal": "03",
"array_lenght": "0,450 м.;0,460 м.;...;8,000 м.;4,850 м.",
"categories": "Металлочерепица\\Металлочерепица СМ Классик\\CORUNDUM50",
"categories_slug": "metallocherepica804\\metallocherepica-sm-klassik835\\corundum50845",
"contract_group": "МЧ СМ - CORUNDUM50",
"price": "902,6",
"unit": "м2",
"RALZN": "CORUNDUM50®"
}
]
Описание полей ответа
| Поле | Тип | Описание |
|---|---|---|
id |
integer | Внутренний ID товара в системе. |
sku |
string | Артикул товара. |
name |
string | Полное наименование товара. |
weight |
string | Вес единицы продукции. |
stock |
number / string | Количество товара на складе (может быть целым или дробным значением). |
stock_metal |
string | Статус наличия металла (см. раздел Статусы наличия металла). |
array_lenght |
string |
Список возможных длин, разделённых ; (точка с запятой).
Значения содержат единицы измерения (например 0,450 м.).
|
categories |
string |
Иерархия категорий через обратный слэш \.
Например: Металлочерепица\Металлочерепица СМ Классик\CORUNDUM50.
|
categories_slug |
string |
Иерархия кодов категорий (slug) через \ для уникальной идентификации дерева.
|
contract_group |
string | Группа договора / ценовая группа (например, МЧ СМ - CORUNDUM50). |
price |
string | Цена товара (как правило, за единицу измерения). Может использовать запятую как разделитель. |
unit |
string | Единица измерения (например, м2). |
RALZN |
string | Маркировка покрытия / цветовой системы (например, CORUNDUM50®). |
2. getProductsPrice – Получение цен с учётом скидки по договору
Метод возвращает список товаров с ценой по прайс-листу, скидкой по договору и итоговой ценой с учётом этой скидки. В случае проблем с договором возвращается ошибка.
Параметры запроса
| Имя | Тип | Обязательный | Описание |
|---|---|---|---|
limit |
integer | нет | Количество записей за один запрос. |
offset |
integer | нет | Номер первой записи. |
dogovor |
string | да |
Номер договора (обязательный параметр).
Например: ПН-17/24.
TODO: Уточнить, поддерживается ли передача нескольких договоров за один запрос.
|
sku |
string | нет |
Артикул продукции. Можно передавать несколько артикулов через |.
|
apikey |
string | да | API-ключ клиента. |
Пример запроса
GET https://lk.stynergy.pro/lkapi?task=getProductsPrice&limit=5&dogovor=ПН-17/24&apikey=ВАШ_АПИ_КЛЮЧ
Пример ответа
[
{
"id": 27961,
"sku": "ST-00027961",
"name": "Металлочерепица СМ Классик CORUNDUM50® RAL 5018 0.50",
"group": "МЧ СМ - CORUNDUM50",
"price": "902.60",
"discount": 24,
"price_with_discount": "685.98"
},
{
"id": 18348,
"sku": "ST-00018348",
"name": "Профнастил ST15 CORUNDUM50® RAL 8017 0.50",
"group": "МЧ СМ - CORUNDUM50",
"price": "667.66",
"discount": 24,
"price_with_discount": "507.42"
}
]
Описание полей ответа
| Поле | Тип | Описание |
|---|---|---|
id |
integer | Внутренний ID товара в системе. |
sku |
string | Артикул товара. |
name |
string | Наименование товара. |
group |
string | Группа/ценовая категория товара (группа договора). |
price |
string | Цена товара без скидки. |
discount |
number | Скидка по договору в процентах. |
price_with_discount |
string | Цена товара с учётом скидки по договору. |
Возможные ошибки
{
"error": "API key is missing."
}
{
"error": "Invalid API key."
}
{
"error": "Договор не указан"
}
{
"error": "Договор не найден"
}
{
"error": "Договор закрыт"
}
3. getContracts – Получение информации по вашим договорам
Метод возвращает список договоров, доступных пользователю по его API-ключу.
Параметры запроса
| Имя | Тип | Обязательный | Описание |
|---|---|---|---|
limit |
integer | нет | Количество записей за один запрос. |
offset |
integer | нет | Номер первой записи. |
apikey |
string | да | API-ключ клиента. |
Пример запроса
GET https://lk.stynergy.pro/lkapi?task=getContracts&limit=5&apikey=ВАШ_АПИ_КЛЮЧ
Пример ответа
{
"61d9a057-908d-****-***-005056012515": {
"id": 13600085,
"HeadClient": "СТР****",
"HeadClientCode": "ٲ",
"ClientCode": "ٲ",
"ClientName": "СТР*****",
"Contract": "ПН-***/22",
"idcontract": "61d9a057-908d-****-****-005056012515",
"contract": [
{
"PriceGroupValue": "МЧ GS - СК матовый",
"DiscountValue": "24",
"status": "Закрыто"
},
{
"PriceGroupValue": "МЧ GS - СК",
"DiscountValue": "24",
"status": "Закрыто"
}
]
}
}
Описание полей ответа
Корневой объект представляет собой словарь, где ключи – это идентификаторы договоров (GUID/строка), а значения – объекты с информацией по договору.
| Поле | Тип | Описание |
|---|---|---|
| GUID договора | string | Ключ верхнего уровня – идентификатор договора. |
id |
integer | Внутренний ID договора. |
HeadClient |
string | Наименование головного клиента. |
HeadClientCode |
string | Код головного клиента. |
ClientCode |
string | Код клиента. |
ClientName |
string | Наименование клиента. |
Contract |
string | Номер договора (например, ПН-***/22). |
idcontract |
string | Идентификатор договора (GUID). |
contract |
array | Массив настроек по ценовым группам и скидкам для данного договора. |
PriceGroupValue |
string | Наименование ценовой группы (например, МЧ GS - СК). |
DiscountValue |
string | Величина скидки по группе в процентах. |
status |
string | Статус настройки (например, Закрыто). |
4. getOrders – Получение информации по вашим заказам
Метод возвращает список заказов клиента с информацией о статусе, сумме и позициях заказов.
Параметры запроса
| Имя | Тип | Обязательный | Описание |
|---|---|---|---|
limit |
integer | нет | Количество записей полученных за один запрос. |
offset |
integer | нет | Номер первой записи. |
orderNumbers |
string | нет |
Номер заказа (или несколько через разделитель |).
TODO: Уточнить, какие номера используются: номера ЛК или 1С, либо оба варианта.
|
createdOn |
string | нет | Дата начала периода по дате создания заказов. |
endDate |
string | нет |
Дата окончания периода. Если указана, отбор производится по диапазону
от createdOn до endDate.
|
apikey |
string | да | API-ключ клиента. |
Пример запроса
GET https://lk.stynergy.pro/lkapi?task=getOrders&limit=5&apikey=ВАШ_АПИ_КЛЮЧ
Пример ответа
[
{
"id": 82000,
"order_number": "ст00-***70",
"invoice": "00-00070",
"clients": "СТР***",
"status": "S",
"price": "36978.61000",
"date": "06.09.2024",
"date_completion": "09.09.2024",
"products": [
{
"sku": "ST-00017815",
"name": "Профнастил ST15 CORUNDUM50® RAL 8017 0.50",
"quantity": 41,
"price": "667.66000",
"product_attribute": "2,000 м.",
"width": "1,175",
"units": "м2",
"info_product_edit": " ",
"product_produced": 5,
"product_shipped": 3
}
]
}
]
Описание полей ответа
| Поле | Тип | Описание |
|---|---|---|
id |
integer | Внутренний ID заказа. |
order_number |
string | Номер заказа в личном кабинете (например, ст00-***70). |
invoice |
string | Номер заказа/документа в системе 1С. |
clients |
string | Название клиента. |
status |
string | Статус заказа (код). См. раздел Статусы заказов. |
price |
string | Общая стоимость заказа. |
date |
string | Дата создания заказа (формат DD.MM.YYYY). |
date_completion |
string | Ориентировочная дата готовности (формат DD.MM.YYYY). |
products |
array | Массив позиций заказа. |
sku |
string | Артикул товара. |
name |
string | Наименование товара. |
quantity |
number | Количество товара. |
price (внутри products) |
string | Цена за единицу продукции. |
product_attribute |
string | Атрибут товара (например, длина: 2,000 м.). |
width |
string | Ширина продукции. |
units |
string | Единица измерения (например, м2). |
info_product_edit |
string |
Информация о редактировании/добавлении товара менеджером:
new – добавлен, edit – изменён, пробел – без изменений.
|
product_produced |
number | Количество произведённого товара. |
product_shipped |
number | Количество товара, отгруженного или подготовленного к отгрузке. |
5. getStock – Получение информации по наличию продукции
Метод возвращает информацию о наличии продукции и состоянии металла.
Параметры запроса
| Имя | Тип | Обязательный | Описание |
|---|---|---|---|
limit |
integer | нет | Количество записей за один запрос. |
offset |
integer | нет | Номер первой записи. |
sku |
string | нет | Артикул продукции. Можно несколько через разделитель |. |
apikey |
string | да | API-ключ клиента. |
Пример запроса
GET https://lk.stynergy.pro/lkapi?task=getStock&limit=10&apikey=ВАШ_АПИ_КЛЮЧ
Пример ответа
[
{
"id": 4947,
"sku": "ST-00004947",
"stock": 0,
"stock_metal": "01"
},
{
"id": 18348,
"sku": "ST-00018348",
"stock": 0,
"stock_metal": "01"
}
]
Описание полей ответа
| Поле | Тип | Описание |
|---|---|---|
id |
integer | Внутренний ID товара в системе. |
sku |
string | Артикул товара. |
stock |
number | Количество товара. |
stock_metal |
string | Статус наличия металла (см. раздел Статусы наличия металла). |
6. setorders1c – Отправка заказов из 1С
Метод предназначен для передачи заказов из вашей 1С-системы на сайт для дальнейшей обработки и отображения в личном кабинете.
Формат запроса
Запрос выполняется методом POST. В теле запроса передаётся JSON-объект
с массивом заказов в поле Orders.
Структура JSON
{
"Orders": [
{
"order_id": "2303778",
"id_1c": "2303778",
"number_order": "ст00-00778",
"date_order": "05022024-16:25:59",
"status": "Подтвержден менеджером",
"number_contract": "ПН-17/24",
"idzayavka": "23032316778",
"task": "orders",
"items": [
{
"order_item_sku": "ST-00001324",
"product_attribute": "1,200 м.",
"product_quantity": 2
},
{
"order_item_sku": "ST-00001324",
"product_attribute": "1,500 м.",
"product_quantity": 2
}
]
}
]
}
Описание полей заказа
| Поле | Уровень | Тип | Описание |
|---|---|---|---|
Orders |
root | array | Массив заказов, передаваемых за один запрос. |
order_id |
Order | string | ID заказа в 1С. |
id_1c |
Order | string | Дублирующий идентификатор заказа (можно использовать тот же, что и order_id).
|
number_order |
Order | string | Отображаемый номер заказа в личном кабинете (например, ст00-00778). |
date_order |
Order | string |
Дата и время заказа. Формат: ДДММГГГГ-ЧЧ:ММ:СС
(например, 05022024-16:25:59).
|
status |
Order | string | Статус заказа в текстовом виде (см. раздел Статусы заказов). |
number_contract |
Order | string | Номер договора, по которому оформлен заказ (например, ПН-17/24). |
idzayavka |
Order | string | Внутренний номер заявки в 1С для связи с другими сущностями. |
task |
Order | string |
Тип операции. Для передачи заказов должно быть указано значение
orders.
|
items |
Order | array | Массив товарных позиций заказа. |
order_item_sku |
Item | string | Артикул товара. |
product_attribute |
Item | string | Атрибут товара (например, длина: 1,200 м.). |
product_quantity |
Item | number | Количество единиц данного товара. |
7. Диагностика ошибок
При возникновении ошибок API возвращает JSON-объект с полем error.
Примеры возможных ответов:
{
"error": "Invalid API key"
}
{
"error": "Invalid task"
}
{
"error": "API key is missing."
}
Справочник статусов заказов
Ниже приведено соответствие кодов статусов и их текстовых описаний.
| Код | Описание |
|---|---|
P |
Черновик |
C |
Создан |
M |
Подтвержден менеджером |
U |
Подтвержден покупателем |
V |
В производстве |
F |
Готов частично |
Q |
Готов к отгрузке |
S |
Отгружен |
X |
Закрыт |
Справочник статусов наличия металла
| Код | Описание |
|---|---|
01 |
Есть в наличии |
02 |
Нужно уточнить |
03 |
Под заказ |
Для получения API-ключа и дополнительной информации об интеграции обратитесь к администратору сайта.
Псевдокод 1С
// Общие параметры подключения
БазовыйURL = "/lkapi";
APIКлюч = "<ВАШ_API_КЛЮЧ>";
HTTP = Новый HTTPСоединение("lk.stynergy.pro", 443, , , , , Истина);
// -------------------------
// 1. Получение договоров
// -------------------------
Путь = СтрШаблон("%1?task=getContracts&apikey=%2", БазовыйURL, APIКлюч);
Ответ = HTTP.Get(Путь);
ДанныеДоговоры = JSONРазобрать(Ответ.ПолучитьТело());
Сообщить("getContracts → найдено договоров: " + Строка(ДанныеДоговоры.Количество()));
ТекущийGUID = ДанныеДоговоры.Ключи()[0];
НомерДоговора = ДанныеДоговоры[ТекущийGUID].Contract;
// -------------------------
// 2. Получение товаров
// -------------------------
Путь = СтрШаблон("%1?task=getProducts&limit=200&apikey=%2", БазовыйURL, APIКлюч);
Ответ = HTTP.Get(Путь);
ДанныеТовары = JSONРазобрать(Ответ.ПолучитьТело());
Сообщить("getProducts → позиций: " + Строка(ДанныеТовары.Количество()));
// -------------------------
// 3. Цены по договору
// -------------------------
Путь = СтрШаблон("%1?task=getProductsPrice&dogovor=%2&limit=100&apikey=%3",
БазовыйURL, НомерДоговора, APIКлюч);
Ответ = HTTP.Get(Путь);
ДанныеЦены = JSONРазобрать(Ответ.ПолучитьТело());
Сообщить("Цены → первая цена: " + ДанныеЦены[0].price_with_discount);
// -------------------------
// 4. Остатки товара
// -------------------------
ПервыйSKU = ДанныеТовары[0].sku;
Путь = СтрШаблон("%1?task=getStock&sku=%2&apikey=%3",
БазовыйURL, ПервыйSKU, APIКлюч);
Ответ = HTTP.Get(Путь);
ДанныеОстатки = JSONРазобрать(Ответ.ПолучитьТело());
Сообщить("getStock → " + ДанныеОстатки[0].sku +
" металл: " + ДанныеОстатки[0].stock_metal);
// -------------------------
// 5. Заказы
// -------------------------
Путь = СтрШаблон("%1?task=getOrders&limit=20&apikey=%2",
БазовыйURL, APIКлюч);
Ответ = HTTP.Get(Путь);
ДанныеЗаказы = JSONРазобрать(Ответ.ПолучитьТело());
Если ТипЗнч(ДанныеЗаказы) = Тип("Массив") И ДанныеЗаказы.Количество() > 0 Тогда
Сообщить("getOrders → заказ " + ДанныеЗаказы[0].order_number +
", статус: " + ДанныеЗаказы[0].status);
Иначе
Сообщить("getOrders → заказы отсутствуют");
КонецЕсли;
Псевдокод 1С: отправка заказов (setorders1c)
// ---------------------
// 6. Отправка заказов
// ---------------------
JSONЗаказ =
'{
"Orders": [
{
"order_id": "2303778",
"id_1c": "2303778",
"number_order": "ст00-00778",
"date_order": "05022025-16:25:59",
"status": "Подтвержден менеджером",
"number_contract": "' + НомерДоговора + '",
"idzayavka": "2303778",
"task": "orders",
"items": [
{
"order_item_sku": "' + ДанныеТовары[0].sku + '",
"product_attribute": "1,500 м.",
"product_quantity": 2
}
]
}
]
}';
// HTTPS
HTTP = Новый HTTPСоединение("lk.stynergy.pro", 443, , , , , Истина);
// Формируем POST-запрос
Запрос = Новый HTTPЗапрос("/setorders1c");
Запрос.УстановитьТелоИзСтроки(JSONЗаказ, "UTF-8", "application/json");
Запрос.Заголовки.Вставить("apikey", APIКлюч);
// Выполняем запрос
Ответ = HTTP.Post(Запрос);
// Разбираем результат
СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку();
Попытка
JSONОтвет = JSONРазобрать(СтрокаОтвета);
Исключение
Сообщить("Ошибка разбора JSON ответа: " + СтрокаОтвета);
Возврат;
КонецПопытки;
// Обработка ответа API
Если ТипЗнч(JSONОтвет) = Тип("Структура") Тогда
Если JSONОтвет.Свойство("error") Тогда
Сообщить("Ошибка API: " + JSONОтвет.error);
ИначеЕсли JSONОтвет.Свойство("success") Тогда
Сообщить("Успешно → " + Строка(JSONОтвет.success));
Иначе
Сообщить("Ответ API: " + Строка(JSONОтвет));
КонецЕсли;
Иначе
Сообщить("Ответ API (массив): " + Строка(JSONОтвет));
КонецЕсли;