syncMoySklad

Cинхронизация с сервисом «Мой Склад».
Автор дополнения
Володя Володин
Пакетов
45
Закачек
23 619
Обычно отвечает в течение суток
Автор дополнения
Пакетов
45
Закачек
23 619
Обычно отвечает в течение суток
Версия 1.0.22-beta
Дата выпуска 12.12.2023
Загрузки 256
Просмотры 12 536
Внимание, этот компонент требует версию MODX не ниже 2.3 !
[syncMoySklad] — пакет для синхронизации с сервисом «Мой Склад».
В отличии от уже имеющихся дополнений работает с JSON API. Функционал работы по api существенно отличается от функционала протокола CommerceML, а инициатором синхронизации выступает сайт.
На данный момент реализована лишь следующая часть функционала…
<cut/>
Что уже реализовано…
  • Группа товаров — импорт/экспорт
  • Товары — импорт/экспорт
  • Модификации — импорт/экспорт
  • Остатки — импорт
  • Валюты — импорт
  • Метаданные (товара, модификации) — импорт

Перед установкой необходимо установить пакет базовой синхронизации baseSync


После установки пакета в админке появится кнопка синхронизации (на шаблонах указанных к настройке «Активные шаблоны»)



и вкладка синхронизации (удобно при отладке, можно отключить в настройках)

Синхронизация — админка сайта

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




Синхронизация — крон

Для синхронизации под крон пример файла ("/cron/sync.php"). Необходимо указать

  • service — сервис синхронизации

  • action — процессор синхронизации
  • sync_step — начальный шаг синхронизации

Создаем подобный файл и ставим на крон.



$corePath = $modx->getOption('sync_core_path', null,
	$modx->getOption('core_path', null, MODX_CORE_PATH) . 'components/sync/');
	/** @var Sync $Sync */
	$Sync = $modx->getService('sync');

	$params = array(
	'service'   => 'moysklad',
	'action'    => 'mgr/mscategory/sync',
	'sync_step' => 'sync_init',
	);

	$response = $Sync->curlExec($params);

Пользователь синхронизации (задается в настройках sync) должен существовать в админке сайта с необходимыми правами (обновление и создание ресурсов и т.п. ), иначе при запуске вы получите сообщение "Доступ запрещён!".



Класс синхронизации

Возможно самостоятельное добавление класса синхронизации. Достаточно создать настройку
имя_класса_actions, к примеру
moysklad_actions и перечислить доступные действия


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



{"mscategory":{"sync":"mscategory\/sync","import":"mscategory\/import","export":"mscategory\/export","stock":"mscategory\/stock"}}

Синхронизация — «Мой склад»

Базовый класс синхронизации с сервисом «Мой склад». На данный момент реализована синхронизация следующих сущностей.


  • Группа товаров — импорт/экспорт
  • Товары — импорт/экспорт
  • Модификации — импорт/экспорт
  • Остатки — импорт
  • Валюты — импорт
  • Метаданные (товара, модификации) — импорт

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



Настройки синхронизация — «Мой склад»

Доступны в разделе «Системные настройки» -> «syncMoySklad» -> «Основные»



  • sync_moysklad_actions — Доступные действия синхронизации.
  • sync_moysklad_api_endpoint — Url для отправки запроса к МойСклад Api.
  • sync_moysklad_api_user — Логин пользователя МойСклад.
  • sync_moysklad_api_password — Пароль пользователя МойСклад.
  • sync_moysklad_api_limit — Лимит обработки данных.
  • sync_moysklad_sync_folder — Папка синхронизации. Название папки МойСклад.
  • sync_moysklad_sync_parent — Категория синхронизации. Id категории сайта.
  • sync_moysklad_currency — Валюта магазина.
  • sync_moysklad_currency_rate — Тарифная ставка магазина.
  • sync_moysklad_process_modification — Обрабатывать модификации.
  • sync_moysklad_process_stock — Обрабатывать остатки.
  • sync_moysklad_process_image — Обрабатывать изображения.

Доступны в разделе «Системные настройки» -> «syncMoySklad» -> «Категория»



  • sync_moysklad_category_class_key — Класс категории.
  • sync_moysklad_category_template — Шаблон категории.
  • sync_moysklad_category_published — Статус категории.
  • sync_moysklad_category_fields — Основные поля категории продукта, массив соответсвия полей.
  • sync_moysklad_category_skip_fields_on_upd — Поля категории продукта исключаемые при обновлении.
  • sync_moysklad_category_process_on_import_upd — Обрабатывать категории продукта при импорте и обновлении.
  • sync_moysklad_category_process_on_import_cre — Обрабатывать категории продукта при импорте и создании.
  • sync_moysklad_category_process_on_export_upd — Обрабатывать категории продукта при экспорте и обновлении.
  • sync_moysklad_category_process_on_export_cre — Обрабатывать категории продукта при экспорте и создании.


Доступны в разделе «Системные настройки» -> «syncMoySklad» -> «Продукт»



  • sync_moysklad_product_class_key — Класс продукта.
  • sync_moysklad_product_template — Шаблон продукта.
  • sync_moysklad_product_published — Статус продукта.
  • sync_moysklad_product_fields — Основные поля продукта, массив соответсвия полей.
  • sync_moysklad_product_skip_fields_on_upd — Поля продукта исключаемые при обновлении.
  • sync_moysklad_product_attributes — Атрибуты продукта, массив соответсвия полей.
  • sync_moysklad_product_price — Цены продукта, массив соответсвия полей.
  • sync_moysklad_product_stock — Остатки продукта, массив соответсвия полей.
  • sync_moysklad_product_process_on_import_upd — Обрабатывать продукты при импорте и обновлении.
  • sync_moysklad_product_process_on_import_cre — Обрабатывать продукты при импорте и создании.
  • sync_moysklad_product_process_on_export_upd — Обрабатывать продукты при экспорте и обновлении.
  • sync_moysklad_product_process_on_export_cre — Обрабатывать продукты при экспорте и создании.
  • sync_moysklad_product_process_attributes_on_import — Обрабатывать атрибуты продукты при импорте.
  • sync_moysklad_product_process_attributes_on_export — Обрабатывать атрибуты продукты при экспорте.
  • sync_moysklad_product_process_image_on_import_cre — Обрабатывать изображения при импорте и создании
    продукта.
  • sync_moysklad_product_process_image_on_import_upd — Обрабатывать изображения при импорте и обновлении
    продукта.
  • sync_moysklad_product_process_image_on_export_cre — Обрабатывать изображения при экспорте и создании
    продукта.
  • sync_moysklad_product_process_image_on_export_upd — Обрабатывать изображения при экспорте и обновлении
    продукта.
  • sync_moysklad_product_process_stock — Обрабатывать остатки продукта.


Доступны в разделе «Системные настройки» -> «syncMoySklad» -> «Модификация»




  • sync_moysklad_modification_fields — Основные поля модификации, массив соответсвия полей.
  • sync_moysklad_modification_characteristics — Характеристики модификации, массив соответсвия полей.
  • sync_moysklad_modification_price — Цены модификации, массив соответсвия полей.
  • sync_moysklad_modification_stock — Остатки модификации, массив соответсвия полей.
  • sync_moysklad_modification_process_on_import — Обрабатывать модификации продукта при импорте.
  • sync_moysklad_modification_process_on_export_upd — Обрабатывать модификации при экспорте и обновлении.
  • sync_moysklad_modification_process_on_export_cre — Обрабатывать модификации при экспорте и создании.
  • sync_moysklad_modification_process_char_on_export — Обрабатывать характеристики модификации при экспорте.
  • sync_moysklad_modification_process_price_on_export — Обрабатывать цену модификации при экспорте.
  • sync_moysklad_modification_process_stock — Обрабатывать остатки модификации при синхронизации.


Доступные действия
  • sync — Полная синхронизации.
  • import — Импорт.
  • export — Экспорт.
  • stock — Импорт остатков.

Полная синхронизации

Будет выполнена полная синхронизация с «Мой склад».



Импорт

Будет выполнен импорт с «Мой склад».



Экспорт

Будет выполнен экспорт в «Мой склад».



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

Будет выполнен импорт остатков с «Мой склад».



На данный момент api «Мой склад» не поддерживает выгрузку с указанием родителя. Поэтому при импорте всегда
будут выгружены полностью
все сущности импорта. Служба поддержки сообщила что работы по внедрению данного функционала ведутся. Как
только он будет доступен
— будет возможен выборочный импорт по родителю.
Экспорт же проходит с указанием текущей категории. Помните об этом при запуске синхронизации.



Первичная настройка

Необходимо задать логин и пароль пользователя «Мой склад»
moysklad_api_password
moysklad_api_user



Необходимо задать настройку moysklad_sync_folder — категорию синхронизации «Мой склад» и
moysklad_sync_parent — id категорию сайта.
К примеру мы хотим синхронизировать папку «Товары склада» в категорию сайта «Мой склад»





Поля категории

Настройка moysklad_category_fields — массив соответствия полей ресурса к полю сущности «Группа
товаров»


{"pagetitle":{"key":"name","type":"string"},"description":{"key":"description","type":"string"},"editedon":{"key":"updated","type":"datetime"}}

Поле «pagetitle» ресурса будет задано значение поля «name» сущности
Поле «description» ресурса будет задано значение поля «description» сущности



Поля продукта

Настройка moysklad_product_fields — массив соответствия полей продукта к полю сущности «Товар»


{"pagetitle":{"key":"name","type":"string"},"description":{"key":"description","type":"string"},"article":{"key":"article","type":"string"},"weight":{"key":"weight","type":"float"},"volume":{"key":"volume","type":"float"},"editedon":{"key":"updated","type":"datetime"}}

