Интеграция с сайтом

Система ShopManager позволяет произвести интеграцию с вашим сайтом.
Поддерживается автоматическое обновление на вашем сайте цен и наличия товаров.

Иными словами, как только у вас обновляется любой из прайс-листов, и пересчитываются розничные цены, цены будут автоматически меняться и на вашем сайте!

Для настройки автоматического обновления цен на вашем сайте, необходимо установить на ваш сайт два скрипта, вы можете сделать это с помощью ваших программистов или мы это сделаем для вас.

Скрипт №1 - выгрузка списка товаров

Названия товаров на вашем сайте, как правило, могут отличать от названий товаров у нас в системе, поэтому мы предусмотрели способ сопоставления (ручной и автоматический) товаров на вашем сайте с товарами в нашей системе. Для того, чтобы можно было сопоставить товары, нам необходимо получить список товаров, которые есть у вас на сайте, для этого и нужен данный скрипт.

Скрипт должен обрабатывать GET запрос и отдавать в CSV формате список ваших товаров, ссылки на товары и идентификаторы товаров на вашем сайте.

Пример CSV файла который должен отдавать скрипт:

1
2
3
id;category;product_brand;product_name;price;link
123;Холодильники;Атлант;D-100500;100;https://mysite/atlant/d100500
456;Холодильники;Атлант;D-100600;120;https://mysite/atlant/d100600

В некоторых случаях создание скрипта №1 не требуется, и в качестве источника списка товаров может выступать ваш YML фид, если он присутствует у вас на сайте. Так-же, если ассортимент товаров у вас на сайте меняется не часто, можно не делать данный скрипт, а загружать перечень товаров вашего сайта к нам вручную, либо вести сопоставление товаров с нашей системой в админке вашего сайта.

Скрипт №2 - обновление цены и наличия товара (push модель)

При изменении цены товара или наличия в сводном прайсе в ShopManager, эти изменения должны тут же отразиться на вашем сайте. Для этого, со стороны ShopManager в сторону вашего сайта будет отправляться POST запрос к скрипту (push модель). В запросе будет передаваться список измененных товаров.

Для каждого товара будут передаваться его идентификатор, новая цена и наличие.
Формат передаваемых по ссылке данных, приведен в разделе “Формат данных”.

Отправка обновления происходит в двух случаях:

  1. когда вы вручную меняете цену на какойто один или несколько товаров - тогда вам на сайт отправляются только эти измененные товары
  2. когда вы пересчитываете сводный прайс или добавляете прайс поставщика в сводный - тогда происходит полная перевыгрузка, отправляются все ваши товары

В запросе отправляется заголовок (header) с именем SMSyncType который может принимать значения partial (для сценария 1) и full (для сценария 2)

Скрипт должен найти каждый измененный товар в базе и обновить цену и наличие (если цена или наличие изменилось, если не изменились, то обновлять не нужно, чтобы снизить нагрузку на вашу БД).
В ответ должен вернуться результат в формате JSON в котором будет следующая информация:

1
2
3
4
5
6
{
"status": 0,
"updateCount": 5,
"skipCount": 1,
"errorCount": 2
}

Для того чтобы данный скрипт не могли вызвать злоумышленники, в каждом запросе передается секретный ключ (значение ключа вы можете уточнить у службы поддержки), который нужно проверять, если ключ не совпал, нужно вернуть $STATUS_UNAUTORIZED:

1
2
3
4
5
6
7
$STATUS_OK = 0;
$STATUS_UNAUTORIZED = 100;
$STATUS_ERROR = 101;
if ($_SERVER['HTTP_SMKEY'] != 'secret01') {
header('SMRESULT: ' . json_encode(array('status' => $STATUS_UNAUTORIZED)));
exit;
}

Весь скрипт нужно завернуть в конструкцию try-catch, и в случае, если свалилась ошибка, вернуть статус $STATUS_ERROR

Для отладки интеграции, мы рекомендуем использовать утилиту curl или Postman. Пример отправки запроса утилитой curl:

1
curl -d '{"products":[{"id":"653","price":"12.63","inStock":1,"delivery":{}}]}' -H "SMKey: sd34asdf" -X POST http://megashop.by/shop-manager/update.php

Скрипт №2 - обновление цены и наличия товара (pull модель)

Для некоторых CMS, рациональнее обновлять цены и наличие на сайте, с применением pull модели, т.е. с определенной периодичностью (например дважды в сутки) скачивать с ShopManager актуальный список товаров и цен, и производить их обновление на вашем сайте.

Для получения списка всех товаров с актуальными ценами и наличием (в формате JSON) используется ссылка:

https://my.shopmanager.by/d/api/site-export.json?shopId=XXX&key=YYY

XXX - ID вашего магазина
YYY - API ключ

Скопировать данную ссылку (а также, сгенерировать новый API ключ) вы можете в личном кабинете ShopManager в разделе “Профиль”.

Формат передаваемых по ссылке данных, приведен в разделе “Формат данных”.

Формат данных

Данные передаются в формате JSON, пример:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"products": [
{
"id": "28",
"inStock": 1,
"price": 830.01,
"delivery": {"tt": 1, "tp": 5, "ct": 5, "cp": 15}
},
{
"id": "29",
"inStock": 1,
"price": 840.01,
"delivery": {"tt": 1, "tp": 5, "ct": 5, "cp": 15}
}
],
"staledProductsIds":["30", "31"]
}

Значения, которые принимает параметр inStock: 0 - под заказ, 1 - В наличии, 2 - нет в наличии, 3 - не определен;

В поле delivery содержится информация о доставке:

В массиве staledProductsIds передается список идентификаторов товаров, которые пропали из продажи (отсутствуют в прайсах поставщиков и в сводном прайсе).

В случае необходимости (включается по запросу), в выгрузку мы так-же можем передавать дополнительную информацию: оптовую цену товара, МРЦ, имя поставщика, курс и др.

В случае расширенной выгрузки, данные передаются в следующем виде:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"products": [
{
"id": 28,
"inStock": 1,
"price": 830.01,
"delivery": {"tt": 1, "tp": 5, "ct": 5, "cp": 15},
"fixedPrice": 830.01,
"floorPrice": 999,
"origPrice": 750,
"priceId": 123,
"origStock": "4+",
"stock": 5
}
],
"staledProductsIds":["30", "31"],
"prices": [
"id": 123,
"fileName": "оптрон-наличие.xls",
"exchangeRate": 1,
"priceConfigName": "Оптрон"
]
}

Таким образом, в выгрузку по каждому товару попадают следующие дополнительные поля:

Для каждого поставщика товаров, передаются поля: