Magento 2.1: Добавление категорий и товаров по API

Magento2 API: Добавление категорий товаров, товаров и их атрибутов по API
Программирование
2

Недавно хотел сделать один из проектов интернет-магазина, используя CMS Magento 2. Одна из задач проекта была возможность загрузки товаров и категорий из XML поставщика на сайт по API. Эта задача была реализована. И т.к. в интернете возникает множество вопросов, каким образом загружать товары в Magento 2 по API, делюсь своими наработками в этой статье.

Взаимодействие с API Magento

Для взаимодействия с API Magento используется 3 метода:

  • Get — получить данные
  • Post — отправить данные
  • Put — изменить данные

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

При этом, переменныая $setHaders — служат для доступа к API. У меня это глобальные переменные и выглядят следующим образом:

Переменная $requestURL — формируется при составлении запроса (т.к. зависит от операции, которую необходимо выполнить).

Переменная $JsonData — это массив данных, который будет передаваться в API.

Добавление категорий товаров Magento 2 по API

Для добавления категории в Magento 2 нужно сформировать массив данных категории и отправить его на сайт.
Массив данных формируется следующим образом:

Далее декодируем массив в json и передаем в функцию Post таким образом:

Тут $requestIP — так же глобальная переменная (что бы при изменении адреса сайта, не менять его в нескольких местах кода). Формируется таким образом:

При этом, API Magento должно вернуть json, с данными добавленной категории. Этот ответ можно декодировать функцией:

И, если необходимо, записать в лог или вывести в консоль, для отладки.

Обновление категорий товаров

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

Функция обновления товара по API будет выглядеть следующим образом:

Добавление товаров в каталог Magento 2 по API

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

Первым делом, формируем массив данных о товаре. Функция выглядит так:

Как видно, в функции используется переменная $ImageArr. Это массив с изображениями товара. Формируется он следующим образом:

В самом начале функции проверяется, доступен ли файл изображения на сервере, по коду ответа.
Функция ServerResponseCode у меня выглядит так:

Но этого делать не обязательно. Просто в ходе работы было замечено, что картинки, указанные в XML поставщика иногда отсутствуют на сервере. Что бы это не вызывало ошибки скрипта — проверяем и пропускаем такую картинку.

При формировании массива, для Magento нужно указывать тип изображения (jpg, jpeg, png), поэтому в функцию встроена проверка типа изображения.

Сому картинку нужно передавать в запросе, в формате MIME base64. Поэтому используется функция base64_encode для кодирования в данный формат.

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

Функцию обновления данных о товаре тут приводить не буду. Но она абсолютно аналогична. В массив данных собираются параметры, которые нужно обновить. Делается по аналогии с обновлением данных категории.

Далее отправляем сформированный массив данных о товаре на сервер:

Добавление атрибутов товаров по API Magento 2

В массиве данных о товарах так же присутствуют пользовательские атрибуты, вида:

Во-первых, добавляются в массив они не по значению, а по ID в списке значений атрибута (у меня большинство атрибутов имеют тип — список значений).

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

Специально не стал ее очищать от своих «доработок». В принципе, функция пишется в 3 строчки. Но у меня, если вы заметили, массив атрибутов сохраняется в файл. Потом, при необходимости читается из файла или обновляется массив, если в функцию передан специальный параметр, или массив не существует.

Это сделано уже позже, для того, что бы ускорить работу скрипта. Т.к. если при каждом добавлении атрибута товара считывать все существующие значения аатрибутов, это занимает значительное время в функции добавления товара. Вы, можете пойти тем же путем. Или изобрести свой «велосипед», если тут важна производительность.

Если нам нужно получить ID значения атрибута по значению, просто ищем по массиву, примерно так:

И напоследок — самое интересное, функция добавления значения атрибута. Она проверяет, существует ли такой атрибут и, если не существует, добавляет его:

Удачи в освоении Magento!

Wordpress Woocommerce API: добавление категорий и товаров в каталог
Программирование
WordPress WooCommerce: добавление категорий и товаров по API в каталог

Если вы делаете или уже работаете с интернет-магазином на WooCommerce, рано или поздно возникнет желание автоматизировать добавление и обновление товаров и цен. А если каталог товаров большой, то есть смысл с этого и начать. Ниже — мои наработки по добавлению товаров и категорий в WooCommerce по API с помощью скрипта. Думаю, …

Изменение user-agent wordpress
Программирование
Изменение user-agent WordPress

Сразу предупрежу, что рассматривается очень индивидуальный случай. Не думаю, что многим понадобится, скорее для себя, что бы не забыть, и в случае чего подсмотреть. В статье описывается, как заменить user-agent по-умолчанию, при использовании api wordpress. Поделиться «Изменение user-agent WordPress» FacebookTwitterGoogle+LinkedInVKontakteE-mail Интересное по теме:WordPress WooCommerce: добавление категорий и товаров по API в …

WordPress Taxonomy
Программирование
WordPress не записывает значения таксономий при запуске скрипта через cron

Если нужно из стороннего источника  формировать посты в базе WordPress, чаще всего это делается с помощью функции wp_insert_post.  Отладив программу, запуская ее через web-интерфейс админки, я столкнулся с проблемой, что посты записываются не верно, используя запуск через cron. А именно: не записываются таксономии. Т.е., например, нет возможности задать категорию поста. В …

Top