WooCommerce REST API — обновление цен из 1С без плагинов

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Задача:
Настроить автоматический обмен цен с 1С по расписанию.

Решение:
Сложность в том, что у товара есть не только розничная цена, но и оптовая цена. Оптовая цена видна только зарегистрированным пользователям с определённой ролью - администратор или клиент. Это реализовано с помощью плагина Premmerce Wholesale Pricing for WooCommerce.

Получается, плагинами обмена с 1С обновить оптовые цены не получится. Придётся помимо покупки плагина, еще ёго и допиливать. А значит проблемы с будущими обновлениями плагина и тому подобные.

Решили настроить обмен через API WooCommerce. План такой:
- Заказчик настраивает в 1С выгрузку цен по расписанию куда-нибудь на сервер
- Мы напишем скрипт, который будет этот файл скачивать, обрабатывать и обновлять цены на сайте.

Этапы работы:

1. Настроили выгрузку из 1С.

У заказчика 1С на обслуживании, поэтому выгрузку он настроил на своей стороне. Я создал на сервере папку /exchange/ и предоставил к ней FTP-доступ. Программист заказчика настроил выгрузку номенклатуры в CSV.

Неожиданно: На сайте цены в рублях. А у некоторых позиций оказались цены в другой валюте. И если раньше заказчик присылал прайс в рублях, то в выгрузку попали цены в другой валюте. Программист заказчика задачу решил, никаких манипуляций с обменным курсом придумывать не пришлось.

2. Настроил автоматическое скачивание прайса.

На сервере в крон добавил команду для скачивания файла по расписанию. Например, для скачивания раз в час:
* 1 * * * cd /projects/site && wget -O price.csv "https://site.ru/exchange/price.csv"
Флаг "-O" с новым именем файла нужен для переименования скачиваемого прайса в имя, которое задано в скрипте обмена. И чтобы заменять предыдущий файл свежим прайсом, а не хранить лишние копии.

3. Получил ключи API в настройках WooCommerce.

4. Написал скрипт обмена.

По API Woo есть хорошая документация. Но методы работы с товарами жестко завязаны на индентефикатор товара. Не знаешь id товара - ничего с ним не сделаешь. А из 1С в выгрузку попадает только артикул или номенклатурный номер товара.
Поэтому делаем такой финт:

  • Скачиваем все товары с сайта
  • Проходим по каждому товару в выгрузке из 1С
  • Сравниваем артикул товара из с 1С и артикулом с сайта
  • Если артикул совпадает, берём его ID и новые цены
  • Всё это дело уклаываем в пачку и отправляем на сайт для обмена
Неожиданно: ключи API я получал как администратор. А в плагине оптовой цены для администратора показывается оптовая цена, а не розничная. Соответственно и по API администратор получает в качестве розничной цены - только оптовую. Получается два варианта решения проблемы: либо отключить роль администратора в плагине оптовой цены, либо выдать ключи пользователю с другой ролью. В качестве эксперимента выдал ключи, как менеджеру магазина. Тут плагин на него не влияет. Всё получилось - по API вернулись и оптовые цены и розничные.

5. Протестировал обмен.

На тесте всё получилось. Обмен цен у 3000 товаров составл 8 минут.

Статью пишу сразу после теста. Как в боевом режиме всё будет - посмотрим. Отпишусь позже.

Заметка на будущее:
Товары можно обновлять по одному либо пакетом до 100 товаров в пачке. 100 товаров сайт не принял - тяжеловата нагрузка оказалась. Пришлось уменьшить до 20 товаров в пачке.

Поделиться
Отправить
Вотсапнуть