Интеграция с "Мой склад" через JSON API. Загружаем фотографии товаров на сайт

На днях для одного клиента делали интеграцию с сервисом «Мой склад». Это онлайн система по учету складских остатков с различными связанными с этой темой инструментами. У нашего клиента в данной программе хранился каталог, который необходимо было выгружать на сайт в автоматическом режиме.

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

Нашей задачей стало написание скрипта, который мог бы через JSON API загружать картинки на сервер интернет-магазина, работающий кстати на базе Битрикс.

Просмотрев официальную документацию, мы не нашли комплексных примеров, как это можно сделать. Только краткие общие описания. Поиск в Яндексе и Google тоже ничего не дал. Только отрывки кода, которые мы могли использовать как элементы общего пазла.

Для тех, кто столкнулся с той же задачей и ищет решение, рассказываем как мы все сделали.

1 этап. Общая схема работы

Для начала надо спроектировать задачу. Что и как должно происходить, а также в какой очередности.

План мы придумали следующий. Сначала наш скрипт делает запрос в базу данных "Мой склад" и запрашивает данные о всех товаров. Так уж вышло, что никакой фильтрации мы не могли сделать в силу ограничения самого API, поэтому запрашивали все позиции каталога. Единственное ограничение в том, что их можно получать максимум по 100.

Получая данные товаров, мы перебираем их и ищем у каких есть картинки. Если у товара есть картинка, мы ее сохраняем на сервере сайта в специальную папку.

Затем наш скрипт проверяет у каких товаров на сайте нет изображения. Если находит такую позицию, то получает среди ранее загруженных фотографий нужную и добавляет ее к товару.

В этом конкретном случае схема была наиболее удобная и, утвердив ее с клиентом, мы приступили непосредственно к коду.

2 этап. Пишем первую часть скрипта – загрузка фотографий на сервер из «Мой склад»

Мы сделали две функции. Первая это загрузка списка товаров.

Как видно для загрузки данных мы используем curl. И так как данные приходят в формате json, мы используем json_decode для преобразования в удобный для работы формат.

Вторая функция — это сохранение изображения товара в нужную папку на сервере.

Тут хотелось бы отметить один, не очевидный с первого взгляда, нюанс. Фотографии имеют не прямые ссылки. Там редиректы. И при прямом обращении к пути картинки вы не получите результат. Поэтому мы используем curl_getinfo, чтобы получить информацию о редиректе и далее по исходной ссылке на файл забираем данные и сохраняем на сервере сайта.

В общей конструкции это выглядит вот так:

Так как заранее не известно сколько будет позиций, мы делаем цикл while с таким условием, что как только количество товаров будет меньше нашего шага – цикл останавливается. Для подстраховки, чтобы вдруг цикл не вышел в бесконечность, у нас стоит принудительная остановка после 30 циклов.

3 этап. Пишем вторую часть скрипт – загрузка фотографии в товар из инфоблока

Напоминаем, что мы делали это на Битриксе. Если у вас другая CMS, потребуется доработка кода.

В этой части у нас так же два узла. Сначала мы находим товары без картинок, затем привязываем их к ним изображения, если такие были загружены ранее на сервер.

С циклами тут такая же история, как и в части выше.


В целом получился не большой и не сложный в понимании скрипт. Главное понять, как работает схема по загрузке данный из «Мой склад». Кстати, у всех счастливых обладателей нашего модуля VJS Core, описанные функции скоро появятся внутри ядра. И вам не придется писать эти базовые моменты самим.

Надеемся данный материал был вам полезен.

А если вам нужна помощь в интеграции сайта с этой системой учета - обращайтесь, с радостью поможем.