Навигация
Присоединяйтесь к нашему Telegram-каналу!☝

Будьте в курсе последних новинок и фишек e-commerce: советы, полезные инструменты и эксклюзивные материалы.

Блог Rss rss_feed

Обновление модуля «Интеграция с МойСклад» для PrestaShop: стабильная синхронизация больших каталогов

Обновление модуля «Интеграция с МойСклад» для PrestaShop: стабильная синхронизация больших каталогов

Интеграция интернет-магазина с системой учёта редко остаётся простой задачей, когда каталог начинает расти. Несколько сотен товаров можно синхронизировать практически любым способом. Но когда в магазине появляются тысячи товаров, комбинации, изображения, остатки, категории, клиенты и постоянный поток заказов, на первый план выходят уже не отдельные функции, а стабильность, контроль процесса и возможность безопасно продолжить работу после сбоя.

Именно на этом сосредоточено обновление модуля «Интеграция с МойСклад» для PrestaShop до версии 1.2.5.

Модуль предназначен для синхронизации товаров, комбинаций, категорий, цен, остатков, клиентов и заказов между PrestaShop и сервисом МойСклад. Он совместим с PrestaShop 1.7.6 и современными версиями 8.x и 9.x.

Главная задача версии 1.2.5 — сделать интеграцию более предсказуемой для рабочих интернет-магазинов, в том числе для каталогов с 10 000 товаров и более.

Почему синхронизацию пришлось переработать

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

Хостинг может ограничить время выполнения PHP-скрипта. Может закончиться доступная память. Соединение с МойСклад может временно прерваться. Загрузка одного изображения может занять слишком много времени. А если процесс остановится, непонятно, какие товары уже были обработаны и с какого места начинать заново.

Поэтому в новой версии синхронизация рассматривается не как один длинный запрос, а как управляемая задача, которая выполняется частями и сохраняет своё состояние.

Это одно из ключевых архитектурных изменений версии 1.2.5.

Консольная синхронизация для больших каталогов

Для магазинов с большим количеством товаров рекомендуется использовать консольную команду:

php bin/console ewmoysklad:sync import-products --shop=ID --batch-size=50 --resume -vv

Через консоль можно запускать основные операции интеграции:

  • импорт товаров;

  • импорт категорий;

  • импорт остатков;

  • выгрузку товаров;

  • выгрузку категорий;

  • выгрузку клиентов;

  • восстановление сопоставлений;

  • очистку устаревших сопоставлений.

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

Например, если синхронизация каталога из нескольких тысяч товаров была остановлена после обработки 4 500 позиций, необязательно начинать всё сначала. При использовании режима --resume модуль может продолжить выполнение с сохранённого состояния.

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

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

А что делать, если SSH нет?

Cron-ссылки из предыдущих версий сохранены.

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

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

Cron остаётся упрощённым и совместимым вариантом, а не единственным способом запуска интеграции.

Синхронизация прямо из панели PrestaShop

Не все операции нужно запускать через консоль.

В версии 1.2.5 переработан интерфейс ручной синхронизации в административной панели PrestaShop.

Теперь при запуске операции владелец магазина видит:

  • прогресс выполнения;

  • количество обработанных объектов;

  • созданные и обновлённые записи;

  • пропущенные объекты;

  • предупреждения;

  • ошибки.

Синхронизация выполняется небольшими порциями, а после каждой порции сохраняется текущая позиция.

Появились отдельные действия:

«Начать заново», «Пауза», «Продолжить» и «Остановить».

Практическая польза такого подхода особенно хорошо заметна на больших каталогах. Если закрыть вкладку браузера, потерять соединение или временно остановить задачу, уже выполненная работа не должна пропадать.

После возвращения в административную панель процесс можно продолжить с сохранённого места.

Подготовка модуля к каталогам на 10 000+ товаров

Работа с большими каталогами затронула не только сам механизм импорта.

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

Порционная обработка

Товары больше не должны обрабатываться огромным массивом за один запрос.

Размер порции можно регулировать в зависимости от возможностей сервера.

Пауза между объектами

При необходимости между запросами может быть установлена небольшая задержка. Это позволяет снизить нагрузку как на сервер PrestaShop, так и на API МоегоСклада.

Защита от параллельного запуска

Модуль использует блокировку, которая снижает вероятность одновременного запуска нескольких одинаковых процессов.

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

Состояние задачи хранится в базе

Модуль запоминает текущую позицию и состояние длительной операции.

Это необходимо для паузы и продолжения синхронизации.

Оптимизация базы данных

Добавлены дополнительные индексы и переработана работа со списками.

Административная страница больше не должна пытаться загрузить в браузер сразу несколько тысяч или десятков тысяч сопоставлений.

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

Можно выбрать, какие поля товара разрешено обновлять

Не каждый интернет-магазин хочет полностью передавать управление карточкой товара системе МойСклад.

Например, учётная система может отвечать за цену и остатки, а описание товара и изображения редактируются непосредственно в PrestaShop.

