Exchange1c for Shopaholic
Внимание! В связи с санкциями плагин не доступен в маркетплейсе October CMS. Вы можете связаться с нами для получения лицензионной копии плагина. Поможем в установке бесплатно!
Краткое описание
Плагин для реализации типового обмена 1с с возможностью расширения парсеров через события. Поддерживает прямой обмен и обмен через файлы (zip архивы). Может использоваться как для частичного, так и для полного обмена.
В комплекте присутствуют сервисные, консольные утилиты. (подробнее в документации).
Стандартные парсеры из коробки обрабатывают: Категории, Свойства, Картинки, Товары, Предложения, Цены, Типы цен. Есть возможность назначить любую доступную цену в качестве основной.
Для работы необходим October CMS с установленным Shopaholic.
Можно адаптировать под другие платформы. Для этого нужно только переписать парсеры и консольные утилиты. Классы окружения написаны с использованием нативных функций php.
Вводная для разработчиков
Важно: Плагин работает нормально из коробки. Однако я считаю, что разработчику важно знать, некоторые нюансы. Ниже я приведу объемную информацию по процессу импорта.
В плагине есть два шлюза.
1. Веб-шлюз - используется для прямого http обмена. Основная его задача состоит в том, что-бы получить все файлы, которые отдаст 1с, и запустить файловый шлюз.
2. Файловый шлюз - используется непосредственно для обработки выгрузки, парсинга товаров и тд.
Плагин умеет блокировать импорт. После запуска парсеров запустить еще один обмен не получиться, пока не завершиться активный обмен.
Обратите внимание, что в настройках плагина во вкладке Для разработчиков есть настройка - Не удалять файлы после импорта.
Если она активна, то удалить файлы придется вручную. Используйте эту настройку только для тестирования и отладки. Это полезно если вы захотите расширить парсеры.
Всегда смотрите системный лог October CMS. Вот так выглядит системный лог от начала до конца выгрузки:
В строке Запись системного лога находится лог выгрузки. Он содержит только предупреждения и ошибки. Это связано с тем, что в October CMS не влазит полный лог. Поэтому посмотреть полные логи в файле по пути: /storage/temp/public/import/import.log
Внимание! В связи с санкциями плагин не доступен в маркетплейсе October CMS. Вы можете связаться с нами для получения лицензионной копии плагина. Поможем в установке бесплатно!
Важно!!! Для работы в фоновом режиме у artisan файла должны быть права на исполнение 755.
Как настроить импорт через прямой обмен?
1. Для запуска прямого обмена в разделе Настройки - Настройки обмена 1с необходимо указать логин и пароль.
2. Далее необходимо в 1с в разделе CRM - Интернет-магазин добавить новую интеграцию. Во вкладке авторизация вы должны указать логин и пароль со страницы настроек. В качестве url указать:
http://example.ru/api/1c-exchange где example.ru это домен вашего сайта.
Нажимаем кнопку проверить соединение. Если соединение успешно, то можете настраивать выгрузку дальше по своим потребностям.
3. После настройки нажимаем Синхронизация данных - Выполнить полный обмен.
Сердечно поздравляю, вы наладили прямой обмен.
Как настроить обмен через файловый шлюз
Примечание: Файловый шлюз намного быстрее чем веб-шлюз. Это связано с тем что 1с передает каждый файл (картинки) отдельным запросом. Поэтому для тяжелых выгрузок будет предпочтительнее настроить его.
1. Сделайте выгрузку в файлы в 1с. Запакуйте файлы в zip архив с любым именем. Убедитесь что после распаковки архива у вас появляется каталог с любым именем, внутри него должны быть файлы выгрузки.
2. Передайте архив на сервер в каталог /storage/temp/public/import. Если такого каталога нет, то создайте его.
3. Подключитесь через ssh терминал к своему серверу и в корне хоста выполните команду:
php artisan exchange1c:import
Если вам нужно автоматизировать процесс то я рекомендую использовать bash или powershell скрипты в зависимости от ОС сервера.
Все эти действия реализуем с скрипте и ставим в cron на выполнение. Благо человечество придумало для нас такие команды как:
Запаковать в zip
zip -r webdata.zip webdata
Передать файл webdata.zip на сервер в каталог /storage/temp/public/import
scp webdata.zip user@server:/storage/temp/public/import
Открыть ssh соединение с сервером и запустить команду php artisan exchange1c:import
ssh user@server /usr/bin/php artisan exchange1c:import
В общем проблем быть не должно. Прошу извинить за очевидные вещи, но меня реально часто спрашивают как это сделать.
Консольные утилиты
Запуск импорта:
php artisan exchange1c:import
Очистка рабочего каталога с выгрузкой:
php artisan exchange1c:clear
Удаляет файлы выгрузки. Удобно использовать вместе с настройкой не удалять файлы после импорта. Пригодиться для разработки.
Очистка изображений сирот:
php artisan exchange1c:orphans
У October CMS есть стандартная команда php artisan october:utl purge orphans и отдельно php artisan october:utl purge uploads. По сути моя команда делает то же самое, но после ввода одной команды и не спрашивает подтверждения yes и не упирается в memory_limit на слабых хостах.
Очистка данных каталога:
php artisan exchange1c:wipe
Данная команда используется только для разработки и тестирования. Удаляет категории, товары, свойства и др. модели согласно настройкам на странице плагина. В некоторых случаях полезно для импорта с нуля.
Расширение парсеров:
В плагине всего 2 парсера. Import и Offers, соответственно один парсит import.xml, а другой offers.xml. Еще есть общий парсер Common. Он содержит общие методы, например импорт картинок. Общий парсер не расширяется, но вы можете использовать его методы в своих расширениях.
Пример использования событий
1. Событие импорт категорий.
Event::listen('catdesign.exchange1c.import.categories', function($category) {
// $category - данные категории из файла import.xml
$categoryModel = $commonParser->getCategoryByExternalId($category->Ид);
});
2. Событие импорт товаров:
Event::listen('catdesign.exchange1c.import.products', function($product) {
// $product - данные товара из файла import.xml
// Пример использования вспомогательного парсера
$commonParser = new \CatDesign\Exchange1C\Classes\Parsers\Common()
$productModel = $commonParser->getProductByExternalId($product->Ид);
// Общие методы для моделей Product и Offer
$commonParser->importImages($productModel, $product);
$commonParser->importPropertyValue($productModel, $product);
});
3. Событие импорт предложений:
Event::listen('catdesign.exchange1c.import.offers', function($offer) {
// $offer - данные предложения из файла offers.xml
// Пример использования вспомогательного парсера
$commonParser = new \CatDesign\Exchange1C\Classes\Parsers\Common()
$offerModel = $commonParser->getOfferByExternalId($offer->Ид);
// Общие методы для моделей Product и Offer
$commonParser->importImages($offerModel, $offer);
$commonParser->importPropertyValue($offerModel, $offer);
});
4. Событие импорт типов цен:
Event::listen('catdesign.exchange1c.import.price_types', function($priceType) {
// $priceType - данные типа цен из файла offers.xml
$priceTypeModel = $commonParser->getPriceTypeByExternalId($priceType->Ид);
});
5. Событие импорт свойств:
Event::listen('catdesign.exchange1c.import.properties', function($property) {
// $property - данные совйства из файла import.xml или offers.xml
$propertyModel = $commonParser->getPropertyByExternalId($property->Ид);
});
Данные события в качестве аргументов получают данные 1 сущности из текущей итерации цикла. Если вы подпишитесь на событие вам придется написать полностью всю реализацию импорта для этого события.
При разработке своих реализаций смотрите эталонные. Они находяться в 3 парсерах в каталоге /plugins/catdesign/exchange1c/classes/parsers.
Дополнительные настройки для разработчиков.
Данные настройки находятся во вкладке Для разработчиков на странице настройки плагина.
1. Блокировка импорта - данная опция заставляет 1с повторять свой запрос до отключения блокировки. Управляющий класс сам устанавливает эту опцию в положение true на старте импорта и на false после его завершения. Блокировка позволяет отложить параллельно запущенный импорт пока не завершиться предыдущий. Проверяйте эту опцию только в случае ошибки.
2. Закрыть веб-шлюз - отключает работу веб-шлюза. Используйте если произошла ошибка и 1с ddosит ваш сервер запросами. Или что бы прервать импорт, полезно при разработке.
3. Не удалять файлы выгрузки после обработки - если активировать, то рабочая директория с выгрузкой не будет очищаться. Используйте только для разработки (проверки файлов).
Версии
История версий и анонс дополнений. Оставьте свои отзыв во вкладке поддержка. Все интересные идеи будут рассмотрены и по возможности реализованы.
Версия 1.1.0
Импорт номенклатуры. Возможность расширения.
Версия 1.1.3
Реализовать дополнительные консольные утилиты.
Версия 1.3.0
Удален обмен в фоновом режиме. Решены проблемы с таймаутом, поэтому больше в нем нет необходимости. Добавлена возможность сборки одной цены из нескольких. Добавлен импорт не номенклатурных (строковых) значений свойств. Добавлен импорт брендов.
Версия 1.4.0
Удаление событий для расширений, реализация установки своих парсеров.
Версия 1.5.0
Импорт заказов
Отправить запрос
Принимаем баг-репорты. Вы можете отправить нам запрос на получение помощи или предложение по улучшению функционала. Все сообщения обрабатываются в течении 24 часов.