Как стать автором
Обновить

Интеграция Опенкарт с учетными системами

Время на прочтение4 мин
Количество просмотров6.4K
Опенкарт — один из самых распространенных интернет-магазинов. Во многих случаях возникает задача интеграции со складской учетной системой (чаще всего с 1С).

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

Также часто стоит задача засинхронизировать сами товары, их параметры, фотографии и так далее.

Сложность в том что, как правило, изменения нужно делать и в ИМ и в складской системе а значит, разработчик должен знать обе системы или нужно привлекать еще одного разработчика. Существуют готовые решения но они обычно требуют допиливания или платные и все равно требуют допиливания.

Для решения данной проблемы создан модуль к Опенкарт который расширяет API опенкарта позволяя вносить изменения только на стороне учетной системы.

Модуль бесплатный с открытым кодом, расположен на гитхабе.

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

Устанавливается модуль в ИМ либо стандартным образом через админку либо простым копированием в папку catalog/controller/api. Модуль состоит из одного файла. Никаких изменений в настройках или структуре опенкарта не требуется.

Разумеется, в админке нужно сгенерить API KEY который потом будет задан в настройках складской системы для залогинивания в API перед обращением к нему.
Работа проверена с Опенкарт 2.3 и 3.0

Модуль предоставляет несколько функций API для работы с заказами и товарами.
В соответствии с соглашениями опенкарт, параметры передаются методом POST и перед обращением к API должен быть получен специальный токен. Обмен данными производится в формате JSON. Все это стандартные средства работы с API Опенкарта.

Работа с заказами


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

Импорт заказов выполняется вызовом функции orders().
Чтобы получить только нужные ордера передается параметр status_id со статусом ордеров. Поскольку статусы в опенкарте создаются админке и могут быть какими угодно, то предварительно нужно получить список статусов методом statuses(), возвращающим массив ключ-значение с идентификаторами и названиями статусов.
Эти статусы учетная система предъявяет для уточнения в каком нибудь выпадающим списке. Менеджер выбирает с этих статусов тот, что соответствует новому заказу.

С заказом приходит список товаров и данные клиента для доставки.
Для идентификации заказов ИМ учетная система должна записать ID заказов в какой то атрибут внутреннего заказа. По этим идентификаторам обновляются статусы в ИМ а также проверяется что данный заказ уже импортирован.

Обновление статусов в ИМ производится функцией updateorder()
Менеджер выбирает нужные заказы (учетной системы) в нужном состоянии(например заказ в обработке) и обновляет статусы соответствующих исходных заказов в ИМ. Передается массив ключ-значение — идентификатор заказа ИМ и id статуса ИМ из предложенного системой выпадающего списка.

Например заказы могут быть обновлены после того как приняты в обработку, отправлены клиенту, доставлены клиенту и закрыты. Это на усмотрение менеджера.
Разумеется если статусы в обоих системах четко определены и не меняются то вызовы API с фиксированными статусами можно повесить на какой либо планировщик и вызывать автоматически.

Работа с товарами


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

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

Для добавления товаров в магазин служит функция addproducts().

В магазин передаются товары, которых там еще нет. Для того чтобы не передать дубли можно получить с магазина список существующих там артикулов методом articles().
Чтобы товары попали сразу в нужную категорию нужно предварительно получить список категорий методом cats() и дать менеджеру возможность выбрать нужную категорию из списка. После этого товары дооформляются стандартными средствами в админ панели Опенкарт.

Товар передается в виде наименования, артикула, описания (если есть), цены и количества. В ряде случаев стоит задача передать со склада атрибуты, все описания, фотографии и так далее. Но на этот счет есть сомнения в целесообразности создавать все это на стороне учетной системы.

Во первых, для классического складского учета достаточно названия и артикула, то есть тех данных, которые используются в накладных и заказах.

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

Если оказалось что в ИМ уже есть какие то товары на момент внедрения складской системы то можно получить список товаров из ИМ методом getproducts() и добавить в справочник товаров учетной системы. Уникальность так же проверяется по артикулу.

Далее основные функции updatequantity() и updateprice() для обновления количества и цены в ИМ в соответствии с данными склада. Функции передают массив ключ значение (артикул-количество или цена) и не требуют параметров то есть могут запускаться планировщиком.

Как уже упоминалось, преимущество модуля — отсутствие каких либо изменений в коде Опенкарта. При необходимости модуль легко дорабатывается — чтобы передать дополнительные данные нужно просто добавить новый ключ в соответствующий ассоциативный массив. Данные будут упакованы и затем распакованы в том же виде на приемной стороне.

На случай если учетная система написана на PHP есть готовая функция для вызова API опенкарта (строчку сообщения системе об ошибке просто убрать).
Теги:
Хабы:
Всего голосов 8: ↑8 и ↓0+8
Комментарии4

Публикации

Истории

Работа

PHP программист
148 вакансий

Ближайшие события