Интеграция 1С и CMS WordPress посредством Rest API сайта. Шаг второй, публикация картинок

13.05.20

Интеграция - Сайты и интернет-магазины

Интеграция 1С и CMS WordPress посредством функционала Rest API. Используем только язык программирования 1С и штатный функционал Rest API предоставляемый CMS, без дополнительных библиотек и плагинов. Процедуры и функции передачи фото из 1С, с комментариями внутри.

Преамбула.

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

Здесь мы рассмотрим код 1С, с помощью которого сможем сделать следующее с фотографией/картинкой (медиа) на сайте:

  1. Создать.
  2. Обновить/изменить.
  3. Посмотреть 1.
  4. Посмотреть список.
  5. Удалить.

Также сможем сделать аналогичное с категориями товаров магазина WooCommerce, плюс привязка к категории картинки (Миниатюры).

Публикация Медиа.

Конечные точки WordPress используемые для медиа.

  1. POST.
  2. GET.
  3. DELETE.

Чтобы было нагляднее и понятнее, трансляция:

 команды/конечные точки запросов ВП
 "Список"    -> "GET"
 "Получить" -> "GET"
 "Создать"   -> "POST"
 "Обновить" -> "POST"
 "Удалить"   -> "DELETE"

Почему под некоторыми разными русскими "командами" используются одинаковые конечные точки WordPress? Не знаю, наверное, надо адресовать этот вопрос разработчикам CMS.

Маршруты WordPress используемые для медиа.

"Медиа" -> "/wp-json/wp/v2/media/"

Также можете по-экспериментировать с другими:

"Категория" -> "/wp-json/wp/v2/categories/"

"Посты"       -> "/wp-json/wp/v2/posts/"

"Страницы" -> "/wp-json/wp/v2/pages/"

Немного теории. REST API Handbook / Reference / Media

Является моим вольным переводом книги разработчика, источник.

Мои комментарии: образец моего комментария.

Схема

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

date
Array, datetime 
Дата публикации объекта в часовом поясе сайта.

Контекст: vieweditembed
В контексте приведенного ниже кода не использую.

date_gmt
Array, datetime 
Дата публикации объекта - GMT.

Контекст: viewedit
В контексте приведенного ниже кода не использую.

guid
object
Глобальный уникальный идентификатор объекта.

Только для чтения.
Контекст: viewedit
В контексте приведенного ниже кода не использую, генерируется системой автоматически.

id

integer
Уникальный идентификатор объекта.

Только для чтения
Контекст: vieweditembed
В коде использую, генерируется системой автоматически.

modified

string,
datetime 
Дата последнего изменения объекта в часовом поясе сайта.

Только для чтения
Контекст: viewedit
В коде использую, генерируется системой автоматически.

modified_gmt

string, datetime 
Дата последней модификации объекта в GMT.

Только для чтения.
Контекст: viewedit
В контексте приведенного ниже кода не использую.

slug

string
Слаг, буквенно-цифровой идентификатор объекта, уникальный для его типа.

Контекст: vieweditembed
В коде использую, лучше создавать самому, в латинице. Может генерироваться системой автоматически.

status

string
Определенный статус объекта.

Контекст: viewedit.
Один из вариантов: publishfuturedraftpendingprivate
В коде использую как publish, обязательный реквизит.

type

string
Type of Post for the object.

Только для чтения.
Контекст: vieweditembed
В контексте приведенного ниже кода не использую, генерируется системой автоматически.

generated_slug

string
Слаг автоматически генерируется из названия объекта.

Только для чтения.
Контекст: edit
В контексте приведенного ниже кода не использую, генерируется системой автоматически.

title

object
Заголовок/название объекта.

Контекст: vieweditembed
В коде использую, обязательный для заполнения реквизит.

author

integer
ID автора публикации объекта.

Контекст: vieweditembed
В контексте приведенного ниже кода не использую, берется системой автоматически из Токена.

comment_status

string
Устанавливает открыты или нет комментарии к объекту.

Контекст: viewedit
Один из: openclosed
В контексте приведенного ниже кода не использую, системой автоматически устанавливается closed

ping_status

string
Устанавливает открыт или нет пинк к объекту.

Контекст: viewedit
Один из: openclosed
В контексте приведенного ниже кода не использую, системой автоматически устанавливается closed

meta

object
Мета поля.

Контекст: viewedit
В контексте приведенного ниже кода не использую. Честно говоря, не знай где и как использовать.

template

string
Файл темы, используемый для отображения объекта.

Контекст: viewedit
В контексте приведенного ниже кода не использую. Честно говоря, не знай где и как использовать.

alt_text

string
Альтернативный текст для отображения, если вложение не отображается.

Контекст: vieweditembed
В коде использую, не обязательный для заполнения реквизит.

caption

object
Подпись к вложению.

Контекст: vieweditembed
В коде использую, не обязательный для заполнения реквизит.

description

object
Описание.

Контекст: viewedit
В коде использую, не обязательный для заполнения реквизит.

media_type

string
Тип вложения.

