Интеграция 1С с сайтом (магазином) WordPress (WooCommerce) с помощью Rest API сайта. Часть 1. Авторизация





































Интеграция 1С с сайтом (магазином) WordPress (WooCommerce) с помощью функционала Rest API предоставляемого платформой (CMS) WordPress (WooCommerce). Без дополнительных приложений на PHP/вставьте сюда любой другой язык программирования/.

Преамбула.

     В настоящее время торговля в глобальной сети развивается гигантскими шагами. Появляется огромное количество сайтов и интернет-магазинов самого разного уровня и содержания. Сегодня в процессе создания любого сайта/интернет-магазина не обойтись без системы управления контентом (CMS). Иначе CMS называют «движком» сайта/интернет-магазина. Но какой «движок» выбрать? Ведь на сегодняшний день на рынке присутствует не один десяток систем. А в нашей стране (по моему мнению), где большинство компаний (больших и малых) продающих товары/услуги ведут учет в программе на базе 1С (неважно какой), актуальность обмена данными с интернет-магазином возрастает с каждым днём. И если, интернет-магазин базируется не на Битриксе, то возникают большие проблемы (а может и нет, могу ошибаться), да и с Битриксом далеко не всё так «гладко и сладко».

Проблем обмена с сайтом/интернет-магазином из 1С интересовала давно, и когда в прошлом году начал в плотную заниматься вопросом в каком направлении «копать», изучал множество CMS. Основными критериями были:

1. Только он-лайн обмен, без файла обмена.
2. Без вмешательства в платформу сайта, использовать только те инструменты, что предоставляет сайт.
3. Минимум финансовых затрат, максимально обходиться тем, что дается бесплатно.
4. Без вмешательства в 1С (внешняя обработка/отдельная конфигурация), использовать только те инструменты, что предоставляет 1С.
5. Настройка работы должна быть простой и минималистичной.

Что касается CMS, «копание» было недолгим, посмотрите рисунки, я думаю вы все поймете почему выбор пал на WordPress (источник сайт «itrack.ru», данные на 2024 год, но суть не меняется). Рис.1.1

рис 1.1-общий рейтинг CMS

рис 1.1-общий рейтинг CMS

рис 1.2-рейтинг бесплатных CMS

рис 1.3-динамика числа установок CMS

рис 1.4-динамика числа установок CMS

    И всё же, почему WordPress?  Плюсов в нём на порядок больше, чем в других платформах, но это тема отдельной статьи, если интересно готов потом написать. В двух словах скажу, что, если вы хоть немного разберетесь с WordPress, вам не нужны будут дизайнеры, верстальщики, PHP-программисты и прочие, связанные с сайтом. И самый жирный «+» это то, что WordPress был самым простым в изучении для начинающих. И самое главное REST API. Ведь REST API WordPress/ WooCommerce и сам WordPress полностью удовлетворяет первые три моих принципа.

1. Он-лайн обмен — он для этого и создан.
2. Предоставляется платформой (сообществом разработчиков WordPress/ WooCommerce).
3. Бесплатно. Также в WordPress превеликое множество бесплатных приложений и инструментов, которые нужны для сайта.

     Что касается стороны 1С, то пункт 4 тоже беспроблемный, что касается пункта 5, не скажу, что просто, но проще настроек Битрикса по обмену с сайтом — однозначно. 

    Также сыграло огромную роль то, что REST API WordPress был очень хорошо документирован, имелось множество разработок и примеров использования в интернете, встроен в CMS. И самое главное он бурно развивается, и прирастает всё новыми и новыми функциями («конечными точками» выражаясь языком разработчиков). Забегая немного вперед скажу, что уже есть немало плагинов, которые предоставляют свои REST API, тем самым расширяют возможности WordPress. Такой один, очень интересный с моей точки зрения, «Booking» (он-лайн запись на прием/ремонт к специалисту, в общем там много «фишек»), использую в изучении и тестировании.

С чего начать?

