Преамбула.
По моему скромному мнению, самым актуальным и перспективным форматом обмена данными в интернете является 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 уже давно не актуально, механизмы для авторизации устарели, да к тому же оказались намного сложнее.
- Аутентификация на сайте по 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.
Здравая критика приветствуется.
С удовольствием выслушаю предложения и пожелания.
Можно на стороне сайта сделать http-сервис
1с битрикс — совсем не обязателен)
и из 1с обращаться к нему (
Из не совсем правильных способов, можно подключиться к базе mysql и писать сразу в таблицы.
Это и есть REST API. Моей целью является создание обработки без вмешательства в конфигурации 1С и механизмы сайта, использующие штатные/типовые механизмы и той и другой стороны.
«Проблема в 1С, она почему-то считает присланный формат неверным» — при чтении json можно указать чтобы он парсился не в структуру а в соответствие. Эта ошибка уйдет.
1С не считает формат неверным а считает что нельзя в ключе структуры использовать двоеточие ( «wp:post_type» ), о чем явно пишет
Спасибо за совет, воспользуюсь.
при открытии обработки выдаёт:
{ВнешняяОбработка.RestAPI_Соединение.Форма.Форма.Форма(595,35)}: Процедура или функция с указанным именем не определена (СтрНайти)
СтрокаBase64Строка=Лев(Строка1, <<?>>СтрНайти(Строка1,Символы.вк)-1)+СтрРазделить(Строка1,Символы.ПС,)[1];
{ВнешняяОбработка.RestAPI_Соединение.Форма.Форма.Форма(595,67)}: Процедура или функция с указанным именем не определена (СтрРазделить)
СтрокаBase64Строка=Лев(Строка1, СтрНайти(Строка1,Символы.вк)-1)+<<?>>СтрРазделить(Строка1,Символы.ПС,)[1];
вроде как ничего страшного, но нет этих 2-х функций
а вот теперь прочитал описание и понял — код этих 2-х функций — в студию ))
Здравствуйте, это функции из встроенных 1С, замена устаревшей Найти, поиск подстроки в строке, можно смело заменить СтрНайти на Найти.
1С почему-то кодирует в Base64 с переводом строки, а нужна целая строка, поэтому приходится склеивать.
понял… спасибо
Будет работать без всяких проблем и заморочек, если установить плагин «Basic-Auth-master»