1С:Альфа-Авто: обмен с WordPress-сайтом. Часть 2. REST API. Авторизация






Автоматический обмен данными между 1С:Альфа-Авто и сайтом WordPress в формате JSON. Авторизация и получение данных посредством REST API WordPress’a.

Преамбула.

По моему скромному мнению, самым актуальным и перспективным форматом обмена данными в интернете является JSON, а механизм использующий его — REST API, который позволяет обмениваться данными в режиме реального времени. На текущий момент 1С не дает механизмов обмена данными с сайтом "онлайн", только через выгрузку-загрузку (поправьте, если не прав). По крайней мере перелопатив кучу информации в Интренете, почитав описания разных обработок для 1С по обмену с сайтом, ничего интересного и  связанного с REST API не нашел.

REST API.

Что это такое описывать не буду, информации в интернете много. В частности, что касается REST API WordPress, всё прочитанное в интернете оказалось, мягко говоря, устаревшим, даже в англоязычном сегменте. Даже описания разработчиков не "блещут". Самым трудным оказалась авторизация/аутентификация на сайте. Разработчики WordPress REST API расширяют и совершенствуют, а механизма авторизации/аутентификации нет. Приходилось пробовать сторонние плагины, которые в подовляющем большинстве тоже оказались устаревшими. Но, кто ищет, то всегда найдет. Этим найденным оказался плагин с аутентификацией по JWT (аутентификация с помощью JSON Web Token’а). Бесплатный, автор поддерживает и развивает, и самое главное его использование не составило большого труда.

Принцип работы.

Вашему вниманию предлагаю обработку, которая позволяет авторизоваться на сайте WordPress и получать данные с сайта посредством REST API в онлайн режиме. Огромная благодарность Александр Леонов (leongl) за его обработку Консоль HTTP-запросов с генерацией кода (ссылка), которая очень помогла и съэкономила мне кучу времени. В моей обработке процентов 80 кода взято оттуда.

***Внимание!! Данная обработка тестировалась на конфигурации 1С Альфа-Авто:Автосервис+Автосалон. Для работы с другими необходимо адаптировать!!!

***Для работы необходим сайт с HTTPS, простой HTTP работать не будет. Так как, по моему скромному мнению, HTTP уже давно не актуально, механизмы для авторизации устарели, да к тому же оказались намного сложнее.

  1. Аутентификация на сайте по JWT протоколу и получение токена. Требования: логин и пароль !! пользователя WordPress !! (рис.2)
  • На вкладке "Заголовки" (Headers) параметры заполняются автоматически.
  • На вкладке "Параметры Body" необходимо внести логин и пароль пользователя WordPress.
  • Заполните поле адрес сайта.

Нажать кнопку "Получить токен".

В случае успешной аутентификации заполняется поле "Текущий токен" и "Токен действителен до". Результат выполнения запроса можно посмотреть на вкладке "Запрос/результат" (рис.3). Прочитать ответ можно на вкладке "Объект JSON" нажав кнопку "Прочитать JSON_ответа".

Для получения данных от сайта введите строку запроса в формате REST API WordPress (или воспользуйтесь вкладкой "Типовые запросы РЕСТ АПИ") и нажмите кнопку "Послать запрос". Результат выполнения запроса можно посмотреть на вкладке "Запрос/результат" (рис.4). Прочитать ответ можно на вкладке "Объект JSON" нажав кнопку "Прочитать JSON_ответа".

2. Получение данных из WooCommerce. Требования: "пользовательский ключ" и "секретный код пользователя" WooCommerce !! (рис.5)

  • Получите токен согласно п.1.
  • Введите "пользовательский ключ" и "секретный код пользователя" WooCommerce в соответствующие поля.
  • Заполните поле адрес сайта.
  • Нажмите кнопку "Послать запрос".

 Результат выполнения запроса можно посмотреть на вкладке "Запрос/результат". Прочитать ответ можно на вкладке "Объект JSON" нажав кнопку "Прочитать JSON_ответа".

