====== Процесс синхронизации данных интернет-магазина с программой учета ======
===== Отправка данных на портал =====
JSON-данные передаются в теле запроса POST в REST API. Ключевым аспектом является указание заголовка Content-Type: application/json, который сообщает серверу, что данные имеют формат JSON.
В случае успешного выполнения запроса возвращается JSON объект. Убедитесь, что сервер принял данные, в противном случае выполнение запроса необходимо повторить.
Обновление данных является инкрементным и требует соблюдения хронологической последовательности и неразрывности.
Порядок действий:
- Запросить дату актуальности последней синхронизации API-методом [[sync_api#syncInfo|syncInfo]]
- Сформировать json-документ с выборкой по времени объектов, начиная с даты последней синхронизации по текущую
- Отправить запрос с сформированный JSON-документа с помощью API-метода
Запросы к сайту желательно отправлять со статического IP адреса, который будет внесен в белый список в интернет-магазине. В противном случае, потребуется предавторизация.
===== /api/v2/login =====
Запрос создает access токен, предназначенный для работы с API. Полученный токен необходимо отправлять в заголовке Authorization: token //accessToken//
=== Запрос ===
^Аргумент^Описание^
|username|Имя пользователя|
|key|API-ключ|
=== Ответ ===
^Аргумент^Описание^
|access_token|Токен доступа к API|
== Пример ==
{
username: "super"
key: "7d61d77d61d77d61d77d61d77d61d7"
}
===== /api/v2/sync.info =====
Получает информацию о текущей очереди. Результат возвращается в формате JSON.
=== Запрос ===
^Аргумент^Описание^
|type|Тип синхронизируемого файла. product - основные данные товара, detail – описание товара и фото, price - цены и наличие, order - изменения заказов|
=== Ответ ===
^Аргумент^Описание^Тип^По-умолчанию^
|code|Код ответа|[[sync_api#коды_ответов|Код ответа]]| |
|status|Текстовое описание результата запроса|string| |
|queue|Длина текущей очереди|int| |
|date_last|Дата последней синхронизации сервера|datetime dd.mm.YYYY HH:mm:ss| |
== Пример ==
{
type: "product"
}
===== /api/v2/order.get =====
Получает json документ с данными заказов. Формат возвращаемых данных см. [[json_api#/api/v2/order.sync|/api/v2/order.sync]]
=== Запрос ===
^Аргумент^Описание^
|date_change|Время изменения заказа|
|limit|Необязательный. Количество элементов. Если указан, данные будут выводиться постранично с заданным количеством|
|start|Необязательный. Если указан аргумент //limit//, номер начального элемента. Обычно кратен значению //limit//|
== Пример ==
{
date_change: "2025-09-03T10:25:43+03:00"
}
===== /api/v2/reference.get =====
Получает json документ с данными заказов. Формат возвращаемых данных см. [[json_api#/api/v2/reference.sync|/api/v2/reference.sync]]
=== Запрос ===
^Аргумент^Описание^
|name|Имя справочника (country, fgroup, diseases, manufacturer, mnn, packing, tradename)|
|limit|Необязательный. Количество элементов. Если указан, данные будут выводиться постранично с заданным количеством|
|start|Необязательный. Если указан аргумент //limit//, номер начального элемента. Обычно кратен значению //limit//|
== Пример ==
{
name: "country"
}
===== /api/v2/user.get =====
Получает json документ с данными заказов. Формат возвращаемых данных см. [[json_api#/api/v2/user.sync|/api/v2/user.sync]]
=== Запрос ===
^Аргумент^Описание^
|date_change|Время изменения заказа|
|limit|Необязательный. Количество элементов. Если указан, данные будут выводиться постранично с заданным количеством|
|start|Необязательный. Если указан аргумент //limit//, номер начального элемента. Обычно кратен значению //limit//|
== Пример ==
{
date_change: "2025-09-03T10:25:43+03:00",
}
===== /api/v2/category.sync =====
Накопительная выгрузка изменений категорий за период
|date_start|Дата начала среза данных|
|date_end|Дата окончания среза данных|
|categories[]|Массив категорий|
|categories[] aid|id категории в программе учета|
|categories[] title|наименование категории|
|categories[] remove|необязательный атрибут. Пометка категории на удаление|
|categories[] aparent_id|id родительской категории в программе учета|
{
date_start: "2025-09-03T10:25:43+03:00",
date_end: "2025-09-03T18:25:43+03:00",
categories: [
{
aid: "10",
aparent_id: "0",
title: "Товары"
},
{
aid: "11",
aparent_id: "10",
title: "Товар 1"
},
{
aid: "12",
remove: 1,
title: "Удаляемая категория"
}
]
}
===== /api/v2/product.sync =====
Накопительная выгрузка изменений товаров за период
|date_start|Дата начала среза данных|
|date_end|Дата окончания среза данных|
|products[]|Массив товаров|
|products[] aid|id товара в программе учета|
|products[] aparent_id|id родительской категории в программе учета|
|products[] remove|необязательный атрибут. Пометка товара на удаление|
|products[] title|наименование товара|
|products[] barcode|Штрихкод товара|
{
date_start: "2025-09-03T10:25:43+03:00",
date_end: "2025-09-03T18:25:43+03:00",
products: [
{
aid: "10",
aparent_id: "126",
title: "5-НОК табл по 50 мг №50 Сандоз",
barcode: "7613421035662",
},
{
aid: "376699",
title: "Удаляемый товар",
remove: "1"
}
]
}
===== /api/v2/detail.sync =====
Накопительная выгрузка описания товаров за период
|date_start|Дата начала среза данных|
|date_end|Дата окончания среза данных|
|products[]|Массив товаров|
|products[] aid|id товара в программе учета|
|products[] vat|Ставка НДС|
|products[] prescript|рецептурный препарат 0 или 1|
|products[] veterinary|ветеринарный препарат 0 или 1|
|products[] flags[]|Флаги-метки товара текстовые короткие слова/словосочетания|
|products[] country_id|id страны из справочника //country//|
|products[] diseases_id[]|id заболеваний из справочника //diseases//|
|products[] fgroup_id[]|массив id фармакологических групп из справочника //fgroup//|
|products[] manufacturer_id|id производителя из справочника //manufacturer//|
|products[] mnn_id|id действующего вещества из справочника //mnn//|
|products[] packing_id|id упаковки из справочника /packing/|
|products[] tradename_id|id торгового наименования из справочника /tradename/|
|products[] analogs_id[]|id товаров-аналогов|
|products[] desc|Полное описание товара|
|products[] prescribe|Показания к применению|
|products[] dosing|Способ применения|
|products[] precaution|Противопоказания|
|products[] storeCnd|Условия хранения|
|products[] promo_desc|Промо описание товара|
|products[] images[]|Массив изображений товара|
|categories[]|Массив категорий|
|categories[] aid|id категории в программе учета|
|categories[] images[]|Массив изображений товара|
{
date_start: "2025-09-03T10:25:43+03:00",
date_end: "2025-09-03T18:25:43+03:00",
products: [
{
aid: "376647",
vat: "VAT_10",
prescript: 1,
veterinary: 1,
flags: ["Акция","Новинка"],
country_id: "21",
diseases_id:[124,125],
fgroup_id: ["0000001021","0000001022"],
manufacturer_id: "278",
mnn: "278",
packing_id: "23",
tradename_id: "785",
analogs_id:[712,718],
desc: "<...>Описание<...>",
prescribe: "<...>Показания к применению<...>",
dosing: "<...>Способ применения<...>",
precaution: "<...>Противопоказания<...>",
storeCnd: "<...>Условия хранения<...>",
promo_desc: "Промоописание товара длинное может быть",
images:["AP-0000-3766647.jpg", "AP-0000-3766647-1.jpg"]
}
],
categories: [
{
aid: "37",
images: ["AP-0000-3766647.jpg", "AP-0000-3766647-1.jpg"]
}
]
}
===== /api/v2/price.sync =====
Накопительная выгрузка изменений цен и остатков за период. Изменения по товару, необходимо посылать всегда двумя лотами, один короткий срок годности, второй длительный, даже если изменения по одному из сроков годности.
|date_start|Дата начала среза данных|
|date_end|Дата окончания среза данных|
|lots[]|Массив лотов|
|lots[] aid|уникальный id лота(партии) в программе учета| не учитываются при синхронизации
|lots[] aproduct_id|уникальный id товара в программе учета GUID в 1c|
|lots[] expire|Срок годности партии|
|lots[] short|Короткий срок годности 0 или 1|
|lots[] prices[]|Массив цен|
|lots[] prices[] aid|id группы цен|
|lots[] prices[] value|цена|
|lots[] stocks[]|Массив складов. |
|lots[] stocks[] aid|id склада/магазина цен|
|lots[] stocks[] qty|количество на складе. Если товар закончился в период выгрузки - необходимо указать 0|
{
date_start: "2025-09-03T10:25:43+03:00",
date_end: "2025-09-03T18:25:43+03:00",
lots: [
{
aid: "572345",
aproduct_id: "865",
expire: "2023-09-30T00:00:00",
short: 1,
prices: [
{
aid: 0,
value: 720,
},
{
aid: 1,
value: 720,
},
{
aid: 2,
value: 602.81,
},
]
stocks: [
{
aid: 834,
qty: 9,
},
{
aid: 838,
qty: 8,
},
{
aid: 836,
qty: 0,
},
]
},
],
}
===== /api/v2/user.sync =====
Данные пользователей
|date_start|Дата начала среза данных|
|date_end|Дата окончания среза данных|
|users[]|массив пользователей|
|users[] aid|id пользователя в программе учета|
|users[] phone|Телефон|
|users[] email|E-mail|
|users[] card|Номер карты|
|users[] card_type|GUID типа карты|
|users[] firstname|Имя|
|users[] lastname|Фамилия|
{
date_start: "2025-09-03T10:25:43+03:00",
date_end: "2025-09-03T18:25:43+03:00",
users: [
aid: "722552",
email: "customer@gmail.com",
phone: "79081234567",
card: "0122222",
card_type: "1",
firstname: "Кирилл",
lastname: "Сорокин",
]
}
===== /api/v2/order.sync =====
Накопительная выгрузка изменений по заказам за период
Идентификатор aid назначается программой и считается приоритетным после первого назначения. Если aid не указан приоритетным считается id заказа, присваиваемый сайтом. После двусторонней синхронизации заказ должен содержать оба идентификатора.
Пользователя c флагом registered установленным в 0 считать гостем. Данный пользователь не имеет постоянного идентификатора и не должен быть регистрирован в качестве контрагента.
|date_start|Дата начала среза данных|
|date_end|Дата окончания среза данных|
|orders[]|массив заказов|
|orders[] aid|уникальный id заказа в программе учета|
|orders[] id|уникальный id заказа на сайте|
|orders[] number|номер заказа пользователя|
|orders[] status|id статуса заказа 1 Новый / Заказ создан Клиентом, 2 Заказ собирается / сборка в аптеке, перемещения в аптеку, 3 Заказ в аптеке / готов к выдаче клиенту, 4 Заказ отменен / отменен клиентом, 5 Заказ получен / выкуплен клиентом|
|orders[] source| Источник заказа: сайт 0, программа учета: 1|
|orders[] created|Дата создания заказа|
|orders[] changed|Дата последнего изменения заказа|
|orders[] user aid|уникальный id клиента в программе учета|
|orders[] user id|уникальный id клиента на сайте|
|orders[] user registered|клиент зарегистрирован либо гость|
|orders[] user card|номер карты клиента|
|orders[] user card_type|тип карты клиента|
|orders[] user firstname|имя клиента|
|orders[] user lastname|фамилия клиента|
|orders[] user phone|телефон клиента|
|orders[] user email|email клиента|
|orders[] shipping id|id типа доставки |
|orders[] shipping stock_aid|id пункта выдачи в программе учета|
|orders[] shipping type|тип доставки stock (самовывоз) или delivery (доставка)|
|orders[] shipping address|Адрес доставки|
|orders[] payment_id|id способа оплаты в программе учета|
|orders[] prices shipping|стоимость доставки|
|orders[] prices total|сумма заказа|
|orders[] prices coupon|сумма скидки по купону|
|orders[] prices balance|сумма внесенной оплаты по заказу|
|orders[] purchases[] aid|id товара в программе учета|
|orders[] purchases[] short|признак короткого срока годности|
|orders[] purchases[] expire|максимальный срок годности товара|
|orders[] purchases[] price|цена единицы товара|
|orders[] purchases[] qty|количество единиц товара|
|orders[] note|комментарий пользователя к заказу|
{
date_start: "2025-09-03T10:25:43+03:00",
date_end: "2025-09-03T18:25:43+03:00",
orders: [
aid: "722552",
id: 722,
number: 206,
status: 1,
source: 0,
created: "2021-09-30T10:05:00+03:00",
changed: "2021-09-30T10:05:00+03:00",
user: {
aid: "435534",
id: 456,
registered: 0,
card: "76760000000000086",
card_type: "2"
firstname: "Кирилл",
lastname: "Сорокин",
phone: "79683500000",
email: "info@web152.ru",
},
shipping: {
stock_aid: "834",
id: 30,
type: "delivery",
address: "603000 г. Нижний Новгород, Володарского"
}
payment_id: 1,
prices: {
shipping: "0",
coupon: "-12.5",
balance: "0",
total: "257",
},
purchases: [
{
aid: "3790984",
expire: "2021-09-30T10:05:00+03:00",
short: 1,
price: 1000,
qty:1
},
{
aid: "3790985",
expire: "2021-09-30T10:05:00+03:00",
short: 0,
price: 459,
qty:1
},
]
note: "Комментарий"
]
}
===== /api/v2/reference.sync =====
Справочные данные
|date_start|Дата начала среза данных|
|date_end|Дата окончания среза данных|
|books[]|Массив справочников|
|books[] name|Имя справочника|
|books[] references[]|Массив значений справочников|
|books[] references[] id|id значения справочника на сайте|
|books[] references[] aid|id значения справочника в программе учета|
|books[] references[] value|значение|
{
date_start: "2025-09-03T10:25:43+03:00",
date_end: "2025-09-03T18:25:43+03:00",
books: [
{
name: "vendor",
references: [
{
id: "678",
aid: "7959",
value: "Плантэкстракт ГмбХ и Ко.КГ/Мадаус ГмбХ"
},
{
id: "556",
aid: "7960",
value: "Рекитт Бенкизер Хелскэар/ЭсЭсЭл Мануфакт"
}
]
}
}
===== /api/v2/stock.sync =====
Справочные данные по складам.
|date_start|Дата начала среза данных|
|date_end|Дата окончания среза данных|
|cities[]|Описание городов|
|cities[] aid|id города в программе учета|
|cities[] title|Название города|
|cities[] stocks[]|Массив пункта выдачи|
|cities[] stocks[] aid|id пункта выдачи в программе учета|
|cities[] stocks[] title|Название пункта выдачи|
|cities[] stocks[] address|адрес пункта выдачи для отображения в товаре/заказе на сайте|
|cities[] stocks[] address_short|адрес пункта выдачи в сокращенном виде для СМС о заказе|
|cities[] stocks[] phone|телефон пункта выдачи|
|cities[] stocks[] lat|Географическая широта|
|cities[] stocks[] lon|Географическая долгота|
|cities[] stocks[] schedule_desc|режим работы пункта выдачи|
|cities[] stocks[] dropshipping|Признак удаленного склада (0 - нет, 1 - да)|
{
date_start: "2025-09-03T10:25:43+03:00",
date_end: "2025-09-03T18:25:43+03:00",
cities: [
{
aid: "52",
title: "Нижний Новгород",
stocks: [
{
aid: "830",
title: ЕАптека Московское шоссе ост Березовская",
address: "603079, г.Нижний Новгород, Московское шоссе, 179",
address_short: "Н.Новгород,Московское ш.,179",
phone: "78312155141",
schedule_desc: "ПН-ПТ 8:00 – 20:00; СБ-ВС 9:00 – 20:00",
lat: "56.296348",
lon: "43.924713",
},
{
aid: "831",
title: "ЕАптека Терешковой",
address: "603081, г.Нижний Новгород, ул. Терешковой, 6а",
phone: "78312155140",
lat: "56.296348",
lon: "43.924713",
schedule_desc: "ПН-ПТ 8:00 – 20:00; СБ-ВС 9:00 – 20:00",
}
]
},
]
}
===== Коды ответов =====
Любой отличный от 1 код ответа следует рассматривать как ошибку запроса.
^Код ответа^Расшифровка^
|1|Запрос успешно исполнен|
|10|Некорректный запрос|
|30|Не удалось разобрать JSON файл. Файл имеет некорректную структуру или был поврежден при загрузке|
|40|Дата текущей синхронизации указана некорректно|
|41|Дата последней синхронизации сервера не совпадает с датой последней синхронизации файла|