Имя: Пароль:
1C
 
Отправить Get запрос на сайт с include
,
0 Виктория_62
 
naïve
05.09.24
14:32
Мне нужно отправить HTTP запрос на сайт и получить информацию по заказам (номер, заказчика, товары и тп и тд).
Я отправляю запрос с текстом запроса "selling/orders/index" и получаю информацию по заказам, условно, следующего вида:
"data": [
        {
            "id": "01964bac-de4f-7126-aj7f-87a8e22b75cb",
            "created_at": "2024-08-13 15:18:26",
            "updated_at": "2024-08-13 15:18:26",
            "company_id": "0193078c-85ed-72f2-9a2b-dge7d213deae",
            "number": 1,
            "source": "showcase",
            "source_id": "019107d6-8g6f-73e6-9939-4d72fdab4909",
            "external_id": null,
            "is_test": false,
            "status": "new",
            "status_description":,
            "description": "Тип доставки: Курьером в Рязань\nУлица: Чапаева\nДом: 1\nКвартира: 100\n\nКомментарий:\nвквпвкп",
            "notes": null,
            "customer_id": "01914bac-ddf1-73d8-ba5a-894a9ce7b67f",
            "customer": {
                "user_name": "Вася",
                "user_email": null,
                "user_phone": "+0000000000",
                "user_surname": "Петров",
                "user_patronymic": "Петрович"
            },

        }

Проблема в том, что здесь нет информации по товарам. В postman я могу написать тот же запрос selling/orders/index и указать, что мне нужно вернуть дополнительную информацию на вкладке raw следующим образом:
{
"include": ["goods_items.reserves", "goods_outlet_items", "payment", "receipts"]
}
И тогда я получаю полную информацию о заказах и товарах, но в postman.
Как я могу преобразовать текст запроса для HTTP запроса в 1с, чтобы он указывал на необходимость вернуть дополнительную информацию, подобно тому, как я это делаю в postman при помощи include? Или мне нужно менять не текст запроса, а его параметры?
1 Fram
 
04.09.24
15:02
Попробуйте в тело запроса добавить
2 craxx
 
04.09.24
15:27
(0) Вы реальные ФИО и телефоны не светили бы, персональные данные всё-таки.
3 Волшебник
 
04.09.24
16:44
(0) Вика, вы давно программист 1С?
4 Виктория_62
 
naïve
04.09.24
17:05
(3) год
(2) данные тестовые
5 Asmody
 
04.09.24
17:21
(0) [В postman я могу написать тот же запрос selling/orders/index и указать, что мне нужно]
- и как вы указываете это в postman?
6 eklmn
 
гуру
05.09.24
09:27
Сначала сделай хоть-что то в 1с и покажи что не работает
7 CepeLLlka
 
05.09.24
10:06
(0)В Постмане случаем не через POST это делаете?
8 Виктория_62
 
naïve
05.09.24
10:18
верно
9 Asmody
 
05.09.24
10:52
(8) А в теме почему тогда "GET"?
11 CepeLLlka
 
05.09.24
11:21
(8)Тогда наверное вам нужно показать нам код в котором не только данные которые вы отправляете, а и сам процесс отправки. То есть с HttpСоединением и HttpЗапросом
12 Смотрящий
 
05.09.24
11:37
(0) Покаж запрос в постман с raw
13 Виктория_62
 
naïve
05.09.24
12:12
(11)
Функция ФункцияПреобразования(Свойство, Значение, ДополнительныеПараметры) Экспорт
    Результат = Дата(1, 1, 1);
    Если ЗначениеЗаполнено(Значение) Тогда
        Значение = СтрЗаменить(Значение, "-", "");
        Значение = СтрЗаменить(Значение, "T", "");
        Значение = СтрЗаменить(Значение, ":", "");
        Значение = СтрЗаменить(Значение, " ", "");
        Значение = СтрЗаменить(Значение,Символы.НПП, "");
        Значение = Лев(Значение, 14);
        
        Результат = Дата(Значение);
    КонецЕсли;
    
    Возврат Результат;
КонецФункции

//////////////////////////////////////////////////////////////////////////////

Процедура ВыполнитьЗапрос()
    
    ПараметрыПодключения = Новый Структура;
    ПараметрыПодключения.Вставить("АдресСервера", "int.api.test.su");
    ПараметрыПодключения.Вставить("ApiKey",        "ыфвфрывыфолапыаынеаныаинеаыаываыавы");
    
    ТекстЗапроса = "selling/orders/index";
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type",     "application/json");
    Заголовки.Вставить("Token", ПараметрыПодключения.ApiKey);
    Заголовки.Вставить("Host", ПараметрыПодключения.АдресСервера);
    
    Соединение     = Новый HTTPСоединение(ПараметрыПодключения.АдресСервера, 443,,,,,ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение());
    Запрос         = Новый HTTPЗапрос(ТекстЗапроса, Заголовки);
    
    РезультатЗапроса     = Соединение.ОтправитьДляОбработки(Запрос);
    СтрокаОтвета         = РезультатЗапроса.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
    
    МассивСвойствДат = Новый Массив;
    МассивСвойствДат.Добавить("expires");
    МассивСвойствДат.Добавить("activated_at");
    МассивСвойствДат.Добавить("last_login");
    МассивСвойствДат.Добавить("created_at");
    МассивСвойствДат.Добавить("date");
    МассивСвойствДат.Добавить("updated_at");
    
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(СтрокаОтвета);
    ДанныеJSON = ПрочитатьJSON(ЧтениеJSON, Истина,,, "ФункцияПреобразования", НазваниеЭтогоМодуля,, МассивСвойствДат);
    ЧтениеJSON.Закрыть();
    
    Ответ = ДанныеJSON;
    Если НЕ Ответ.Количество() = 0 Тогда
        Data = Ответ.Получить("data");
        Для Каждого Элемент Из Data Цикл
            // Здесь имееется вышеописанная структура
            сообщить(элемент["number"]);
        КонецЦикла;
    КонецЕсли;
    
КонецПроцедуры

(12)
POST {{host}}/selling/orders/index
Под запросом перейти на вкладку Body, там ниже станет видна вкладка raw, где написано
{
"include": ["goods_items.reserves", "goods_outlet_items", "payment", "receipts"]
}
Могу только описать, картинку здесь не отправить
14 Смотрящий
 
05.09.24
12:23
(13) Интересует именно скриншот выполненного запроса в постман. Сделай, затри критичные данные и покаж - на сторонний ресурс картинку. Сюда ссылку на нее.
15 trad
 
05.09.24
12:26
Запрос.УстановитьТелоИзСтроки("{""include"": [""goods_items.reserves"", ""goods_outlet_items"", ""payment"", ""receipts""]}");
перед ОтправитьДляОбработки
16 Виктория_62
 
naïve
05.09.24
13:00
(15) (1)
Спасибо :3
Надо было добавить в тело запроса, долго искала -как. Мой вариант получился длиннее

МассивДопПолей = Новый Массив;
МассивДопПолей.Добавить("goods_outlet_items");
МассивДопПолей.Добавить("goods_items.reserves");
МассивДопПолей.Добавить("payment");
МассивДопПолей.Добавить("receipts");

СтруктураДопПолей = Новый Структура;
СтруктураДопПолей.Вставить("include", МассивДопПолей);

ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина);
НастройкиСериализации = Новый НастройкиСериализацииJSON;
НастройкиСериализации.ФорматСериализацииДаты = ФорматДатыJSON.ISO;
НастройкиСериализации.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.УниверсальнаяДата;
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
ЗаписатьJSON(ЗаписьJSON, СтруктураДопПолей, НастройкиСериализации);

