Drive your career as React Developer with Symphony Solutions!
×Закрыть

Интеграция Opencart с учетными системами

Опенкарт — один из самых распространенных интернет-магазинов. Во многих случаях возникает задача интеграции со складской учетной системой (чаще всего с 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() для обновления количества и цены в ИМ в соответствии с данными склада. Функции передают массив ключ значение (артикул-количество или цена) и не требуют параметров то есть могут запускаться планировщиком.

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

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

О да) где вы были год назад ?)

ну я был тут но это же девелоперский форум — тут у каждого свой самый правильный велосипед :)

Допиливать нужно всё и всегда. Иначе придётся отпиливать цены товару.

Microsoft Office не допиливал ни разу, как ни странно

Значит допиливал не ты, либо вообще не выполнял с помощью него сколь-либо серьёзной работы.

Подписаться на комментарии