В версии 1.2.5 можно отдельно выбрать, какие данные разрешено обновлять из МоегоСклада:

  • название;

  • описание;

  • цена;

  • закупочная цена;

  • артикул;

  • штрихкод;

  • вес;

  • категории;

  • изображения;

  • характеристики;

  • поставщик;

  • комбинации.

Это делает синхронизацию значительно безопаснее с точки зрения бизнес-процессов.

Если менеджеры ведут маркетинговое описание товара в интернет-магазине, его можно исключить из обновления. При этом цены и остатки продолжат автоматически поступать из МоегоСклада.

Интеграция становится не системой «перезаписывать всё», а инструментом, который можно адаптировать под конкретную схему работы магазина.

Выбор товаров и категорий для выгрузки

В новой версии стало больше контроля и над обратным направлением синхронизации — из PrestaShop в МойСклад.

Можно:

  • выгружать только активные товары;

  • включать в выгрузку выключенные товары;

  • выбирать определённые категории;

  • ограничивать выгрузку товарами из выбранных категорий.

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

Отдельно переработана работа с корневой категорией PrestaShop.

Корневая системная категория теперь:

  • не отображается в списке выбора;

  • не передаётся в МойСклад;

  • не получает отдельное сопоставление.

Это исключает появление в МойСкладе технической категории, которая нужна PrestaShop для внутренней структуры, но не представляет реального раздела каталога.

Исправлена логика цен товаров с комбинациями

Одной из важных технических проблем была работа товаров с комбинациями.

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

В обновлении эта логика переработана.

Для товаров с комбинациями:

  • базовая цена товара устанавливается в 0;

  • полная цена сохраняется в комбинации;

  • базовый вес также устанавливается в 0;

  • вес комбинации хранится как её влияние.

Это позволяет избежать ситуации, когда PrestaShop складывает цену базового товара и цену варианта, из-за чего покупатель видит неправильную стоимость.

Особенно это важно для одежды, обуви, товаров с фасовками, цветами, размерами и другими вариантами.

Более надёжная загрузка изображений

Изображения часто становятся одним из самых нестабильных элементов массовой синхронизации.

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

В версии 1.2.5 работа с изображениями стала более устойчивой.

В частности:

  • увеличен тайм-аут скачивания;

  • добавлены повторные попытки;

  • изображения нормализуются в JPEG;

  • ограничивается максимально допустимый размер файла;

  • ошибка одной фотографии не переводит весь товар в состояние ошибки;

  • предупреждения EXIF не засоряют вывод консоли.

Есть ещё одно важное изменение.

Если новые изображения загрузить не удалось, старые фотографии товара не удаляются.

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

Отдельное управление сопоставлениями

Сопоставление — это связь между объектом PrestaShop и соответствующим объектом МоегоСклада.

Например:

товар PrestaShop №125 соответствует товару МойСклад с определённым UUID.

Чем дольше работает интеграция, тем больше таких связей появляется.

В версии 1.2.5 для них создан отдельный раздел управления.

Можно искать сопоставления по:

  • ID PrestaShop;

  • ID МоегоСклада.

Также доступна фильтрация по типу объекта:

  • товары;

  • комбинации;

  • категории;

  • клиенты;

  • заказы.

Для выбранных записей доступны массовые операции:

  • удаление сопоставлений;

  • исключение из синхронизации;

  • возвращение исключённых объектов в синхронизацию.

Можно удалить и отдельную связь.

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

Пагинация на стороне сервера

Список разделён на страницы по 50 записей.

При каталоге из 10 000 товаров административная панель не пытается передать браузеру сразу все 10 000 строк.

Это кажется небольшим интерфейсным изменением, но именно такие детали сильно влияют на возможность нормально управлять крупным магазином.

Автоматическая очистка устаревших связей

Со временем объекты могут удаляться непосредственно в МойСклад.

Если связь с таким объектом останется в PrestaShop, модуль продолжит считать, что внешний объект существует.

В версии 1.2.5 появилась отдельная порционная операция проверки сопоставлений.

Если МойСклад возвращает для сохранённого объекта HTTP 404, модуль понимает, что объекта больше нет, и удаляет устаревшее сопоставление.

Проверяться могут:

  • товары;

  • комбинации;

  • категории;

  • клиенты;

  • заказы.

Это предотвращает накопление в базе ссылок на уже несуществующие объекты.

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

Восстановление связей после старых интеграций

Отдельная проблема возникает у магазинов, которые уже использовали другой модуль интеграции.

Товары в PrestaShop и МойСклад существуют, но новая интеграция ещё не знает, что это одни и те же позиции.

Если просто выполнить повторную выгрузку, можно получить дубли.

Для подобных случаев в модуле предусмотрено восстановление сопоставлений.

Первичный поиск соответствий может выполняться по полям МоегоСклада:

  • Код;

  • Артикул;

  • Внешний код (externalCode).

Это особенно полезно при миграции со старого решения, которое уже сохраняло ID PrestaShop или другой постоянный идентификатор во внешнем коде МоегоСклада.

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

Надёжнее стала выгрузка заказов

Интеграция товаров важна, но для реального интернет-магазина критична и передача заказов.

В обновлении переработана логика hookActionValidateOrder, которая запускается после оформления заказа в PrestaShop.

Теперь предусмотрена дополнительная защита от повторной отправки одного и того же заказа.

После создания заказа в МойСклад его ID сохраняется в таблице сопоставлений. Перед повторной отправкой модуль проверяет, существует ли уже связанный заказ.

Также были исправлены ситуации, когда:

  • у товара отсутствовало сопоставление;

  • ID внешнего объекта был пустым;

  • запрос содержал поля, которые МойСклад не разрешает передавать при создании заказа.

Особенно важен принцип обработки ошибок.

Если API МоегоСклада временно недоступен или вернул ошибку, это не должно блокировать оформление заказа покупателем в интернет-магазине.

Ошибка фиксируется модулем, но клиентский заказ продолжает создаваться в PrestaShop.

Переработана регистрация webhook

Webhook позволяют МойСкладу уведомлять интернет-магазин об изменениях без необходимости постоянно опрашивать API.

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

В версии 1.2.5 управление webhook перенесено в AJAX-интерфейс административной панели.

Теперь:

  • новая вкладка не открывается;

  • во время выполнения отображается загрузчик;

  • результат показывается непосредственно в настройках;

  • состояние сохраняется после обновления страницы.

Модуль регистрирует 9 webhook для обработки изменений товаров, комбинаций и категорий.

Успешный статус отображается только после фактического создания всех необходимых обработчиков.

Если была зарегистрирована только часть webhook, операция считается незавершённой.

Администратор также видит количество созданных обработчиков.

При удалении модуль удаляет только собственные webhook, не затрагивая обработчики других интеграций, подключённых к тому же аккаунту МоегоСклада.

Ошибки регистрации записываются в журнал.

Журнал больше не перегружает страницу

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

Поэтому журнал ошибок также получил серверную пагинацию.

На одной странице отображается 50 записей.

В результате большой лог больше не должен существенно замедлять открытие настроек модуля.

Обновлена работа с API и современными версиями PHP

Помимо новых возможностей, версия 1.2.5 включает ряд технических исправлений.

Исправлен HTTP-заголовок:

Accept: application/json;charset=utf-8

Устранены предупреждения PHP, связанные с неявно nullable-параметрами.

Также переработана структура автозагрузки PHP-классов.

Из модуля удалены:

  • устаревшая папка classes;

  • неправильный autoload.php в корне;

  • ручное повторное объявление Composer ClassLoader.

Это устраняет потенциальные конфликты между собственным Composer-загрузчиком модуля и механизмом автозагрузки PrestaShop.

Работа особенно важна с учётом поддержки современных версий PrestaShop и PHP.

Отдельное внимание уделено безопасности

При переработке модуля был проведён отдельный аудит административных и внешних точек входа.

В частности:

  • AJAX-запросы из административной панели выполняются через защищённые ссылки PrestaShop;

  • значения SQL-фильтров приводятся к ожидаемым типам;

  • данные журнала и сопоставлений экранируются перед выводом в HTML;

  • массовое удаление всех сопоставлений без выбранного фильтра заблокировано;

  • старый сокращённый токен больше нельзя использовать для управляющих webhook-запросов.

Также установлены ограничения для входящих webhook:

  • максимальный размер запроса — 2 МБ;

  • ограничено количество событий, принимаемых за один запрос.

Внешние запросы интеграции выполняются только через HTTPS с проверкой TLS-сертификатов.

Дополнительно реализована защита от ситуации, когда API-ответ или внешние метаданные могли бы попытаться перенаправить запрос с учётными данными МоегоСклада на посторонний адрес.

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

Обновление без повторной настройки магазина

Версия 1.2.5 рассчитана не только на новые установки.

Если модуль уже используется, удалять его перед обновлением не требуется.

После установки новой версии:

  • существующие настройки сохраняются;

  • созданные ранее сопоставления остаются в базе;

  • структура таблиц обновляется автоматически;

  • добавляются необходимые поля;

  • создаются новые индексы;

  • существующие cron-ссылки продолжают работать.

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

Перед обновлением рабочего магазина всё равно рекомендуется стандартная практика: создать резервную копию файлов и базы данных, а после установки проверить основные сценарии синхронизации на небольшом количестве объектов.

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

Обновление «Интеграция с МойСклад» 1.2.5 для PrestaShop в первую очередь посвящено надёжности.

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

Отдельно переработаны комбинации, изображения, заказы, webhook, журналирование, структура автозагрузки и безопасность внешних запросов.

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

Если вы уже используете модуль «Интеграция с МойСклад», можно обновиться до версии 1.2.5 без удаления существующей интеграции и повторной настройки сопоставлений.

Модуль >

Был ли этот пост полезен для вас?

    
👈 Присоединяйтесь к нашему Telegram-каналу!

Будьте в курсе последних новинок и фишек e-commerce: советы, полезные инструменты и эксклюзивные материалы.

👈 Присоединяйтесь к нашему Telegram-каналу!

Будьте в курсе последних новинок и фишек e-commerce: советы, полезные инструменты и эксклюзивные материалы.

На данный момент комментариев нет
close

Checkout

close

Избранное

Promo