Только для чтения.
Контекст: vieweditembed
Один из: imagefile
В контексте приведенного ниже кода не использую, генерируется системой автоматически.

mime_type

string
MIME тип вложения.

Только для чтения.
Контекст: vieweditembed
В контексте приведенного ниже кода не использую, генерируется системой автоматически.

media_details

object
Подробные сведения о медиафайле, относящиеся к его типу.

Только для чтения.
Контекст: vieweditembed
В контексте приведенного ниже кода не использую, генерируется системой автоматически.

post

integer
ID связанной записи вложения.

Контекст: viewedit
В контексте приведенного ниже кода не использую, генерируется системой автоматически.

source_url

string,
uri
URL-адрес исходного файла вложения.

Только для чтения.
Контекст: vieweditembed
В контексте приведенного ниже кода не использую, генерируется системой автоматически.

missing_image_sizes

array
Список отсутствующих размеров изображений вложения.

Только для чтения.
Контекст: edit
В контексте приведенного ниже кода не использую, генерируется системой автоматически.

 

Список медиа.

Запрос по этой конечной точке, чтобы получить коллекцию медиа. Полученный ответ можно контролировать и фильтровать с помощью приведенных ниже параметров URL-запроса.

GET /wp/v2/media

В контексте нижеописанного кода 1С выглядит так:
СПИСОК /wp/v2/media
Про Аргументы маршрута можно почитать по ссылке выше. Без аргументов выдает список из десяти элементов. Мной не использовались за ненадобность.

 

Просмотр элемента медиа.

Запрос по этой конечной точке, чтобы получить конкретную запись элемента мультимедиа.

GET /wp/v2/media/<id>

В контексте нижеописанного кода 1С выглядит так:
Получить /wp/v2/media/<id>
id 
- обязательный аргумент.

 

Удалить элемент медиа.

Аргументы.

id Уникальный идентификатор объекта.
force Нужно ли помещать в "Корзину" или принудительно удалять его. Принимаемые значения "Истина" или "Ложь".

 

DELETE /wp/v2/media/<id>

В контексте нижеописанного кода 1С выглядит так:
Удалить /wp/v2/media/<id>
id 
- обязательный аргумент.

 

Обновить элемент медиа.

Аналогичен созданию элемента медиа, описание ниже по тексту.

POST /wp/v2/media/<id>

В контексте нижеописанного кода 1С выглядит так:
Обновить /wp/v2/media/<id>
id 
- обязательный аргумент.

 

Создать элемент медиа.

Аргументы.

date Дата публикации объекта в часовом поясе сайта.
В контексте приведенного ниже кода не использую, генерируется системой автоматически.
date_gmt Дата публикации объекта - GMT.
В контексте приведенного ниже кода не использую, генерируется системой автоматически.
slug Слаг, буквенно-цифровой идентификатор объекта, уникальный для его типа.

В коде использую, лучше создавать самому, в латинице. Может генерироваться системой автоматически.

status Определенный статус объекта.

Один из вариантов: publishfuturedraftpendingprivate
В коде использую как publish, обязательный реквизит.

title Заголовок/название объекта.

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

author ID автора публикации объекта.

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

comment_status Устанавливает открыты или нет комментарии к объекту.

Один из: openclosed
В контексте приведенного ниже кода не использую, системой автоматически устанавливается closed

ping_status Устанавливает открыт или нет пинк к объекту.

Один из: openclosed
В контексте приведенного ниже кода не использую, системой автоматически устанавливается closed

meta Мета поля.

В контексте приведенного ниже кода не использую. 

template Файл темы, используемый для отображения объекта.

В контексте приведенного ниже кода не использую. 

alt_text Альтернативный текст для отображения, если вложение не отображается.

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

caption Подпись к вложению.

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

description Описание.

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

post ID связанной записи вложения.

В контексте приведенного ниже кода не использую.

 

Как используется.

POST /wp/v2/media
В контексте нижеописанного кода 1С выглядит так:
СОЗДАТЬ /wp/v2/media [Список аргументов]

Наверное это самый важный момент, поэтому рассмотрим его максимально подробно.

Публикация медиа-картинки из 1С на сайт WordPress.

Для этого использую внешнюю обработку на обычных формах. Код на управляемых формах не будет отличаться от приведенного здесь, чуть-чуть сложнее, но думаю для вас не составит труд адаптировать. Мне, честно говоря, было лень.

Исходные данные.

Аргументы запроса

Что означают первые 4 пункта, можно прочитать здесь.

  1. Token.
  2. Server
  3. Маршрут
  4. КонечнаяТочка
  5. _Заголовок - title в WordPress
  6. ИмяФайла - полный путь картинки на диске, например: C:\Foto\media.jpg
  7. Описание - description в WordPress
  8. альт_текст - alt_text в WordPress
  9. м_описание - caption в WordPress
  10. РасширениеФото - mime_type в WordPress, расширение файла 
  11. Слаг - slug в WordPress, временное имя файла, если всё хорошо, становится именем.

Аргументы с 5 по 11 должны присутствовать в реквизитах элемента справочника (иной сущности) 1С. Можно иные данные, как вам будет удобнее.

