Интеграция Opencart с учетными системами
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
Опенкарт — один из самых распространенных интернет-магазинов. Во многих случаях возникает задача интеграции со складской учетной системой (чаще всего с 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() для обновления количества и цены в ИМ в соответствии с данными склада. Функции передают массив ключ значение (артикул-количество или цена) и не требуют параметров то есть могут запускаться планировщиком.
Как уже упоминалось, преимущество модуля — отсутствие каких либо изменений в коде опенкарта. При необходимости модуль легко дорабатывается — чтобы передать дополнительные данные нужно просто добавить новый ключ в соответствующий ассоциативный массив. Данные будут упакованы и затем распакованы в том же виде на приемной стороне.
6 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів