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

15.06.22

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Архив с SQL запросами
.zip 2,49Kb
2
2 Скачать (1 SM) Купить за 1 850 руб.

У многих сразу может возникнуть вопрос: «Зачем нужен обмен через 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С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 2.3. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку. Поддерживает работу от разных юридических лиц. Работа: в составе РИБ, отдельно от РИБ, тонкий, толстый клиент, web-клиент (через интернет-браузер).

22440 руб.

19.12.2023    5701    40    11    

37

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

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

36000 руб.

03.08.2020    18153    19    22    

17

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

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23): 1С:Управление торговлей, 1С:Управление Нашей фирмой 3, 1С:Комплексная автоматизация 2, Объединенное решение: Модуль 1С:CRM 3 (3.0.21.3) +1С:ERP Управление предприятием 2. При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

7200 руб.

04.05.2021    20337    13    19    

18

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

Программа позволяет одним кликом настроить сбор цен ваших конкурентов или дилеров в интернете. Автоматически собирает данные результата поиска Яндекса (вам не придется вручную добавлять каждый сайт, за которым нужно следить). Обновление цен происходит по заданному вами расписанию автоматически. Можете легко отслеживать позиции вашего сайта в Яндексе по ключевым словам и фразам. Этот инструмент даст вам лучшее понимание того, как ваша SEO-стратегия влияет на видимость вашего сайта в поисковой выдаче, и поможет вам улучшить контент и структуру сайта для повышения его позиций. Функция доступна во всех тарифах.

19950 руб.

23.09.2019    31148    8    12    

31

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

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

4200 руб.

07.06.2022    18014    41    56    

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