****Внимание!! Если в процессе расшифровки JSON на вкладке "Объект JSON" нажав кнопку "Прочитать JSON_ответа" получаете ошибку как на рисунке.

То знайте, формат ответа ПРАВИЛЬНЫЙ, это подтверждается онлайн декодерами в интернете, они всё правильно отображают. Проблема в 1С, она почему-то считает присланный формат неверным.

На вкладке "Дерево настроек" можно сохранить/восстановить настройки, что бы каждый раз не вводить логины/пароли заново.

Обработка делалась "под себя" и не является законченным решением, прошу не пинать за "правильность и красоту" кода 1С.

Резюме.

С помощью данной обработки мы получаем доступ из 1С Альфа-Авто в мир REST API WordPress. Дело осталось за малым, правильно читать ответы от сайта, ну и соответственно публиковать данные на сайте.

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

Версия WordPress : 4.9.8

Версия базы данных WooCommerce: 3.4.4

MySQL Версия : 5.6.39-83.1

PHP Версия : 7.1.18

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

Платформа: 1С:Предприятие 8.3 (8.3.10.2639)

Конфигурации: Альфа-Авто: Автосалон+Автосервис+Автозапчасти ПРОФ, редакция 5.1.

Здравая критика приветствуется.

С удовольствием выслушаю предложения и пожелания.

9 Comments

  1. Timur.V
    На текущий момент 1С не дает механизмов обмена данными с сайтом «онлайн», только через выгрузку-загрузку (поправьте, если не прав).

    Можно на стороне сайта сделать http-сервис

    и из 1с обращаться к нему (1с битрикс — совсем не обязателен)

    Из не совсем правильных способов, можно подключиться к базе mysql и писать сразу в таблицы.

    Reply
  2. osivv

    Это и есть REST API. Моей целью является создание обработки без вмешательства в конфигурации 1С и механизмы сайта, использующие штатные/типовые механизмы и той и другой стороны.

    Reply
  3. Alien_job

    «Проблема в 1С, она почему-то считает присланный формат неверным» — при чтении json можно указать чтобы он парсился не в структуру а в соответствие. Эта ошибка уйдет.

    1С не считает формат неверным а считает что нельзя в ключе структуры использовать двоеточие ( «wp:post_type» ), о чем явно пишет

    Reply
  4. osivv

    Спасибо за совет, воспользуюсь.

    Reply
  5. compreSSor

    при открытии обработки выдаёт:

    {ВнешняяОбработка.RestAPI_Соединение.Форма.Форма.Форма(595,35)}: Процедура или функция с указанным именем не определена (СтрНайти)

    СтрокаBase64Строка=Лев(Строка1, <<?>>СтрНайти(Строка1,Символы.вк)-1)+СтрРазделить(Строка1,Символы.ПС,)[1];

    {ВнешняяОбработка.RestAPI_Соединение.Форма.Форма.Форма(595,67)}: Процедура или функция с указанным именем не определена (СтрРазделить)

    СтрокаBase64Строка=Лев(Строка1, СтрНайти(Строка1,Символы.вк)-1)+<<?>>СтрРазделить(Строка1,Символы.ПС,)[1];

    вроде как ничего страшного, но нет этих 2-х функций

    Reply
  6. compreSSor

    а вот теперь прочитал описание и понял — код этих 2-х функций — в студию ))

    Reply
  7. osivv

    Здравствуйте, это функции из встроенных 1С, замена устаревшей Найти, поиск подстроки в строке, можно смело заменить СтрНайти на Найти.

    1С почему-то кодирует в Base64 с переводом строки, а нужна целая строка, поэтому приходится склеивать.

    Reply
  8. compreSSor

    понял… спасибо

    Reply
  9. botman4
    ***Для работы необходим сайт с HTTPS, простой HTTP работать не будет. Так как, по моему скромному мнению, HTTP уже давно не актуально, механизмы для авторизации устарели, да к тому же оказались намного сложнее.

    Будет работать без всяких проблем и заморочек, если установить плагин «Basic-Auth-master»

    Reply

Leave a Comment

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