Плагин для реализации типового обмена 1с с возможностью расширения парсеров через события.

Exchange1c for Shopaholic

Плагин для реализации типового обмена 1с с возможностью расширения парсеров через события.
Автор: Семен Кузнецов
200 USD
200 $
Скоро...
Внимание! В связи с санкциями плагин не доступен в маркетплейсе 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

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

4
Версия 1.4.0

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

5
Версия 1.5.0

Импорт заказов

Отправить запрос

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