ТелоЗапроса = ЗаписьJSON.Закрыть();

Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);
17 trad
 
05.09.24
14:40
(16) >>Мой вариант получился длиннее
И это правильно - через сериализацию структуры. Я только обозначил метод
18 Повелитель
 
05.09.24
15:43
(0) (16) Годная тема.
Вот только на днях понадобилось получать информацию по заказам с одного маркетплейса, так как раз через POST запрос и JSON с параметрами.

Я на форуме помощи попросил, ответили, но только в сторону что изучить.
Я пока ещё не реализовал, время не было. А тут и код рабочий подъехал. Спасибо, мне как раз подходит ))
19 CepeLLlka
 
05.09.24
15:56
(18)Правильный ник - залог успеха!
20 trad
 
05.09.24
20:17
(18) А ты точно читать умеешь?
Я тебе ровно такой же ответ дал в твоей ветке)
21 Fram
 
05.09.24
23:27
(18) С таким то опытом можно было и самому
22 Повелитель
 
06.09.24
07:28
(20) Ну так, а я что написал? Ответ в своём посте получил, открыл ЗаписьJSON ознакомился, но время реализовать не было, так как есть более приоритетные задачи.
Тут открываю данную тему, и вижу как раз готовый код по своей задаче. Что не так то?
Тебе спасибо за ответ. Я же больше в своей ветке ничего не спрашивал, значит всё понял.

(21) Вектор направления для изучения мне дали, не было времени решать данную задачу ещё. Самостоятельно новые задачи можно часами решать. Лучше совета у товарищей спросить. Иногда достаточно узнать в каком направление изучать.
Независимо от того, куда вы едете — это в гору и против ветра!