1С8.3 получение заказов из WordPress и Woocommerce

Пример получения последних заказов в коде 1С из Woocommerce через REST-API. Для доступа без логина и пароля используется сгенерированный плагином Advanced Access Manager JWT-токен.

Соединение = Новый HTTPСоединение("domain",80);
	
ЗаголовкиЗапроса = Новый Соответствие;
ЗаголовкиЗапроса.Вставить("Content-Type", "application/json;charset=utf-8");
// Добавляем в заголовок запроса авторизацию, которая на стороне wordpress реализуется плагином Advanced Access Manager через созданный JWT-токен
ЗаголовкиЗапроса.Вставить("Authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI**********XQiOjEE08nOm8k");
	
// Получаем список заказов начиная с установленной даты 
Запрос = Новый HTTPЗапрос("/wp-json/wc/v2/orders?after=2021-08-08T00:00:00Z&page=1&orderby=id&order=asc", ЗаголовкиЗапроса);

Результат = Соединение.Получить(Запрос);
 
Сообщить("Нам вернули код: " + Результат.КодСостояния);
// Коды результата запроса:
// [100, 299] - Ок
// [300, 399] - Перенаправление (302 - код постоянного перенаправления)
// [400, 499] - Ошибка запроса
// [500, 599] - Ошибка сервера
 
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
	
Заказы = Неопределено;
СформироватьДерево(ЧтениеJSON, Заказы);
	
// Демонстрация содержимого заказов
Для Каждого Заказ из Заказы Цикл
    Сообщить("Заказ№:" + Заказ.Получить("number") + " создан:" + ПрочитатьДатуJSON(Заказ.Получить("date_created"), ФорматДатыJSON.ISO));
    billing = Заказ.Получить("billing");
    Сообщить(billing.Получить("first_name") + " " + billing.Получить("last_name") + " " + billing.Получить("email") + " " + billing.Получить("phone"));
    line_items = Заказ.Получить("line_items"); // Достаем строки заказа
    Для Каждого СтрокаЗаказа из line_items Цикл
        Сообщить(" * " + СтрокаЗаказа.Получить("sku") + СтрокаЗаказа.Получить("price") + СтрокаЗаказа.Получить("name"));
    КонецЦикла;			
КонецЦикла;

К сожалению формат отдаваемого json woocommerce представляет собой несколько уровней вложенных массивов и объектов, так что простым циклическим вызовом функции ЧтениеJSON.Прочитать() для заполнения данных заказа обойтись довольно сложно. В вышеприведенном коде разбором json и переводом в более удобную форму занимается процедура СформироватьДерево , ниже привожу ее код:

Процедура СформироватьДерево(ЧтениеJSON, Дерево)
    
    ИмяСвойства = Неопределено;
    
    Пока ЧтениеJSON.Прочитать() Цикл
        TипJSON = ЧтениеJSON.ТипТекущегоЗначения;
        
        Если TипJSON = ТипЗначенияJSON.НачалоОбъекта 
        ИЛИ TипJSON = ТипЗначенияJSON.НачалоМассива Тогда
            НовыйОбъект = ?(TипJSON = ТипЗначенияJSON.НачалоОбъекта, Новый Соответствие, Новый Массив);
            
            Если ТипЗнч(Дерево) = Тип("Массив") Тогда
                Дерево.Добавить(НовыйОбъект);
            ИначеЕсли ТипЗнч(Дерево) = Тип("Соответствие") И ЗначениеЗаполнено(ИмяСвойства) Тогда
                Дерево.Вставить(ИмяСвойства, НовыйОбъект);
            КонецЕсли;
            
            СформироватьДерево(ЧтениеJSON, НовыйОбъект);
            
            Если Дерево = Неопределено Тогда
                Дерево = НовыйОбъект;
            КонецЕсли;
        ИначеЕсли TипJSON = ТипЗначенияJSON.ИмяСвойства Тогда
            ИмяСвойства = ЧтениеJSON.ТекущееЗначение;
        ИначеЕсли TипJSON = ТипЗначенияJSON.Число 
        ИЛИ TипJSON = ТипЗначенияJSON.Строка 
        ИЛИ TипJSON = ТипЗначенияJSON.Булево 
        ИЛИ TипJSON = ТипЗначенияJSON.Null Тогда
            Если ТипЗнч(Дерево) = Тип("Массив") Тогда
                Дерево.Добавить(ЧтениеJSON.ТекущееЗначение);
            ИначеЕсли ТипЗнч(Дерево) = Тип("Соответствие") Тогда
                Дерево.Вставить(ИмяСвойства, ЧтениеJSON.ТекущееЗначение);
            КонецЕсли;
        Иначе
            Возврат;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры;

Также нужно помнить про разные форматы даты в JSON и 1С. Для преобразованию можно использовать функций:

Дата1С   = ПрочитатьДатуJSON(ДатаВФорматеJSON, ФорматДатыJSON.ISO);
ДатаJSON = ЗаписатьДатуJSON(ТекущаяДата(), ФорматДатыJSON.ISO);

Для понимая что именно приходит в 1С с сайта в виде JSON можно Результат.ПолучитьТелоКакСтроку() посмотреть в структурированном виде, например при помощи JSON-Editro-online

Запись опубликована в рубрике Программирование с метками , , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

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