Интеграция с сайтом на 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

См. также

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

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

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

18000 руб.

19.12.2023    2060    18    6    

16

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

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

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

36000 руб.

03.08.2020    16150    13    18    

13

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

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

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

5040 руб.

04.05.2021    18262    10    15    

16

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

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

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

12000 руб.

18.03.2019    31907    117    101    

66

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

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

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

9600 руб.

19.10.2018    52579    220    101    

112

SALE! 33%

«Мониторинг цен» – сервис для отслеживания цен конкурентов на ведущих маркетплейсах России

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

Сервис помогает отслеживать цены на ведущих маркетплейсах России только для одного региона – Москва и Московская область. Выполняйте анализ и контролируйте цены Ваших конкурентов сразу в системе 1С.

2400 1608 руб.

29.05.2023    7041    27    41    

15

Выгрузка для АВИТО

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

Выгрузка товаров услуг из 1С для сайта "Авито" раздел "Автозагрузка" выполнена в виде обработки. Обработка подходит для конфигураций УТ, УНФ и Розница. Данная обработка позволяет создавать шаблон с объявлениями для "Авито" - "Автозагрузка".

4200 руб.

07.06.2022    15954    43    56    

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