Интеграция 1С и CMS WordPress посредством Rest API сайта. Первый шаг

15 May

Интеграция 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.