Интеграция с сайтом
Система ShopManager позволяет произвести интеграцию с вашим сайтом.
Поддерживается автоматическое обновление на вашем сайте цен и наличия товаров.
Иными словами, как только у вас обновляется любой из прайс-листов, и пересчитываются розничные цены, цены будут автоматически меняться и на вашем сайте!
Для настройки автоматического обновления цен на вашем сайте, необходимо установить на ваш сайт два скрипта, вы можете сделать это с помощью ваших программистов или мы это сделаем для вас.
Скрипт №1 - выгрузка списка товаров
В большинстве случаев создание скрипта №1 не требуется, и в качестве источника списка товаров может выступать ваш YML фид, если он присутствует у вас на сайте. Также для некоторых движков сайтов у нас есть готовые модули интеграции, уточните в службе тех. поддержки, есть ли готовый модуль для вашего движка сайта.
Для реализации выгрузки списка товаров с вашего сайта по API, требуется реализовать на стороне вашего сайта скрипт, который будет обрабатывать POST запросы, и отдавать в JSON формате информацию о списке категорий и товаров на вашем сайте. Адрес данного скрипта необходимо будет сообщить в службу тех. поддержки. В заголовке всех запросов будет передаваться параметр SMKey - секретный ключ, который вам необходимо проверять, чтобы избежать несанкцианированного обращения к вашему скрипту.
Для передачи списка категорий, в POST запросе будет отправлено следующее содержимое: {"action": "export_categories"}
В ответ необходимо отправить JSON объект следующего вида:
1 | { |
Проверьте корректность работы вашего срипта с помощью Postman или утилиты curl:
1 | curl -k -H "SMKey: 3J5B0PGG1YnKAnWoNahJL4Zk" -d '{"action": "export_categories"}' 'http://megashop.by/api/sm-sync.php' |
Для передачи списка товаров, в POST запросе будет отправлено следующее содержимое: {"action": "export_products", "limit": 100, "offset": 0}
где атрибуты limit
и offset
указывают на количество товаров которое нужно вернуть в ответ и сдвиг.
В ответ необходимо отправить JSON объект следующего вида:
1 | { |
Проверьте корректность работы вашего срипта с помощью Postman или утилиты curl:
1 | curl -k -H "SMKey: 3J5B0PGG1YnKAnWoNahJL4Zk" -d '{"action": "export_products", "limit": 100, "offset": 0}' 'http://megashop.by/api/sm-sync.php' |
Скрипт №2 - обновление цены и наличия товара (push модель)
При изменении цены товара или наличия в сводном прайсе в ShopManager, эти изменения должны тут же отразиться на вашем сайте. Для этого, со стороны ShopManager в сторону вашего сайта будет отправляться POST
запрос к скрипту (push модель). В запросе будет передаваться список измененных товаров.
Для каждого товара будут передаваться его идентификатор, новая цена и наличие.
Формат передаваемых по ссылке данных, приведен в разделе “Формат данных”.
Отправка обновления происходит в двух случаях:
- когда вы вручную меняете цену на какойто один или несколько товаров - тогда вам на сайт отправляются только эти измененные товары
- когда вы пересчитываете сводный прайс или добавляете прайс поставщика в сводный - тогда происходит полная перевыгрузка, отправляются все ваши товары
В запросе отправляется заголовок (header) с именем SMSyncType
который может принимать значения partial
(для сценария 1) и full
(для сценария 2)
Скрипт должен найти каждый измененный товар в базе и обновить цену и наличие (если цена или наличие изменилось, если не изменились, то обновлять не нужно, чтобы снизить нагрузку на вашу БД).
В ответ должен вернуться результат в формате JSON в котором будет следующая информация:
- результат обновления (status)
- количество товаров, которые успешно обновились (updateCount)
- количество товаров, которые не обновлялись, т.к. цена или наличие для них не изменились (skipCount)
- список товаров, которые не удалось обновить (errorCount)
Пример ответа в формате JSON:
1 | { |
Для того чтобы данный скрипт не могли вызвать злоумышленники, в каждом запросе передается секретный ключ (значение ключа вы можете уточнить у службы поддержки), который нужно проверять, если ключ не совпал, нужно вернуть $STATUS_UNAUTORIZED:
1 | $STATUS_OK = 0; |
Весь скрипт нужно завернуть в конструкцию try-catch, и в случае, если свалилась ошибка, вернуть статус $STATUS_ERROR
Для отладки интеграции, мы рекомендуем использовать утилиту curl или Postman. Пример отправки запроса утилитой curl:
1 | curl -d '{"products":[{"id":"653","price":"12.63","inStock":1,"delivery":{}}]}' -H "SMKey: 3J5B0PGG1YnKAnWoNahJL4Zk" -X POST http://megashop.by/api/sm-sync.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 | { |
Значения, которые принимает параметр inStock
: 0 - под заказ, 1 - В наличии, 2 - нет в наличии, 3 - не определен;
В поле delivery содержится информация о доставке:
- delivery.tt (aka town time) - срок доставки по городу (дней)
- delivery.tp (aka town price) - стоимость доставки по городу (рублей)
- delivery.ct (aka country time) - срок доставки по стране (дней)
- delivery.cp (aka country price) - стоимость доставки по стране (рублей)
В массиве staledProductsIds
передается список идентификаторов товаров, которые пропали из продажи (отсутствуют в прайсах поставщиков и в сводном прайсе).
В случае необходимости (включается по запросу), товары в выгрузке могут разбиваться на пакеты, чтобы снизить нагрузку на хостинг. Вместо отправки всех изменений цен и наличия одним запросом, товары разбиваются на группы по N товаров в группе, и отправляются отдельными запросами. При этом дополнительно передается атрибут
batchIndex
- индекс группы, начиная с 0.
В случае необходимости (включается по запросу), в выгрузку мы так-же можем передавать дополнительную информацию: оптовую цену товара, МРЦ, имя поставщика, курс и др.
В случае расширенной выгрузки, данные передаются в следующем виде:
1 | { |
Таким образом, в выгрузку по каждому товару попадают следующие дополнительные поля:
- fixedPrice - передается зафиксированная замочком вручную цена на товар (если указана)
- floorPrice - передается цена МРЦ (если указана)
- origPrice - передается оптовая цена поставщика
- priceId - передается идентификатор прайс-листа поставщика
- origStock - [текст] передается значение из колонки кол-во (как указано в прайсе поставщика)
- stock - [число] передается кол-во товаров, которое мы вычисляем, на основании значения origStock
- prices - список поставщиков
Для каждого поставщика товаров, передаются поля:
- id - id поставщика соответствует полю priceId товара
- exchangeRate - обменный курс поставщика,
- priceConfigName - имя поставщика