Важное замечание: с самого начала, делал реквизиты на английском, как в WordPress. Однако в последствии столкнулся с тем, что многие "аглицкие" названия зарезервированы самой 1С, про этот момент забыл. Поэтому пришлось делать структуру перевода с "Русского" на "Английский" и обратно.

 
 Образец структуры

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

Если лениво создавать свои структуры, возьмите из обработки, скачать можно отсюда.

Конечные точки

 "Список"    -> "GET"
 "Получить" -> "GET"
 "Создать"   -> "POST"
 "Обновить" -> "POST"
 "Удалить"   -> "DELETE"

Маршрут

Медиа.

Рис.1. Внешний вид.

Процедуры и функции в модуле формы.

 
 Локальный массив обязательных реквизитов медиа

Думаю, комментарии излишни, разберем позже.

 
 Процедура ПослатьЗапросНаСайтМедиаНажатие

В этой процедуре подготавливаем структуру, для последующей публикации из модуля объекта.

Для получения списка нам никакие аргументы не нужны.

Рис.2. Запрос списка картинок

Для того, чтобы "Получить" или "Удалить" нам обязательно нужен id. Чтобы удалить на сайте без сохранения в "корзину" надо добавить ещё один аргумент: СтруктураПараметров.Вставить("force","true")

Для "обновить" на нужны те же данные, что и для "создать", плюс id.

 
 Функция ДобавитьДанныеМедиаВСтруктуру

Добавляем данные в структуру согласно массива обязательных реквизитов медиа.

Отправляем данные в модуль объекта для публикации, в зависимости от запроса обрабатываем ответ (парсим данные), сохраняем полученные от сайта данные.

Процедуры и функции модуля объекта.

Код публикации медиа/картинок немного отличается от остальных. Подробности в спойлере.

 
 Функция _рс_публикация_ПодсистемаWordPressМедиа

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

Чудеса магии с преобразованием в тело/боди запроса.

 
 Функция __ПодсистемаWordPressМедиа_СоздатьТело_Изображения__

Экспериментировал с кодом по посылке двоичных данных довольно долго, в результате пришел к этому. Объем (размер в КБ или МБ) в принципе не имеет значения. Чем больше объем, тем больше время передачи на сайт.

В "Функция _рс_подготовка_ПолучитьЗапросHTTP" (описание здесь), с помощью "Запрос.УстановитьТелоИзДвоичныхДанных(ТелоЗапроса)" устанавливаем двоичные данные в боди запроса и посылаем на сайт.

Рис.3. Создать на сайте

 

Небольшая видео-демонстрация:

 

Заключение.

Как видим опубликовать, картинку на сайте не составляет большого труда.

Если вам нужна обработка, скачать можно отсюда.

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

Плюсуем, не стесняемся, делимся, комментируем.

Особенно ПЛЮСУЕМ, это есть очень большой мотиватор для меня. Если вы не поставили "+" предыдущей публикации, прошу сюда.

Продолжение следует. В следующей публикации начнем работу с магазином WooCommerce, с категорий товаров.

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

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

Версия WordPress: 5.4.1
PHP Версия : 7.3.15
Платформа: 1С:Предприятие 8.3 (8.3.13.1644).
Минимально необходимый релиз платформы: 8.3.6.

WordPress WooCommerce RestAPI Интеграция сайтом Rest API обмен данными

См. также

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 2.3. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку. Поддерживает работу от разных юридических лиц. Работа: в составе РИБ, отдельно от РИБ, тонкий, толстый клиент, web-клиент (через интернет-браузер).

22440 руб.

19.12.2023    5126    38    11    

35

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    17792    19    22    

17

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    19878    13    17    

17

СБП. Оплата по QR-коду Сайты и интернет-магазины Программист Платформа 1С v8.3 Конфигурации 1cv8 Автомобили, автосервисы Россия Бухгалтерский учет Управленческий учет Платные (руб)

В настоящее время система СБП очень часто стала использоваться в повседневной жизни. Одна из систем интеграции СБП через СБЕР. Данная конфигурация является инструментом интеграции СБП в Альфа Авто. Данная система не просто формирует статический QR, а динамический, а значит, в системе будет привязка и на покупателя, и на документ.

7200 руб.

25.10.2022    6310    33    4    

11

Сайты и интернет-магазины Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Управленческий учет Платные (руб)

Программа позволяет одним кликом настроить сбор цен ваших конкурентов или дилеров в интернете. Автоматически собирает данные результата поиска Яндекса (вам не придется вручную добавлять каждый сайт, за которым нужно следить). Обновление цен происходит по заданному вами расписанию автоматически. Можете легко отслеживать позиции вашего сайта в Яндексе по ключевым словам и фразам. Этот инструмент даст вам лучшее понимание того, как ваша SEO-стратегия влияет на видимость вашего сайта в поисковой выдаче, и поможет вам улучшить контент и структуру сайта для повышения его позиций. Функция доступна во всех тарифах.

19950 руб.

23.09.2019    31029    7    12    

30
Оставьте свое сообщение