Поле «pagetitle» ресурса будет задано значение поля «name» сущности
Поле «description» ресурса будет задано значение поля «description» сущности
Поле «article» ресурса будет задано значение поля «article» сущности



Атрибуты продукта

Настройка moysklad_product_attributes — массив соответствия дополнительный полей продукта к полю
сущности «Атрибуты Товара»


{"introtext":{"key":"Описание товара","type":"string"},"color":{"key":"Цвет","type":"array"},"size":{"key":"Размер","type":"array"}}

Поле «introtext» ресурса будет задано значение поля «Описание товара» сущности
Поле «color» ресурса будет задано значение поля «Цвет» сущности. Дополнительно указываем тип поля
«array»
Поле «size» ресурса будет задано значение поля «Размер» сущности. Дополнительно указываем тип поля
«array»
Примечание: Возможна работа с дополнительными опциями продукта, необходимо добавить префикс
«options-имяОпции» (options-stock)
Возможна работа с ТВ полями, имя поля необходимо задать как «tvидентификаторТВ» (tv1)



Цена продукта

Настройка moysklad_product_price — массив соответствия цен продукта к полю
сущности «Цена товара»


{"price":{"key":"Цена продажи","type":"float","value":0},"old_price":{"key":"Цена старая","type":"float","value":0}}

Поле «price» ресурса будет задано значение поля «Цена продажи» сущности
Значение по умолчанию 0



Остатки продукта

Настройка moysklad_product_stock — массив соответствия остатков продукта к полю
сущности «Остаток»


{"options-stock":{"key":"stock","type":"float","value":0}}

Поле «options-stock» ресурса будет задано значение поля «stock» сущности
Значение по умолчанию 0.
Для minishop2 создаем опцию «stock», в нее и будет записываться остаток




Свои действия

Возможно добавление своих действий синхронизации. Для этого необходимо внести действие в настройку sync_moysklad_actions.
Рассмотрим добавление действия по импорту остатков продукта.


Настройка sync_moysklad_actions — sync,import,export,stock


Процессор stock. Указывает необходимые шаги синхронизации. Разрешаем опцию «process_stock» — обработки
остатков



require_once dirname(__FILE__) . '/sync.class.php';

	class modSyncMoySkladStockProcessor extends modSyncMoySkladSyncProcessor
	{
	/**
	* @var array
	*/
	protected $steps = array(
	"sync_init",

	"sync_read_stock",

	"sync_import_upd_stock",

	"sync_close",
	);

	public function initialize()
	{
	$initialize = parent::initialize();

	$this->setOption('process_stock', true);

	return $initialize;
	}

	}

	return 'modSyncMoySkladStockProcessor';


WebHook

Возможна обработка событий от «Мой склад». Необходимо задать соответсвующие webHook.
Расмотрим пример обработки события при удалении продукта.
Описаны базовые функции
Задаем WebHook



  • getWebHook — Получить список сущесвующих хуков.
  • setWebHook — Установить хук. Необходимо указать 'action' — действие и 'entityType' — сущность
  • updWebHook — Обновить хук.
  • delWebHook — Отключить хук.

Задаем WebHook


if (!$Sync->loadSyncTools("moysklad")) {
	die('loadSyncTools');
	}
	$Sync->SyncTools->setWebHook(array('action' => 'DELETE', 'entityType' => 'product'));

Создаем плагин в админке сайта на событие «syncOnSyncObjectProcess» и при получении события удаления
сущности продукта
будет помечать ресурс на удаление.



$syncService = 'moysklad';
	if (!$Sync->loadSyncTools($syncService)) {
	return;
	}

	/** @var xPDOObject $object */
	$object = $modx->getOption('object', $scriptProperties, null, true);
	if (
	!$object
	OR
	!$Sync->isSyncObject($object, $syncService)
	) {
	return;
	}

	$syncType = $object->get('sync_type');
	$syncAction = $object->get('sync_action');
	$classKey = $object->get('class_key');
	switch (true) {
	/* hook event */
	case $classKey == 'event' AND $syncType == 'product' AND $syncAction == 'update':
	break;
	case $classKey == 'event' AND $syncType == 'product' AND $syncAction == 'delete':
	$Sync->SyncTools->processSyncResourceDeleted($object);
	break;
	case $classKey == 'event' AND $syncType == 'productfolder' AND $syncAction == 'delete':
	$Sync->SyncTools->processSyncResourceDeleted($object);
	break;
	}

1.0.22-beta (12.12.2023)

  • Fix "stepSyncReadProduct"

1.0.21-beta (04.12.2023)

  • Change "SyncImportUpdModification"

1.0.20-beta (05.11.2023)

  • Add "pricetype" import

1.0.19-beta (30.10.2023)

  • Changing the api version (JSON API 1.2)

Последние обсуждения в сообществе MODX.pro