Интеграция 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-клиент (через интернет-браузер).

20400 руб.

19.12.2023    3246    21    8    

21

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

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

36000 руб.

03.08.2020    16864    15    19    

15

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

Расширение для 1С Управление торговлей, реализует: а) Загрузку номенклатуры с сайта с нужными параметрами. б) Позволяет быстро обновлять цены и остатки из 1С в Веб сайт на Битрикс, на лету. (онлайн). в) Моментально прогружать заказы и создавать реализации.

30000 руб.

29.03.2024    839    1    1    

1

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

В обработке реализован механизм интеграции между системой поставщика на базе конфигураций 1с(управление торговлей 11) и Личным кабинетом Hoff. Реализован обмен остатками. Обработка реализована и тестировалась для УТ 11.4 Система позволяет выгружать из базы 1с поставщика хофф остатки товаров и другие данные в систему Hoff Преимущества: оперативное и регулярное обновление информации на сайте, уходит двойная работа по вводу остатков в разных системах (1С и личном кабинете HOFF), что чревато возникновением большого количества ошибок в управленческом учете. А также сократятся трудозатраты и повысится прибыль предприятия от продаж. Целевая аудитория: отделы маркетинга, продаж и склад, управленцы из сферы крупного, среднего бизнеса и мелкие предприниматели, владельцы ИП.

29880 руб.

16.11.2022    6612    1    5    

2

Сайты и интернет-магазины Программист Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Платные (руб)

Данный модуль предоставляет возможность выгружать заказы из 1С: Управление торговлей 11 версии в "MEASOFT" (ранее "Курьерская служба 2008").

9600 руб.

27.04.2022    11060    19    3    

9

SALE! 20%

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

Внешняя обработка адаптирована для УТ 11, предназначена для наполнения вашей базы данных товарами и сопутствующей информацией, предоставляемой b2b.4tochki.ru, обновления остатков и цен.

8160 руб.

31.01.2020    30995    13    7    

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