Наверное, с самого главного вопроса «Как соединиться с сайтом?»

    В этой статье расскажу вам о двух моментах, без которых будет невозможно осуществлять обмен с сайтом. И самое главное авторизоваться на сайте для дальнейшей работы по обмену данными. Искал долго и упорно, пробовал много способов и предлагаемые разработчиками, и  Basic Auth, и плагинами для WordPress, все оказались замороченными и сложными, и как правило требовалось вмешиваться в работу сайта, правки htaccess, или чего-то иного. В том числе, значительно усложняли код 1С. 
    Но выход был найден, и как обычно, «всё гениальное просто», заключался он в JSON Web Token (JWT). Что это такое вы можете прочитать в википедии, там всё достаточно подробно описано.

Первый момент — нам JWT нужен для авторизации на сайте и получения доступа к REST API сайта.
Второй момент — это плагин для генерации токенов.

    Я просмотрел и протестировал несколько плагинов для получения JWT. Но все они оказались или устаревшими, или сложны в настройке. Остановился на одном, он называется Advanced Access Manager (ААМ). Правда он предназначен для другого, но нам это не важно. Важно то, что он отлично справляется с главной для нас задачей — генерацией токенов.

    Лирическое отступление. Многие скачивали (в том числе не так давно) мою старую обработку по авторизации, и потом говорили, что, что-то не работает. Так вот, эта обработка устарела и морально и физически, так как разработчик плагина шагнул далеко вперёд (в этом есть и моя заслуга, так как с моей помощью он исправил пару-тройку недочетов плагина). И если раньше использовались только временные токены, то сейчас можно генерировать токены с неопределенно долгим сроком действия (хоть месяц, хоть год, хоть два).
     А что нам дает токен? А то, что теперь нам не нужны ни логины, ни пароли, ни шифрование и прочее связанное с авторизацией. В конечном итоге на порядок упрощается код 1С для авторизации на сайте. 

Установка и настройка Advanced Access Manager (ААМ).

Заходим на сайт в консоль администрирования. Заходим на страницу плагинов и жмем кнопку "Добавить новый".

В строке поиска вводим «AMM». После этого жмем кнопку "Установить".

После установки активируем плагин нажав кнопку "Активировать".
На этом процесс установки завершен.

Настройка ААМ для генерации токенов

Откроем настройки плагина.

Кликаем на вкладку Settings.

Ставим переключатели как на картине.

Остальное можно оставить по-умолчанию.

    Далее, добавляем нового пользователя и присваиваем ему роль «Редактор», если используется магазин WooCommerce, то роль «Менеджер магазина». Пароли задайте по-сложнее и по-длиннее, и хотя они нам в 1С не понадобятся, лучше задать.

Далее идем снова в управление AAM. Кликаем в правой панели вкладку «users».

Кликаем на «шестеренку».

Теперь в левой панели кликаем как на рисунке.

Создаем новый токен нажав кнопку «+ Create»

Задаем дату окончания действия токена и жмем «Create»

Посмотреть, скопировать токен можно нажав «глаз»

Всё… Нам больше ничего от сайта не надо, разве что скопированный в буфер обмена сам токен.

 

Программа (конфигурация) «1C WordPress Rest API service»

 

    Хочу поделиться своим опытом и найти тех, у кого есть желание и возможность развить направление, описанное выше, и принять непосредственное участие в разработке прототипа программы (конфигурации) по обмену данными между 1С и сайтом WordPress по протоколу RestAPI. И не только с WordPress, но возможно и других CMS (Joomla, OpenCart, правда документация и описание у них не идет ни в какое сравнение с WordPress, но есть), ведь даже Битрикс не так давно заявил о своем RestAPI.
    В представленном прототипе пока реализована только первая часть, авторизация с сайтом. Но в следующих частях мы вместе будем раскрывать огромный потенциал и функционал, который предоставляет нам WordPress.
 

Краткое описание представленного прототипа.

 

Общие глобальные модули (надеюсь названия говорят сами за себя):
1. Процедуры и функции общего назначения


2. Процедуры и функции работы с сайтом 

Константы:
1. СоединениеССайтом_JWTServer (Строка подключения к сайту (host) без https://)
2. СоединениеССайтом_JWToken (Токен полученный от сайта)
3. СоединениеССайтом_Таймаут (Таймаут (секунд) подключения к сайту)
4. СоединениеССайтом_ЭтоHTTPS_Соединение Флаг указывающий на HTTPS-соединение.
Небольшая ремарка, HTTP-соединение не тестировалось, поэтому, как будет работать прототип с ним не знаю.
    Надеюсь, что необходимость заполнения значений констант не вызывает сомнений, так как на текущий момент проверки этого программе нет. 

Общие формы:
1. Форма констант. Здесь хранятся данные, которые нам всегда необходимы для обмена с сайтом.

2. Форма просмотра ответа с сайта (отладочная). Здесь можно посмотреть "сырой", необработанный ответ с сайта. 


 

Справочники:
1. Предопределенные значения маршрутов и конечных точек Rest API. Сделан для удобства и категоризации маршрутов и конечных точек. 


 

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

 

В контексте данной публикации это всё.

Что бы проверить работоспособность или протестировать прототип отдельным файлом идет внешняя демо обработка (думаю, что она не нужна в составе конфигурации). 

С помощью нее вы сможете посмотреть в ответе от сайта список (ограничен 10 шт.): 

1. Категория/группа постов/страниц, имеющихся на сайте. 

2. Медиа/фото/видео файлов, хранящихся на сайте.

3. Посты опубликованные на сайте. 

4. Страницы опубликованные на сайте.

5. Проверить валидность токена. 


 

Установка программы.

Важное предупреждение!!!
Версия платформы 1С на которой будет корректно работать программа должна быть больше 8.3.6
Как узнать версию вашей платформы 1С? Смотрите рис. 

2.1.Вариант базы-источника-файловый

Установка/подключение программы.
Прототип присутствует в двух вариантах: в виде конфигурационного файла и в виде готовой информационной базы. Если вы скачиваете конфигурационный файл, то знаете, как с ним работать и что с ним делать, поэтому инструкции по работе с ним писать не буду.
Инструкция по подключению информационной базы.
1. Скачайте и распакуйте архив с программой в любой каталог вашего диска. Должен появиться файл с именем "1Cv8.1CD" (далее по тексту "ФП" — файл программы).
2. Создайте папку на диске и перенесите туда ФП (можно распаковать с разу в эту папку).
3. Запустите 1С. Появится окно со списком информационных баз (или с пустым списком). 

4. Нажмите кнопку "Добавить".
5. Выберите (о) "Добавление в список существующей информационной базы". 

6. Нажмите кнопку "Далее".
7. Внесите наименование и нажмите кнопку […], и выберите папку в которую сохранили ФП в п. 2.

8. Нажмите кнопку "Далее".

9. Нажмите кнопку "Готово". 

На этом установка/подключение программы завершена.

Для запуска программы нажмите кнопку "1С:Предприятие".

***Важное замечание.

Общее для всего контекста связанного с числовыми значениями: все числа передаваемые на сайт посредством запросов должны передаваться в числовом формате ‘123654987.321’, формат 1С ‘123 235 987.123’ (с разделителями тысяч) будет выдавать ошибку! Или в текстовом виде "123145.113". Числовой формат предпочтителен.

Чтобы настроить числовой формат в конфигураторе перейдите "Администрирование" -> "Региональные установки информационной базы" и установите настройки числа как на рисунке.

 

На этом всё, первая часть окончена.

Желаю приятных экспериментов на ниве обмена из 1С с сайтом WordPress. 

Продолжение следует.

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

 

Обработка тестировалась:

Тестировалось на моем сайте: перейти.

Версия WordPress: 5.2
MySQL Версия : 5.7.23-24
PHP Версия : 7.3.6
Платформа: 1С:Предприятие 8.3 (8.3.13.1644)

P.S. Если вам интересна описанная в публикации тема, вы готовы посвятить этому некоторое своё свободное время, есть желание, милости прошу присоединиться к моему проекту, пишите, не стесняйтесь.

27 Comments

  1. zeegin

    > должны передаваться в числовом формате ‘123654987.321’, формат 1С ‘123 235 987.123’

    Если следовать стандарту https://its.1c.ru/db/v8std#content:763:hdoc и использовать XMLСтрока для сериализации, то такие ухищрения не понадобятся.

    Reply
  2. zeegin

    Есть open source плагин https://github.com/sgtpep/woocommerce-1c

    Он позволяет настроить обмен между любой типовой конфигурацией через ее механизм синхронизации с сайтом (без доработок и снятия с поддержки) с WooCommerce используя CommerceML.

    Зачем делать так сложно и в чем именно преимущество не понятно.

    Reply
  3. DNN13

    Это рейтинг CMS в мире или в России?

    Reply
  4. a45

    (2) а корректно ли работает плагин при выгрузка 10к +- товаров?

    Reply
  5. zeegin

    (4) По-моему настройка интеграции из 1С ограничивает пакет тем количеством, которое вы за захотите. И можно ведь выгружать не все, а только измененные по плану обмена.

    Reply
  6. a45

    (5) в php коде echenge. Php от 1 до 10 importN. Xml вроде бы стоит. Т. Е сильно не разгуляешься. И изменения тоже могут проходить по всей номенклатуре — например когда ежедневно перезагружается цены от поставщиков. Таким образом план обмена огромный. В итоге при обмене не приходит ответ от сервера — обмен всегда с ошибкой.

    Reply
  7. zeegin

    (6) На стороне 1с точно есть настройка ограничения. Типа 50 номенклатур в пакете, 3 попытки, можно задать любое другое.

    Будут у тебя 10 000 товаров с измененной ценой — значит это будет выполняться 200 запросов, если они все с первого раза будут выполнены.

    Reply
  8. zeegin

    (6) Ну и если реально нужно быстро с гарантией доставки и все такое, то надо делать свою систему с RabbitMQ или Apache Kafka или любым другим брокером сообщений.

    Reply
  9. osivv

    (2) zeegin Это старый плагин, вернее давно «на рынке», цитата из его описания:

    «Предоставляет обмен данными между плагином для электронной коммерции WooCommerce и приложением для бизнеса «1C:Предприятие 8. Управление торговлей» (и совместимыми).»

    А моему механизму вси-равно, какая конфигурация, надо только сопоставить данные из 1С с данными WooCommerce.

    И самая важная разница: выгрузка-загрузка. В моем — он-лайн: послал запрос-получил ответ, положительны, отрицательный, не важно, сразу.

    Reply
  10. osivv

    (4) Моей разработке всё-равно, здесь идет ограничение WooCommerce. Возможность одновременной публикации/обновления количества товаров ограничена 100.

    И если будете ставить больше, просто будет возвращаться ошибка.

    Я выгружал с нуля порядка 9500 товаров, заняло около 2-3 часов, точно не помню. И это с учетом пауз, чтобы сайт не воспринял публикации как хакерскую атаку.

    Ошибок публикаций не было, за исключением того, что были товары с одинаковыми SKU, штук 20 было вроде.

    Reply
  11. malikov_pro

    «Если вам интересна описанная в публикации тема» — интересна, периодически пишу интеграции с сайтами есть желание сделать «конвеер».

    Woocommece хорош что у него есть HTTP API, но в доработках сложен. Наличие API есть у prestashop, за деньги у OpenCart (в паре проектов использовал), cs-cart и.т.д. Есть пара проектов где к битриксу доделываем блоки с HTTP API.

    Контроллеры REST API можно в дальнейшем использовать для RabbitMQ.

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

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

    Отладку проще вести postman + конфигуратор.

    Reply
  12. blackhole321

    (9)Нормальный рабочий подход. А если у Вас реализована отправка обновлений, скажем в подписках справочников etc. — вообще прекрасно. Менеджер добавил товар и через несколько секунд он на сайте.

    В общем — пишите еще. Хотелось бы посмотреть на реализацию очереди отправки, а также на то, как Вы боретесь с ситуациями, когда Вы отправили запрос, wordpress произвел какие-то действия, а ответ не дошел до вызывающей стороны.

    Reply
  13. osivv

    (12)

    В общем — пишите еще. Хотелось бы посмотреть на реализацию очереди отправки, а также на то, как Вы боретесь с ситуациями, когда Вы отправили запрос, wordpress произвел какие-то действия, а ответ не дошел до вызывающей стороны.

    Немного не понял сути, подобной ситуации никогда не наблюдал. В одном сеансе отправляется запрос и сразу же получаете ответ, ответ получите в любом случае: 200 (201) всё ОК или об ошибке.

    За идею с подписками спасибо, что-то сам не догадался, ))

    Но здесь один маленький нехороший ньюанс, надо внедрять код в конфигурацию.

    Reply
  14. blackhole321

    (13)

    Немного не понял сути, подобной ситуации никогда не наблюдал. В одном сеансе отправляется запрос и сразу же получаете ответ, ответ получите в любом случае: 200 (201) всё ОК или об ошибке.

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

    Но здесь один маленький нехороший ньюанс, надо внедрять код в конфигурацию.

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

    Reply
  15. osivv

    (11)

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

    Подскажите куда вставить? В код зашивать особого смысла тоже нет (а может есть?), это надо постоянно в памяти держать. В справочник загнал для удобства, и возможности самому дописывать нужные маршруты. А сами маршруты хранятся в регистре сведений, чтобы проще было доставать по подсистемам. Изучаю сейчас плагин с «букингом», это другая подсистема, другие маршруты.

    Reply
  16. blackhole321

    (16)Тут дело не в модеме и качестве связи. Такая ситуация может возникнуть по множеству причин: проблемы оборудования (вашего, провайдера, по пути к датацентру, датацентра etc.), перезагрузка сетевых устройств etc.

    Reply
  17. malikov_pro

    (15) Возможно сложность моей системы не требует подхода с общим справочником адресов, мне хватает в процедуре работы с данными скомпоновать через соответствие DTO, сериализовать в JSON и отправить его POST(АдресРесурса, ТелоСообщения), после проверить на ошибки по кодам состояния и при необходимости передать в процедуру обработки результата.

    Если в контексте обмена с сайтами, то расширение с общей структурой настроек и перечисление с типами обменов а вся транспортная логика (специфика API конкретного сайта) переносится в соответствующую обработку.

    Reply
  18. Region102

    1. Механизм токенов в принципе делается для периодической генерации, а не для использования его бесконечно долго.

    2. И ваш исходный код ОПЯТЬ закрыт? Если да, то я ни одного упоминания ОПЯТЬ не увидел в тексте статьи.

    Если хотите изучить API изнутри, то на ютубе в поиске найдите серию моих видео «WOOCOMMERCE И 1С»

    Reply
  19. osivv

    (19)

    И ваш исходный код ОПЯТЬ закрыт?

    для тебя да.

    [IS-QUOTE]»Если хотите изучить API изнутри, то на ютубе в поиске найдите серию моих видео «WOOCOMMERCE И 1С» [IS-QUOTE]

    Реклама себя?

    Все комменты по видео:

    Слишком много функций, разделено, по конечным точкам, у меня всё делается в одной функции.

    Массовая отправка товаров не реализована? Что так этож просто…

    Нельзя получить доступ к консумер-кей и консумер-секрет? Не смешите…Учите мат.часть лучше.

    Дополнительный сторонний пароль, сам признаешься что не безопасен.

    Только 2 функции «Получить список продуктов» и «создать продукт»? Маловато будет…

    WWW в строке запроса — лишнее, или неправильна настроена переадресация сайта.

    Один маршрут?

    Насмешил, «Если плагина нет происходят непонятные ошибки»…

    Если не в курсе, просвещу, для доступа к Rest API WordPress ни логин ни пароль не нужны.

    Не вводите людей в заблуждение по документации WordPress, там нет методов и т.д.

    Есть Маршруты и конечные точки, читайте документацию внимательно.

    Цитата:

    «Key Concepts

    To get started with using the WordPress REST API we will break down some of the key concepts and terms associated with the API:

    Routes/Endpoints»

    Получил список товаров, а в удобочитаемый вид привести? Зачем смотреть на «сырой» ответ в JSON?

    Категорию создавать на сайте? Да ее проще создать чем товар…

    ID категории прописывать в коде? Даже не знаю как комментировать..

    Открою секрет, в 1С урл картинки не нужен.

    Еще секрет, числовые данные лучше передавать как число, а не текст, хоть WordPress и производит конвертацию, частенько бывают ошибки…

    Советовать из документации:

    «images»: [

    {

    «src»: «http://demo.woothemes.com/woocommerce/wp-content/uploads/sites/56/2013/06/T_2_front.jpg»

    },

    {

    «src»: «http://demo.woothemes.com/woocommerce/wp-content/uploads/sites/56/2013/06/T_2_back.jpg»

    }

    не оттестировав этот код грешно, задвоение картинок на сайте не напрягает?

    А если их несколько сотен? И каждая по 1,5-2 мегабайта, сколько лишнего будет на сайте и как потом понимать какая к чему относится?

    Дошел до 39:29 дальше смотреть не стал…

    Просто боюсь предположить, что насоветуешь и чему научишь впоследствии…

    В общем палец вниз за видео.

    ОООчень много водыыыы

    Reply
  20. osivv

    Небольшое уточнение к «Если не в курсе, просвещу, для доступа к Rest API WordPress ни логин ни пароль не нужны.»

    Это справедливо для GET многих запросов (все не проверял).

    Reply
  21. Region102
    Reply
  22. Region102

    (21) Ну вы POST проверьте ) или тоже раньше не использовали?

    Reply
  23. Region102
    А что нам дает токен? А то, что теперь нам не нужны ни логины, ни пароли, ни шифрование и прочее связанное с авторизацией. В конечном итоге на порядок упрощается код 1С для авторизации на сайте.

    Интересно, то есть, я перехватив ваш http запрос, ведь зачем нам https и шифрование, и прочее связанное с авторизацией, смогу просто месяц, год или даже два, иметь полный доступ к REST API вашего сайта.

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

    Reply
  24. osivv

    (24)

    Интересно, то есть, я перехватив ваш http запрос, ведь зачем нам https и шифрование, и прочее связанное с авторизацией, смогу просто месяц, год или даже два, иметь полный доступ к REST API вашего сайта. Да, получать токен на месяц, год, или более, как вы учите в своей статье не безопасно. Но как вы писали, нет других плагинов. А но нормальному, токен надо выдавать на час, а потом он должен «протухать»

    Метод по логину и паролю — истина в последней инстанции, открытый всем ветрам.

    Отставил это на усмотрение пользователя, пусть сам сделает выбор, а если не в курсе, ААМ позволяет получать токены хоть каждую секунду, выбор за пользователем.

    И еще просвещу, авторизация по токену считается одним из безопасных методов авторизации (по-гуглите если не сложно), уж безопаснее пары логин-пароль однозначно.

    Сударь с вами разговаривать, что с радио спорить….

    Reply
  25. Region102

    (25) JWT токен безусловно хорошее решение для безопасности, но вы же пишите

    И если раньше использовались только временные токены, то сейчас можно генерировать токены с неопределенно долгим сроком действия (хоть месяц, хоть год, хоть два).

    и это проблема.

    Токен должен генерироваться периодически, это и позволяет избежать многих проблем с безопасностью. Хотя я могу и ошибаться, и jwt токены вполне безопасно генерировать на длительный срок. Просто привык работать с REST API по протоколу Oauth2.

    Reply
  26. pudoff

    (4) вот мне тоже интересно, сайт на ВП недавно сделали по схеме https://txtlab.ru/kak-sdelat-sajt-na-wordpress/ , но вручную слишком много выгружать…

    Reply
  27. user1326141

    Мне нужна помощь в интеграции 1С (10.3) с Woocommerce за денежку естественно. Буду рад вашему сообщению на майл w3b@w3b.ee

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *