Интеграция 1С и CMS WordPress посредством функционала Rest API. Используем только язык программирования 1С и штатный функционал Rest API предоставляемый CMS, без дополнительных библиотек и плагинов. Процедуры и функции 1С с комментариями внутри.
Преамбула.
Эта статья является логическим продолжением и дополнением этой моей статьи. А также полностью с ней взаимосвязанной, отсылки к ней будут периодически здесь появляться.
Рейтинг CMS.
Как и в предыдущей статье WordPress занимает лидирующие позиции по количеству установок и работающих сайтов в мире, и не только не сдает своих позиций, но и понемногу растет.
Это конечно прекрасно, но помимо достоинств, описанных в этой статье, есть еще один немаловажный фактор, о котором мне хотелось бы сообщить. Это формат обмена данными между 1С и сайтом электронной коммерции.
JSON vs. XML
Почему JSON и XML? XML является стандартом де-факто в 1С. JSON, на мой взгляд, имеет значительно больше перспектив, проще, удобнее.
От настольных компьютеров до веб-и мобильных устройств, почти все компьютерные приложения, которые мы используем сегодня, полагаются на один из двух основных стандартов сообщений: JSON и XML. Сегодня JSON является наиболее широко используемым форматом, но он обогнал XML только за последние пять лет. Быстрый онлайн-поиск «JSON vs. XML» принесет бесчисленное количество статей и постов в блогах, сравнивающих эти два стандарта и составляющих постепенно расширяющуюся предвзятость, восхваляющую простоту JSON и критикующую многословие XML. Многие статьи настаивают на том, что JSON превосходит XML из-за его краткой семантики и дисконтирует XML как неэффективный и запутанный стандарт прошлого, и здесь мне тяжело не согласиться.
Почему JSON стал более популярным, чем XML
Я на деюсь все знают, что JSON-это родной формат данных в приложениях JavaScript. Написание приложений на JavaScript почти полностью требует использования JSON для обмена данными. Возможны и другие форматы, но они требуют больше усилий, чем в случае с JSON. По мере того как JavaScript набирал популярность для разработки приложений, JSON вплотную следовал за ним как простой в использовании и изначально интегрированный формат обмена данными.
История и эволюционный путь интернета сыграли значительную роль в популяризации JSON. Согласно Stack Overflow, теперь больше вопросов задается о JSON, чем о других форматах обмена данными.
Согласно Google Trends, похожая ситуация наблюдается при сравнении интереса поиска для JSON и XML.
Полную версию сравнения можно прочитать в моей статье здесь.
Запрос данных из WordPress из 1С посредством REST API.
С момента написания прошлой статьи ничего лучше плагина Advanced Access Manager (ААМ) не появилось, поэтому продолжим с ним. Все подробности по настройке можно прочитать здесь.
Весь приводимый ниже код использовался в обработке написанной под управляемые формы. С таким же успехом его можно использовать в обычных формах (версия платформы 1С должна быть не ниже 8.3.6).
Условно постоянные значения, используемые в обработке (константы).
1. СоединениеССайтом_JWTServer. Строка подключения к сайту (host) без https://
2. СоединениеССайтом_JWToken. Токен полученный от сайта
3. СоединениеССайтом_Таймаут. Таймаут (секунд) подключения к сайту
4. СоединениеССайтом_ЭтоHTTPS_Соединение. Флаг указывающий на HTTPS-соединение.
В свой конфигурации вам надо будет их создать.
Небольшая ремарка, HTTP-соединение тестировалось, работает как надо.
Используемые маршруты WordPress.
- /wp-json/aam/v2. Выдает полный перечень сервисов плагина авторизации.
- /wp-json/aam/v2/jwt/validate. Валидация (проверка валидности) имеющегося токена.
- /wp-json/aam/v2/jwt/refresh. Обновление токена.
- /wp-json/aam/v2/jwt/revoke. Отзыв токена.
- /wp-json/aam/v2/authenticate. Аутентикация пользователя на сайте посредством пары «логин : пароль».
- /wp-json/wp/v2/categories/. Запрос категорий постов сайта.
- /wp-json/wp/v2/media/. Запрос списка картинок сайта.
- /wp-json/wp/v2/posts/. Запрос списка постов сайта.
- /wp-json/wp/v2/pages/. Запрос списка страниц сайта
В контексте данной статьи п.п. 3, 4, 5 не используются, за ненадобность (но вы можете поэкспериментировать самостоятельно, «authenticate» работает точно). Остальные приведены справочно, для демонстрации работоспособности кода. См. видео в конце статьи.
Конечные точки WordPress.
- POST.
- GET.
Процедуры и функции используемые в модуле формы.
&НаСервере
Функция ПриОткрытииНаСервере(ЗначениеКонстанты)
Возврат Константы[ЗначениеКонстанты].Получить();
КонецФункции
&НаКлиенте
Процедура ПриОткрытии(Отказ)
СоединениеССайтом_JWTServer=ПриОткрытииНаСервере("СоединениеССайтом_JWTServer");
СоединениеССайтом_JWToken=ПриОткрытииНаСервере("СоединениеССайтом_JWToken");
КонецПроцедуры
ПриОткрытии и ПриОткрытииНаСервере используются для получения констант сайта и токена.
&НаКлиенте
Процедура ПослатьЗапросНаСайт(Команда)
ПослатьЗапросНаСайтНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПослатьЗапросНаСайтНаСервере()
СтруктураПараметров=Новый Структура;
СтруктураПараметров.Вставить("Token",СоединениеССайтом_JWToken);
СтруктураПараметров.Вставить("Server",СоединениеССайтом_JWTServer);
СтруктураПараметров.Вставить("Маршрут",Маршрут);
СтруктураПараметров.Вставить("КонечнаяТочка",КонечнаяТочка);
Если ЗначениеЗаполнено(jwt) Тогда
СтруктураПараметров.Вставить("jwt",jwt);
КонецЕсли;
Если ЗначениеЗаполнено(username) Тогда
СтруктураПараметров.Вставить("username",username);
КонецЕсли;
Если ЗначениеЗаполнено(password) Тогда
СтруктураПараметров.Вставить("password",password);
КонецЕсли;
////СтруктураПараметров.Вставить("",);
СтруктураОтветаССайта = РеквизитФормыВЗначение("Объект").рс_публикация_ПодсистемаWordPressПостыСтраницы(СтруктураПараметров);
КодСостояния=СтруктураОтветаССайта["КодСостояния"];
ОписаниеОтвета=СтруктураОтветаССайта["ОписаниеОтвета"];
ПолучитьВрДеревоНаСервере(СтруктураОтветаССайта);
ЭтаФорма.Элементы.РезультатКонвертацииИзJSON.Обновить();
КонецПроцедуры
используются соответственно для посылки запроса на сайт. Связаны с кнопкой «Послать запрос на сайт». Здесь мы упаковываем исходные данные в структуру и передаем в модуль объекта для обработки, и отсылки на сайт. Получаем ответ также в виде структуры, частично обрабатываем его и передаем ответ от сайта в процедуру «ПолучитьВрДеревоНаСервере». Описание структуры ответа ниже по тексту.
Полный текст статьи и описание процедур здесь.
На этом всё, первый шаг сделан, подставляйте свои маршруты и дерзайте.
Желаю приятных экспериментов на ниве обмена из 1С с сайтом WordPress.