Интеграция ЕКАМ для интернет-магазина на October CMS

Интеграция ЕКАМ для интернет-магазина на October CMS

Опубликовано:
08.04.2021 в 06:30
Категория:

Давно не писал годных вещей, но недавно прилетела мне интересная задача от бравого молодца Евгения. 

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

Суть задачи проста, необходимо создать интернет-магазин и наладить импорт/экспорт данных с ЕКАМ. 

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

Мне эта затея сразу показалась гиблой, так как о ЕКАМЕ я раньше не слышал. Но все же попробовать стоило.

Сайт мы задумали запилить на следующем стеке October CMS + Shopaholic. На мой взгляд это самое разумное решение, так как опенкарт, вордпрес и пр., не годятся для нормального проекта, а на фреймворк денег надо много.

Плагин для Импорта данных из ЕКАМ

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

Сперва решил не усердствовать и чисто протестировать. Сделал архитектурные намеки, разбил все на классы, получилось нечто такое:

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

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

Папка с модулями. Там должны лежать классы для работы с сущностями API. Например:

  • Товары
  • Категории
  • Заказы и тд

Классы же в папке classes должны наследовать друг друга. В core.php лежат методы для работы с данными, например создать или обновить сущность и тд. Или получить сущность по каким то параметрам. 

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

Класс import.php отвечает за получение и упаковку данных из EKAM в базу данных сайта. Там должен быть еще класс export.php, который отвечал бы за заказы, но об этом опишу в конце.

Класс request.php формирует запросы к API, в том числе занимается авторизацией. 

Ну и класс import.php в папке console само собой отвечает за работоспособность команды php artisan ekam:import.

В настоящее время все работы по плагину остановлены. Остановили мы их по причине недоработок в API ЕКАМА.

Проблемы в ЕКАМ API

У ЕКАМА API возвращает очень "плоские данные". То есть, если выражаться нормальным языком - данных там мало и с ними трудно работать. Изначально в документации (Swagger API) для получения данных был только один роут. Вот он:

http://app.ekam.ru/api/inventory/v1/nomenclatures

Данный маршрут позволяет получить товары. И он работает, есть только пара МАЛЕНЬКИХ проблем:

  • Приходит только одна цена.
  • Невозможно идентифицировать цену (uuid есть, а маршрутов для получения типов цен нет).
  • Не приходят характеристики, кроме размеров и веса.
  • Невозможно идентифицировать категорию (uuid есть, а маршрутов для получения категорий нет) Замучал поддержку, добавили!
  • Невозможно идентифицировать валюту

Точно такая же беда с предложениями товара, они тут идут как variants. Скрин данных из ЕКАМ закрепил ниже. Из API приходит все в "благородном" JSON формате. Для вас я конвертировал все в рабоче-крестьянский xml.

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

То есть делать первоначальный импорт данных из ЕКАМ, а остальное заполнить ручками на сайте. Тогда справедливый вопрос назревает. За каким вообще тогда нужен ЕКАМ.

Но все же я выбил роут для получения категорий. Его добавили в документацию. 

И вот что мне удалось сообразить:

Категории я получил, как уверяет Евгений дерево сформировано правильно.

Товары я тоже получил, но есть ощущение, что они улетели не в те категории. Вернее категории то те, но скорее всего в учетной системе их может быть несколько на одном товаре, а ЕКАМ API шлет только одну, возможно корневую.

Товар заполнен насколько это возможно. Артикул, категория, описание, заголовок, предложения (варианты) и все. Характеристик нет.

Вывод по итогам работы с ЕКАМ API

Не утешителен. ЕКАМ API кастрат, более того в поддержке API нам отказали. Оказывается ЕКАМ нацелился на работу с inSales, в качестве доказательно базы у меня даже есть пруф.

Имя менеджера я замазал, ибо негоже по законам всея Руси. 

То есть на ЕКАМ можно ставить крест. В итоге Евгений отправив навесом зеленую харчу в эту подставу, пошел на штурм Subtotal API, ну я естественно вместе с ним. 

Доби должен работать, доби должен найти ответ 1ске.

А вам мои дорогие друзья подарок от меня и Евгения. 

Отдаем в добрые руки недопиленный плагин ЕКАМА - https://yadi.sk/d/c_OjzcV0JFBgQQ

Пользовать очень просто, в настройках указать токен и в консольке написать php artisan ekam:import

*Возможно часть кода придется раскомментировать

О свистоплясках с Subtotal API отпишу позднее. Но на первый взгляд там API более зрелое. Всем спасибо!


Оцените данный материал

На еду автору

Буду крайне благодарен за любую копеечку :)