Skip to content
Snippets Groups Projects

Интеграция 1С каталога

Пакет содержит модели, миграции и data handler'ы для интеграции с 1С.

Для работы API созданы специальные action palax\onec_catalog\core\integration\api\action\IntegrateAction и контроллер palax\onec_catalog\core\integration\api\controller\IntegrationController. Контроллер сделан абстрактным, чтобы разработчик мог сделать собственную верификацию пользователя.

Также для интеграции необходим лишь 1 endpoint. Он указан в абстрактном контроллере, поэтому, строго говоря, другие data handler'ы не должны понадобиться. При желании его, как и любой другой класс в пакете, можно переписать/расширить.

Для корректной работы миграций необходимо использовать PostgresQL не ниже 12 версии.

main.php конфиг должен содержать путь к миграциям:

...
'vendorPath' => Yii::getAlias('@vendor'),
'controllerMap' => [
    'migrate' => [
        'class' => MigrateController::class,
        'migrationPath' => null,
        'migrationNamespaces' => [
            'palax\yii2core\file\migrations',
            'palax\onec_catalog\console\migrations',
            ...
        ],
    ],
],
...

Также инициализацию компонента:

...
'components' => [
    ...
    // 1C
    CMLLoaderInterface::class => [
        'class' => CMLLoader::class,
        'commerceML' => new CommerceML(),
        'commerceMLPath' => Yii::getAlias('@data/commerceml'),
        'useDatePrefix' => true,
    ],
]

Заказы

Для работы экспорта заказов необходимо указать класс "экспортер". В пакете реализован класс OrderToXmlAdapter, но в нем нет функциональности выгрузки контрагентов. Поэтому ее нужно писать самостоятельно в проекте.

Чтобы контрагенты импортировались и привязывались к импортированным заказам необходимо имплементировать интерфейс PartnerFromXmlAdapterInterface

Пример подключения классов в main.php конфиге:

'container' => [
    'definitions' => [
        OrderToXmlAdapterInterface::class => OrderToXmlAdapter::class,
        PartnerFromXmlAdapterInterface::class => PartnerFromXmlAdapter::class,
    ],
],
'components' => [ ... ]

Статусы

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

Для статусов есть 2 енума:

  • StatusKind - вид статуса, то к чему он относится (к заказу, элементу заказа, доставке или оплате);
  • StatusType - тип статуса, т.е. какой он по сути (начальный, конченый конечный или промежуточный.

Статус "отменен" и подобные реализуются с помощью типа StatusType::Final и какого-либо внешнего флага. Например, у заказов помимо статуса есть флаг is_cancelled, который за это отвечает.

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

Оплаты

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

У оплаты имеется тип PaymentType. На данный момент там имеется только 3 типа (нал, картой и онлайн). Для расширения функциональности добавление новых типов в этот енум приветствуется.

У оплаты имеется статус. Предполагается, что по факты статусов будет лишь 2: "не оплачена" и "оплачена", но ничто не мешает сделать их больше

Для обозначения того, что "оплата оплачена" необходимо использовать статус StatusType::Final.

В иных случаях (отмена, забыл, забил и т.п.) необходимо использовать либо StatusType::Initial, либо StatusType::Intermediate.

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

  1. Наследовать модель и добавить туда необходимые поля
  2. Создать отдельную модель с суффиксом AuxData, например, PaymentAuxData, куда будут складываться дополнительные данные

У каждого подхода свои плюсы и минусы, решение должно приниматься для каждого проекта свое.

Моя личная рекомендация для большей части проектов - использовать второй вариант.