Имя: Пароль:
1C
1С v8
Некорректно работает POST запрос
0 IVT_2009
 
27.02.20
09:13
Есть такой фрагмент кода , который отправляет POST запрос в маркировку табака

ид = "000";
    КлючСессии         = параметрыСеанса.мрТекущийТокенПодписи;
    //_сервер         = параметрыСеанса.мрТекущийКонтурМаркировки;
    _Сервер         = "int01.gismt.crpt.tech";
    строкаЗапроса     = "/api/v3/true-api/cises/list";
    соеденение         = Новый HTTPСоединение(_сервер, , , , , , Новый ЗащищенноеСоединениеOpenSSL);
    запрос             = Новый HTTPЗапрос(строкаЗапроса);
    запрос.АдресРесурса = строкаЗапроса;            
    //запрос.Заголовки.Вставить("Accept", "application/json");
    запрос.Заголовки.Вставить("Authorization", СтрШаблон("Bearer %1", параметрыСеанса.мрТекущийТокенПодписи));
    запрос.Заголовки.Вставить("Content-Length", стрДлина("?values=" + ид));
    запрос.Заголовки.Вставить("Content-Type", "application/json;charset=UTF-8");
    Запрос.УстановитьТелоИзСтроки("?values=" + ид);
    
    Попытка
        
        файлОтвет     = ПолучитьИмяВременногоФайла("json");
        ответ         = соеденение.ОтправитьДляОбработки(Запрос, файлОтвет);
        //ответ         = соеденение.Получить(запрос, файлОтвет);
        
    Исключение
        
        Сообщить(ОписаниеОшибки());
        Возврат "";
        
    КонецПопытки;

    возврат файлОтвет;


по документации должен быть такой запрос:

POST https://int01.gismt.crpt.tech/api/v3/true-api/cises/list?values=000000462106549OOv1s0XzlzIFDjtcXJjz5cB&values=00000046210654QuHCUeP&values=(01)00000046210654(21)oFTjHaM
Accept: application/json
Authorization: Bearer <ТОКЕН>

я его делаю и получаю ошибку 400

//2.2. Код 400 При отсутствии обязательного параметра:
{
"error_message": "Отсутствует обязательный параметр: values"
}

что я делаю не так?
1 НЕА123
 
27.02.20
09:25
может так
ид = """000""";
2 IVT_2009
 
27.02.20
09:30
(1) не прокатило : {"error_message":"Отсутствует обязательный параметр: values"}

такое ощущение , что он не понимает что ему в теле передали
3 IVT_2009
 
27.02.20
09:46
up
4 palsergeich
 
27.02.20
10:14
Запрос.УстановитьТелоИзСтроки("?values=" + ид);
Вот это не так. Тело это не адресная строка
5 IVT_2009
 
27.02.20
10:16
Вопрос тогда немного другой:
Есть строка запроса: https://int01.gismt.crpt.tech/api/v3/true-api/cises/list?values=000000462106549OOv1s0XzlzIFDjtcXJjz5cB

ресурс запроса это: строкаЗапроса = "/api/v3/true-api/cises/list"
или : строкаЗапроса = "/api/v3/true-api/cises/list?"
или : строкаЗапроса = "/api/v3/true-api/cises/list?values"

что будет правильной строкой для подстановки в

запрос             = Новый HTTPЗапрос(строкаЗапроса);
6 palsergeich
 
27.02.20
10:18
api/v3/true-api/cises/list?values=000000462106549OOv1s0XzlzIFDjtcXJjz5cB - вот это будет строкой запроса
7 IVT_2009
 
27.02.20
10:20
(6) запрос POST не GET , что тогда телом будет ?
8 palsergeich
 
27.02.20
10:22
(7) Пустое тело в POST допускается.
9 IVT_2009
 
27.02.20
10:24
Сделал , пишет Отсутствует обязательный параметр: values
10 palsergeich
 
27.02.20
10:35
Открывай описание api
И смотри что должно быть в теле
11 IVT_2009
 
27.02.20
11:01
В описании вот это: https://yadi.sk/i/r4v2bjBrMNn0hg
Вопрос еще в том , что на их стороне может что то не так работать, но это маловероятно.
Это какой то POST запрос , но как GET
12 palsergeich
 
27.02.20
11:30
запрос.Заголовки.Вставить("Content-Length", стрДлина("?values=" + ид)); - не надо Это ошибка. 1с сама этот заголовок вставляет.
13 IVT_2009
 
27.02.20
13:29
После двух дней танцев с бубном он заработал, вот текст функции:

&наСервере
функция запросУпаковокПоИд4(ид) ЭКСПОРТ
    
    КлючСессии         = параметрыСеанса.мрТекущийТокенПодписи;
    _Сервер         = "int01.gismt.crpt.tech";
    ПараметрыЗапроса = Новый Массив;
    ПараметрыЗапроса.Добавить(СтрШаблон("values=%1",ид));
    строкаЗапроса = СтрШаблон("/api/v3/true-api/cises/list?%1",СтрСоединить(ПараметрыЗапроса, "&"));
    
    соеденение         = Новый HTTPСоединение(_сервер, , , , , , Новый ЗащищенноеСоединениеOpenSSL);
    запрос             = Новый HTTPЗапрос(строкаЗапроса);
    запрос.Заголовки.Вставить("Content-Type",   "application/json; charset=utf-8");    
    запрос.Заголовки.Вставить("Accept-Charset", "utf-8");

    
    Попытка
        
        файлОтвет     = ПолучитьИмяВременногоФайла("json");
        ответ         = соеденение.ОтправитьДляОбработки(Запрос, файлОтвет);
        //ответ         = соеденение.Получить(запрос, файлОтвет);
        
    Исключение
        
        Сообщить(ОписаниеОшибки());
        Возврат "";
        
    КонецПопытки;

    возврат файлОтвет;

        
конецФункции //запросУпаковокПоИд4
14 palsergeich
 
27.02.20
16:30
(13) Гратц, чо
Ошибка? Это не ошибка, это системная функция.