Интеграция с сайтом на WooCommerce (WordPress) через MySQL

15.06.22

Интеграция - Сайты и интернет-магазины

В этой статье мы поговорим про обмен данным с WooCommerce.com (https://woocommerce.com). Для тех, кто не знает – это достаточно популярное решение для создания интернет-магазина. И если уже копать еще глубже, то по сути - это плагин для Wordpress.

Скачать исходный код

Наименование Файл Версия Размер
Архив с SQL запросами
.zip 2,49Kb
1
.zip 2,49Kb 1 Скачать

У многих сразу может возникнуть вопрос: «Зачем нужен обмен через MySQL, если есть API?». Тут может быть сразу несколько вариантов:

  • Сайт сильно доработан, поэтому через API невозможно забрать всю необходимую информацию
  • Версия сайта не поддерживает API, при этом часто это обосновывается еще и предыдущим пунктом

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

 

ШАГ №1. MySQL: Получение / Запись данных

 

Так как я делаю обмены с MYSQL часто, для оптимизации этого процесса я разработал внешнюю компоненту «MySQL2JSON». Эта компонента позволяет как читать данных из MYSQL, так и делать запись в базу данных. При этом результат работы компоненты возвращается в JSON формате. Что по сути превращает интеграцию c  MYSQL в «культурный обмен», на подобии обмена по API c INSALES или Storeland.

Еще одна особенность компоненты:  для ее работы не требуется никаких дополнительных драйверов на ПК клиента, не нужно ничего настраивать. Она работает всегда предсказуемо и идентично на любом ПК. Ну и конечно же она является «Нативной» (то есть сделанной по стандартам и требованиям «1С»)

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

 

 

Если тема со внешними компонентами будет интересна – сделаю отдельную статью, так как информации на эту тему катастрофически мало. А возможности, которые они дают – просто огромные.

 

ШАГ №2. Получение доступа к базе

 

Для того, чтобы читать / писать данные извне из базы данных MySQL необходимо сделать ряд настроек на стороне хостинга. А именно открыть доступ извне. На хостинге beget это выглядит вот так:

 

 

Хочу заметить, что на скрине стоит галочка «Единый доступ с любого IP». Эту опцию удобно использовать для работы с базой с учетом того, у Вас динамический IP адрес. Когда загрузчик будет стоять на сервере клиента, нужно будет снять эту опцию и ограничить доступ для определенных IP адресов. Проще говорят эта опция нужна только для удобной отладки, но для «рабочей базы» это не безопасно.

Кстати, у меня есть оплаченный аккаунт именно на этом хостинге именно из-за удобства работы с БД извне. Я обычно копирую базу клиента (и сайт) и разворачиваю у себя копию, чтобы ускорить процесс разработки, потому что ожидание доступов часто это совсем не быстрый процесс.

 

ШАГ №3. Написание SQL Запросов (чтение данных)

 

Для получения данных о заказах из MySQL необходимо написать SQL запрос, причем не один, а два. Возможно, этот этап вызовет некоторые сложности у «1С»-ника, который привык работать с удобным «Конструктом запросов». Однако, не стоит пугаться, SQL это родственник Языка запросов 1С, поэтому ожидаемое текст первого запроса будет начинаться с SELECT. Кстати, в «английской версии» Языка запросов 1С, сходств с SQL очень много. 

Первый запрос будет получать список заказов со всеми реквизитами, но без состава. Причем отбор мы будем делать за период. Чуть позже я рассажу как удобно делать отбор за период. Важная особенность WooCommerce – это то место, где хранятся реквизиты заказа. Это таблица wp_postmeta. По сути общая таблица, где хранится очень много информации, например та же информация о товарах, статьях, и.т.д. Для «1С»-ника это может показаться диким, но причина тому то, что  WooCommerce, хоть и очень популярный скрипт для интернет-магазина, но является плагином для Wordpress, а тот в свою очередь изначально был предназначен для блогов (Помните такие сайты?). Для получения списка заказов со всеми реквизитами, нужно сделать связь wp_wc_order_stats с таблице wp_postmeta. Первая содержит базовую информацию о заказе: Дату создания, Идентификатор заказа, статус, и.т.д.

Где писать запросы? Тут у нас есть огромный выбор. Наверное самый простой вариант для работы с базой MYSQL будет mysql front. Программа абсолютно бесплатная и для написания простых запросов ее вполне будет достаточно. Перед запуском программы, нас будет приветствовать вот такое окно:

 

 

Здесь нам предстоит ввести параметры подключения безе данных и название самого подключения. Получится примерно так:

  1. Любое имя, наиболее удобно ввести сюда имя сайта, чтобы не путаться
  2. Здесь должен быть IP адрес сервера или домен. Хочу заметить, что если клиент вам скопирует просто параметры подключения к базе из строки подключения к базе из сайта – вместо этого параметр будет LOCALHOST. Это нам категорически не подходит, так как сайт находится с базой данных на одном сервере, а мы подключаемся извне. Это параметр можно подсмотреть на хостинге. Например у BEGET это выглядит так:

 

 

3-4-5. Тут как правило все очевидно. Это имя пользователя, пароль и имя базы. Причем Имя базы и имя пользователя часто идентичны.

После создания настройки подключения к БД сайта, перед нами откроется окно со списком всех таблиц базы (слева) и содержимым выбранной таблицы (справа).

 

 

Для написание самого запроса нам нужно будет перейти на вкладку SQL Editor (1), написать сам запрос в текстовом поле (2) и выполнить команду Execute.

 

 

Запрос не претендует на самое оптимальное решение: 

 

 

И вторая часть

 

 

В результате мы получим нечто такое:

 

 

Второй запрос будет получать список товаров по нужному заказу, причем его мы будем выполнять только в том случае, если заказ ранее не был загружен. Эти проверки будут проходить уже в коде самой обработки для интеграции с сайтом.

Текст второго запроса зависит от того, каким способом Вы будете идентифицировать товар, и еще ряда параметров. Тут могут быть вариации по составу таблиц и данным. Ниже я приведу пример моего запроса:

 

В качестве примера я использую параметр order_id = 21076. Безусловно в рабочей версии он будет меняться на нужное значение (ИД Заказа).

А в результате мы получим:

 

Из таблицы wp_woocommerce_order_items мы забираем «order_item_name» и  «order_item_type». Это соотвественно название товара и тип (товар или доставка).

Таблица wp_wc_order_product_lookup содержит «product_qty», «product_net_revenue», «product_id» и «variation_id». Это количество товара, цена, ИД товара и ИД характеристики.

Из wp_wc_product_meta_lookup заберем только артикул.

 

Шаг №4. Получение данных

 

На мой взгляд, наиболее удобный методы работы с SQL запросами – это хранение текста запроса в макетах с типом «Текстовый документ».

 

 

Как можно видеть на скриншоте, у меня для каждого запроса создан отдельный макет. Если бы я хранил запросы в коде обработки, работать с ним было бы крайне не удобно. Используя макеты, я могу просто скопировать текст запроса из MYSQL FRONT (или аналогичного редактора) в «один клик» и сразу проверить как изменилось поведение обработки.

Теперь более детально посмотрим на текст запроса и на то, как я ним работаю в модуле обработки.

 

 

В коде обработки я получаю текст SQL запроса из макета, а далее меняю 2 «параметра», которые на скриншоты выделены красным (служащие параметрами отбора заказов за период)

 

 

Далее полученный текст запроса, я «скармливаю» своей внешней компоненте. Выглядит это таким образом:

 

 

Как видно из кода выше, результатом работы внешней компоненты является JSON, с которым в «1С» работать очень просто. В данном примере переменная «ТаблицаЗаказов» имеет тип «Соответствие», где обращение к данным происходит либо с помощью метода «Получить», либо просто указывая имя нужной переменной в квадратных скобках (например ТаблицаЗаказов["data"]).

 

Шаг №5. Немного про создание заказа

 

Если ранее Вы не делали интеграцию с сайтами, здесь я хотел бы немного пробежаться по этапам загрузки заказов. Думаю,  это будет удобной шпаргалкой, если вдруг Вам придется писать обмен с «0».

  1. Идентификация клиента по номеру телефона, который в идеале перед началом поиска привести к стандартизированному виду. То есть убрать пробелы, знаки «-», +7 и 8.
  2. С договором думаю все очевидно, если Контрагент найден – берем «Договор по умолчанию» иначе создаем новый
  3. Идентификация товара зависит от типа обмена. Самый простой вариант -поиск товара по Артикулу, Коду товара (если конечно, он был предварительно выгружен на сайт) или даже наименованию товара (хоть это и не очень надежно).  В противном случае приходится заводит таблицы соответствия товаров сайта и «1С». В данном вопросе все очень индивидуально и напрямую зависит от того, каким образом формировался каталог товаров на сайте. Если вы начали заниматься интеграцией, когда каталог на сайте был пуст – это замечательно. Так как перед выгрузкой Вы сможете либо выгрузить свой идентификатор на сайт, либо сразу же при выгрузке формировать таблицу соответствия ID товара на сайте и Кода товара 1С. Ну и конечно же, если Вы сами формируете каталог – Артикул на сайте точно будет соответствовать артикулу в «1С».  
  4. Ну и конечно же не забывайте про Журнал регистрации для фиксации сбоев при загрузке / выгрузке данных

 

 

Шаг №6. Выгрузка данных

 

Если при написании запроса на получение данных, можно было найти некоторые сходство с языком запросов «1С». То с выгрузкой данных все несколько сложнее, так как для выгрузки мы будем использовать команду UPDATE (обновление записи в таблице БД).

Команда имеет следующий синтаксис:

UPDATE <имя таблицы> SET <имя столбца1> = <значение2>, <имя столбца2> = <значение2>... 
WHERE <имя столбца> = <значение>

Пожалуй, самой популярной выгрузкой данных на сайт является выгрузка остатков и цен товаров и 1С. Безусловно, я встречал и «полные» обмены, когда выгружать приходилось буквально все изменения по заказу и данным клиента. Но это совсем не про этот обмен. Все гораздо проще.

Особенность этого сайта, что в нем для поиска товара по «Коду 1С» используется новое «свойство» товара «_product_code1c». Оно было создано при выгрузке товаров на сайт. Однако если бы выгрузка остатков была например с идентификацией по Артикулу, нам пришлось изменить всего 1 поле в запросе.

Запрос на выгрузку остатков выглядит так:

Как вы могли догадаться, товары хранятся в той же таблице wp_postmeta, что и заказы (это особенность woocommerce). Сначала мы находим post_id по «Коду 1С», а далее делаем update meta_key = «_stock». Значение остатков пишем в «колонку» meta_value

Как видно из скрина «МОЙ_КОД_1С» и «значение2» - это параметры, которые при формировании запроса будут заменены на код товара 1С и значение остатка этого товара.

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

 

 

Здесь отличия только в meta_key = «_stock_status». В качестве «значение3» сюда нужно передать "instock" или "outofstock", когда товара нет в наличии.

Ну и последний запрос, который мы рассмотрим – обновление цен:

 

 

В коде обработки «значение1» нужно заменить на актуальную цену по товару с кодом «МОЙ_КОД_1С».

 

Заключение

 

Итак, мы с Вами рассмотрели, как работает обмен с сайтом через чтение/запись базы данных MYSQL.  Аналогичным образом можно реализовать обмен с любым другим сайтом, например на платформе OpenCart или Moguta. В отдельных статьях мы посмотрим и на структуру баз данных этих CMS.

Тестирование проводилось на платформе - 1С:Предприятие 8.3 (8.3.10.2650), (8.3.17.1549), (8.3.20.1613).

обмен с интернет-магазином интеграция сайтом MYSQL API загрузка заказов WooCommerce Wordpress

См. также

API-интеграция 1С с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress для УТ11, КА2, ERP2, УНФ, БП3, Розница, УТ10, УПП1.3

Сайты и интернет-магазины Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Беларусь Россия Управленческий учет Платные (руб)

Модуль для интеграции с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress. При помощи расширения поддерживаются следующие методы: обмен остатками товаров, обмен ценами, обработка заказов, печать стикеров, загрузка отчетов комиссионеров по API (в том числе Я.Маркет). Подходит для конфигураций Беларуси. Поддержка искусственного интелекта GigaChat

59990 руб.

05.09.2023    8597    130    74    

84

Оплата покупок "Долями" в 1С:Розница 2.3 (для работы с сервисом dolyame.ru)

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 2.3. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку.

18000 руб.

19.12.2023    1691    14    6    

11

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    15993    13    18    

13

Обмен данными с сайтом. БП 3.0

Оптовая торговля Розничная торговля Сайты и интернет-магазины Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Обмен данными с сайтом на платформе 1С:Битрикс (и подобными) для 1С: Бухгалтерия предприятия 3.0.

12000 руб.

18.03.2019    31620    113    100    

64

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17999    9    15    

14

Универсальный парсер интернет-магазинов

Оптовая торговля Розничная торговля Сайты и интернет-магазины Платформа 1С v8.3 Управляемые формы 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

С того времени, как я начал парсить сайты, прошло много лет. За это время я спарсил более 100 сайтов и записал эти товары в 1С. В итоге на свет появился универсальный парсер, который поможет Вам спарсить интернет-магазин и при этом не написать ни строчки кода.

9600 руб.

19.10.2018    52349    220    101    

112
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. olegpochekutov 1 17.08.22 03:44 Сейчас в теме
Интересная тема
А есть решения с публикацией товаров с картинками
2. markbraer 33 17.08.22 08:41 Сейчас в теме
(1) Готового решения нет
Оставьте свое сообщение