Столкнулся с проблемой, нужно из данных сформировать структуру JSON и отправить во ФГИС
УТКО:
Что нужно прописать, чтобы данные отправились и пришел ответ? Либо подробно пошагово объяснить что мне нужно сделать, чтобы решить задачу. Заранее всех благодарю
Получив ключ доступа, можно воспользоваться сервисом для передачи ФГИС
УТКО:
curl -X 'POST' \
'https://api.reo.ru/reo-weight-control-api/api/v1/weight-controls/import' \
-H 'accept: */*' \
-H 'Content-Ty+
После обработки данных ФГИС УТКО возвращает ответ внешней системе. Список
кодов с ответами при взаимодействии описан
200 - Запрос успешно обработан
403 - Ограничение в доступе. Некорректный ключ доступа
422 - Ошибка валидации
УТКО:
Что нужно прописать, чтобы данные отправились и пришел ответ? Либо подробно пошагово объяснить что мне нужно сделать, чтобы решить задачу. Заранее всех благодарю
Получив ключ доступа, можно воспользоваться сервисом для передачи ФГИС
УТКО:
curl -X 'POST' \
'https://api.reo.ru/reo-weight-control-api/api/v1/weight-controls/import' \
-H 'accept: */*' \
-H 'Content-Ty+
После обработки данных ФГИС УТКО возвращает ответ внешней системе. Список
кодов с ответами при взаимодействии описан
200 - Запрос успешно обработан
403 - Ограничение в доступе. Некорректный ключ доступа
422 - Ошибка валидации
По теме из базы знаний
- Отправка данных на сайт post - запросом в формате JSON
- Отправка данных в формате JSON и проверка ответов от сервера
- Конструктор API для обмена базы 1С 8.3 с другими системами по протоколу http в формате JSON
- Создание мобильного приложения на базе платформы 1С для использования на терминале сбора данных (Часть 1)
- HTTP в сочетании с JSON - краткое описание или организация обмена данными мобильного приложения (плюсы и недостатки)
Найденные решения
(41) День добрый.
Использовал варианты формирования JSON, предложенные в данной теме.
Из 3 штук два заработали, один не пошел, подозреваю что проблема с символами ВК и ПС в теле JSON получалась.
Вот код, делал для конфигурации ВесыСофт Весовой терминал, допилите под себя
Использовал варианты формирования JSON, предложенные в данной теме.
Из 3 штук два заработали, один не пошел, подозреваю что проблема с символами ВК и ПС в теле JSON получалась.
Вот код, делал для конфигурации ВесыСофт Весовой терминал, допилите под себя
Процедура СформироватьИОтправить()
ТЗ2 = ТабВзвешиваний.Выгрузить();
// Создать структуру с данными. коды ниже для нашего полигона получены на портале
Данные = Новый Структура;
Данные.Вставить("objectId", "ВАШ ID");
Данные.Вставить("accessKey", "ВАШ Key");
// Добавить элемент структуры МассивВесы типа Массив.
МассивВесы = Новый Массив;
МассивОтправленныхДокументов = Новый Массив; // Для отметки на форме что отправлено и посл записи в доп реквизит документа Взвешивание
Для Каждого СтрокаТЗ из ТЗ2 Цикл
Если СтрокаТЗ.Отметка и НЕ СтрокаТЗ.ДокументОтправлен И (СтрокаТЗ.ДатаВремя >= ДатаНачалаЭксплуатации) Тогда
ДанныеВН = Новый Структура;
ДанныеВН.Вставить("id",Строка(СтрокаТЗ.ДокСсылка.УникальныйИдентификатор()));
ДанныеВН.Вставить("dateBefore", ПолучитьДатуВремя(СтрокаТЗ.ДатаВремя)); // преобразовать датувремя , так • 2024-04-17 11:23:12
ДанныеВН.Вставить("dateAfter", Неопределено);
ДанныеВН.Вставить("registrationNumber", СокрЛП(СтрокаТЗ.НомерТС)); // убрать пробелы внутри - необязательно. СтрЗаменить(СокрЛП(СтрокаТЗ.НомерТС)," ","");
ДанныеВН.Вставить("garbageTruckType", Неопределено);
ДанныеВН.Вставить("garbageTruckBrand", СокрЛП(СтрокаТЗ.МаркаТС));
ДанныеВН.Вставить("garbageTruckModel", Неопределено);
ДанныеВН.Вставить("companyName", Неопределено);
ДанныеВН.Вставить( "companyInn", Неопределено);
ДанныеВН.Вставить("companyKpp", Неопределено);
ДанныеВН.Вставить("weightBefore", СокрЛП(Формат(СтрокаТЗ.ВесБрутто, "ЧГ=0"))); // уберем разделители разрядов
ДанныеВН.Вставить( "weightAfter", СокрЛП(Формат(СтрокаТЗ.ВесТара, "ЧГ=0")));
ДанныеВН.Вставить( "weightDriver", Неопределено);
ДанныеВН.Вставить("coefficient", "1");
ДанныеВН.Вставить("garbageWeight", СокрЛП(Формат(СтрокаТЗ.ВесНетто, "ЧГ=0")));
ДанныеВН.Вставить("garbageType", Неопределено);
ДанныеВН.Вставить("codeFKKO", Неопределено);
ДанныеВН.Вставить("nameFKKO", Неопределено);
МассивВесы.Добавить(ДанныеВН);
МассивОтправленныхДокументов.Добавить(СтрокаТЗ.ДокСсылка);
КонецЕсли;
КонецЦикла;
Если МассивВесы.Количество() = 0 Тогда
Сообщить("Нет данных для отправки");
Возврат;
КонецЕсли;
Данные.Вставить("weightControls", МассивВесы);
// Создать объект записи и открыть файл, в который будет выполняться запись.
Запись = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
//Запись.ОткрытьФайл("D:\Test.json",,, ПараметрыЗаписиJSON); // а без записи файла будем, работает
// Выполнить запись данных (Данные) с помощью объекта записи (Запись).
Запись.УстановитьСтроку(ПараметрыЗаписиJSON); // <Параметры> (необязательный) Тип: ПараметрыЗаписиJSON.
ЗаписатьJSON(Запись, Данные);
// Завершить работу с файлом.
СтрокаJSON = Запись.Закрыть();
ДД = ПолучитьДвоичныеДанныеИзСтроки(СтрокаJSON);
//
//Сообщить("Тест режим, отправка отключена");
// //Тест
//ЗаписатьСведенияОбОтправке(МассивОтправленныхДокументов);
//ПроставитьСведенияОбОтправкеВТЗНаФорме(МассивОтправленныхДокументов,ТЗ2);
//Возврат;
//ДД = Новый ДвоичныеДанные("D:\Test.json");
//curl -X 'POST' \
// 'https://api.reo.ru/reo-weight-control-api/api/v1/weight-controls/import' \
// -H 'accept: */*' \
// -H 'Content-Type: multipart/form-data' \
// -F 'file='
//Где file - файл с данными весового контроля, см. Таблица 1.
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;//();//(
// // тут чтото не то с телом получается {"":["Failed to read the request form. Line length limit 100 exceeded."]}
// {"":["Failed to read the request form. Invalid header line: \t\t{"]}
//
//Соединение = Новый HTTPСоединение("api.reo.ru", , , , , , ЗащищенноеСоединение);
//Запрос = Новый HTTPЗапрос("/reo-weight-control-api/api/v1/weight-controls/import");
//IDBoundary = "----"+СтрЗаменить(Новый УникальныйИдентификатор, "-", "");
//Запрос.Заголовки.Вставить("accept", "*/*"); //"application/json");//
//Запрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + IDBoundary);//boundary=" + IDBoundary);//boundary="+ IDBoundary);//----WebKitFormBoundary" + IDBoundary);//"multipart/form-data");
// Запрос.УстановитьТелоИзСтроки(
// "--" + IDBoundary + "
// |Content-Disposition: form-data; name=""file""; filename=""Test.json""
// |
// |" + СтрокаJSON + "
// |
// |--" + IDBoundary+ "--
// |");// + "--");
//
//
////Запрос.УстановитьИмяФайлаТела("D:\Test.json");
//тЗапр = Запрос.ПолучитьТелоКакСтроку();
//
////Запрос.УстановитьТелоИзСтроки(СтрокаJSON); //УстановитьТелоИзСтроки("mData="+СтрокаJS,"windows-1251",ИспользованиеByteOrderMark.НеИспользовать);
////Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
//Ответ = Соединение.ОтправитьДляОбработки(Запрос);
//ОтветСервера = Ответ.ПолучитьТелоКакСтроку();
//
////Сообщить(""+Ответ);
//Если Ответ.КодСостояния = 200 Тогда
// Сообщить("Зебест, все ништяк!")
//Иначе
// Сообщить("Все плохо, код ошбки : "+ОтветСервера);
//КонецЕсли
//******************************
//Это тоже Работает!
////ТипMime = "application/json";
//////// Должно работать, починил
//Граница = "----"+СтрЗаменить(Новый УникальныйИдентификатор, "-", "");
//
//Поток1 = Новый ПотокВПамяти;
////Запись = Новый ЗаписьДанных(Поток, "UTF-8", , Символы.ВК + Символы.ПС);
//Запись = Новый ЗаписьДанных(Поток1, "UTF-8", , Символы.ВК + Символы.ПС,"");
//Запись.ЗаписатьСтроку("--"+Граница);
//Запись.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""Test.json""");
////Запись.ЗаписатьСтроку(СтрШаблон("Content-Type: %1", ТипMime)); //необязательно
//Запись.ЗаписатьСтроку("");
//Запись.ЗаписатьСтроку(СтрокаJSON);
////Запись.Записать(ДД);
//Запись.ЗаписатьСтроку(""); // если писали ДД, то пустая строка обязательно
//Запись.ЗаписатьСтроку("--"+Граница+"--" );
//Запись.ЗаписатьСтроку("");
//Запись.Закрыть();
//
////ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
//Соединение = Новый HTTPСоединение("api.reo.ru", , , , , ,ЗащищенноеСоединение);
//Запрос = Новый HTTPЗапрос("reo-weight-control-api/api/v1/weight-controls/import");
//
//Запрос.Заголовки.Вставить("accept", "*/*");
//Запрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+ Граница);
//
//ТелоЗапроса = Поток1.ЗакрытьИПолучитьДвоичныеДанные();
//
//Запрос.УстановитьТелоИзДвоичныхДанных(ТелоЗапроса);
//
//тЗапр = Запрос.ПолучитьТелоКакСтроку();
//
//Ответ = Соединение.ОтправитьДляОбработки(Запрос);
//ОтветСервера = Ответ.ПолучитьТелоКакСтроку();
//********************
// Работает !
Разделитель = "----"+СтрЗаменить(Строка(Новый УникальныйИдентификатор),"-","");
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Разделитель);
Заголовки.Вставить("accept", "*/*");
Попытка
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
Соединение = Новый HTTPСоединение("api.reo.ru", , , , , ,ЗащищенноеСоединение);
Запрос = Новый HTTPЗапрос("reo-weight-control-api/api/v1/weight-controls/import",Заголовки);
Тело = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(Тело, , , Символы.ВК + Символы.ПС, "");
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""Test.json""");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.Записать(ДД);
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель+"--");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.Закрыть();
ДанныеТела = Тело.ЗакрытьИПолучитьДвоичныеДанные();
Запрос.УстановитьТелоИзДвоичныхДанных(ДанныеТела);
//тЗапр = Запрос.ПолучитьТелоКакСтроку();
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
ОтветСервера = Ответ.ПолучитьТелоКакСтроку();
Исключение
Сообщить("Ошибка отправки");
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Если Ответ.КодСостояния = 200 Тогда
Сообщить("Зебест, все ништяк!");
ЗаписатьСведенияОбОтправке(МассивОтправленныхДокументов);
// и еще таб на форме желательно перерисовать
ПроставитьСведенияОбОтправкеВТЗНаФорме(МассивОтправленныхДокументов,ТЗ2);
Иначе
Сообщить("Все плохо, ошибка: "+ ОтветСервера);
КонецЕсли
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
С = Новый ХТТПСоединение(сервер, порт, юзер, пассворд, таймаут, новый ЗащищенноеСоединениеССЛ());
З = Новый ХТТПЗапрос(Урл);
З.УстановитьТелоИзСтроки(ДжиСон);
Ответ = С.ОтправитьДляОбработки(З);
Если Ответ.КодОтвета = 200 Тогда
Сообщить("Зебест, все ништяк!")
Иначе
Сообщить("Все плохо, код ошбки в ответе");
КонецЕслей
// бла-бла-ба
Показать
(2) Наверно я не правильно описал проблему.
Получив ключ доступа, можно воспользоваться сервисом для передачи ФГИС
УТКО:
curl -X 'POST' \
'https://api.reo.ru/reo-weight-control-api/api/v1/weight-controls/import' \
-H 'accept: */*' \
-H 'Content-Type: multipart/form-data' \
-F 'file='
Где file - файл с данными весового контроля.
Вот такой пример я составил по структуре JSON.
// Создать структуру с данными.
Данные = Новый Структура;
Данные.Вставить("objectId", "ce0dec40-5f72-447c-9d5e-abe4bebffdaa");
Данные.Вставить("accessKey", "c876210a-ccec-454d-8b1d-6d5064a8d109");
// Добавить элемент структуры МассивВесы типа Массив.
МассивВесы = Новый Массив;
ДанныеВН = Новый Структура;
ДанныеВН.Вставить("id","c944a08b-61c8-4d33-a0f4-61b235ae9bb9");
ДанныеВН.Вставить("dateBefore", "2022-01-28 08:11:31.897387");
ДанныеВН.Вставить("dateAfter", "2022-01-28 08:41:31.897387");
ДанныеВН.Вставить("registrationNumber", "к332пп777");
ДанныеВН.Вставить("garbageTruckType", "Самосвал");
ДанныеВН.Вставить("garbageTruckBrand", "ГАЗ");
ДанныеВН.Вставить("garbageTruckModel", "КО-440-2");
ДанныеВН.Вставить("companyName", "ООО СПЕКТР");
ДанныеВН.Вставить( "companyInn", "0275905660");
ДанныеВН.Вставить("companyKpp", "862201001");
ДанныеВН.Вставить("weightBefore", "23120");
ДанныеВН.Вставить( "weightAfter", "13850");
ДанныеВН.Вставить( "weightDriver", "80");
ДанныеВН.Вставить("coefficient", "1");
ДанныеВН.Вставить("garbageWeight", "9190");
ДанныеВН.Вставить("garbageType", "Производственный мусор");
ДанныеВН.Вставить("codeFKKO", "2 21 000 00 00 0");
ДанныеВН.Вставить("nameFKKO", "Отходы добычи и обогащения железных руд");
МассивВесы.Добавить(ДанныеВН);
Данные.Вставить("weightControls", МассивВесы);
// Создать объект записи и открыть файл, в который будет выполняться запись.
Запись = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
Запись.ОткрытьФайл("C:\Users\dkukushkin\Desktop\Тест Json\Test.json",,, ПараметрыЗаписиJSON);
// Выполнить запись данных (Данные) с помощью объекта записи (Запись).
ЗаписатьJSON(Запись, Данные);
// Завершить работу с файлом.
Запись.Закрыть();
Теперь мне нужно отправить данные и получить ответ. Прошу помочь и описать шаги работы. Спасибо заранее
Получив ключ доступа, можно воспользоваться сервисом для передачи ФГИС
УТКО:
curl -X 'POST' \
'https://api.reo.ru/reo-weight-control-api/api/v1/weight-controls/import' \
-H 'accept: */*' \
-H 'Content-Type: multipart/form-data' \
-F 'file='
Где file - файл с данными весового контроля.
Вот такой пример я составил по структуре JSON.
// Создать структуру с данными.
Данные = Новый Структура;
Данные.Вставить("objectId", "ce0dec40-5f72-447c-9d5e-abe4bebffdaa");
Данные.Вставить("accessKey", "c876210a-ccec-454d-8b1d-6d5064a8d109");
// Добавить элемент структуры МассивВесы типа Массив.
МассивВесы = Новый Массив;
ДанныеВН = Новый Структура;
ДанныеВН.Вставить("id","c944a08b-61c8-4d33-a0f4-61b235ae9bb9");
ДанныеВН.Вставить("dateBefore", "2022-01-28 08:11:31.897387");
ДанныеВН.Вставить("dateAfter", "2022-01-28 08:41:31.897387");
ДанныеВН.Вставить("registrationNumber", "к332пп777");
ДанныеВН.Вставить("garbageTruckType", "Самосвал");
ДанныеВН.Вставить("garbageTruckBrand", "ГАЗ");
ДанныеВН.Вставить("garbageTruckModel", "КО-440-2");
ДанныеВН.Вставить("companyName", "ООО СПЕКТР");
ДанныеВН.Вставить( "companyInn", "0275905660");
ДанныеВН.Вставить("companyKpp", "862201001");
ДанныеВН.Вставить("weightBefore", "23120");
ДанныеВН.Вставить( "weightAfter", "13850");
ДанныеВН.Вставить( "weightDriver", "80");
ДанныеВН.Вставить("coefficient", "1");
ДанныеВН.Вставить("garbageWeight", "9190");
ДанныеВН.Вставить("garbageType", "Производственный мусор");
ДанныеВН.Вставить("codeFKKO", "2 21 000 00 00 0");
ДанныеВН.Вставить("nameFKKO", "Отходы добычи и обогащения железных руд");
МассивВесы.Добавить(ДанныеВН);
Данные.Вставить("weightControls", МассивВесы);
// Создать объект записи и открыть файл, в который будет выполняться запись.
Запись = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
Запись.ОткрытьФайл("C:\Users\dkukushkin\Desktop\Тест Json\Test.json",,, ПараметрыЗаписиJSON);
// Выполнить запись данных (Данные) с помощью объекта записи (Запись).
ЗаписатьJSON(Запись, Данные);
// Завершить работу с файлом.
Запись.Закрыть();
Теперь мне нужно отправить данные и получить ответ. Прошу помочь и описать шаги работы. Спасибо заранее
Прикрепленные файлы:
Инструкция_для_подключения_интеграции_по_весовому_контролю.pdf
(3) Запрос такой
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение("api.reo.ru", , , , , , ЗащищенноеСоединение);
Запрос = Новый HTTPЗапрос("reo-weight-control-api/api/v1/weight-controls/import");
Запрос.Заголовки.Вставить("accept", "*/*");
Запрос.Заголовки.Вставить("Content-Type", "multipart/form-data");
Запрос.УстановитьИмяФайлаТела("D:\Test.json");
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение("api.reo.ru", , , , , , ЗащищенноеСоединение);
Запрос = Новый HTTPЗапрос("reo-weight-control-api/api/v1/weight-controls/import");
Запрос.Заголовки.Вставить("accept", "*/*");
Запрос.Заголовки.Вставить("Content-Type", "multipart/form-data");
Запрос.УстановитьИмяФайлаТела("D:\Test.json");
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Доброго времени суток, коллеги.
Делаю так, приходит код ответа 301
Соединение = Новый HTTPСоединение("api.reo.ru");
Запрос = Новый HTTPЗапрос("https://api.reo.ru/reo-weight-control-api/api/v1/weight-controls/import");
Запрос.Заголовки.Вставить("accept", "*/*");
Запрос.Заголовки.Вставить("Content-Type", "multipart/form-data");
Запрос.УстановитьИмяФайлаТела("D:\Test.json");
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Подскажите, если решили
Делаю так, приходит код ответа 301
Соединение = Новый HTTPСоединение("api.reo.ru");
Запрос = Новый HTTPЗапрос("https://api.reo.ru/reo-weight-control-api/api/v1/weight-controls/import");
Запрос.Заголовки.Вставить("accept", "*/*");
Запрос.Заголовки.Вставить("Content-Type", "multipart/form-data");
Запрос.УстановитьИмяФайлаТела("D:\Test.json");
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Подскажите, если решили
(6)
On the World Wide Web, HTTP 301 is the HTTP response status code for 301 Moved Permanently. It is used for permanent redirecting, meaning that links or records returning this response should be updated. The new URL should be provided in the Location field, included with the response. The 301 redirect is considered a best practice for upgrading users from HTTP to HTTPS.
RFC 2616[1] states that:
* If a client has link-editing capabilities, it should update all references to the Request URL.
* The response is cacheable unless indicated otherwise.
* Unless the request method was HEAD, the entity should contain a small hypertext note with a hyperlink to the new URL(s).
* If the 301 status code is received in response to a request of any type other than GET or HEAD, the client must ask the user before redirecting.
Подскажите, если решили
Конечно! Вот фрагмент из документации, который описывает этот случай:
On the World Wide Web, HTTP 301 is the HTTP response status code for 301 Moved Permanently. It is used for permanent redirecting, meaning that links or records returning this response should be updated. The new URL should be provided in the Location field, included with the response. The 301 redirect is considered a best practice for upgrading users from HTTP to HTTPS.
RFC 2616[1] states that:
* If a client has link-editing capabilities, it should update all references to the Request URL.
* The response is cacheable unless indicated otherwise.
* Unless the request method was HEAD, the entity should contain a small hypertext note with a hyperlink to the new URL(s).
* If the 301 status code is received in response to a request of any type other than GET or HEAD, the client must ask the user before redirecting.
Вероятно что-то с SSL
Если так, то ошибка 422 (ошибка валидации)
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(
Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто),
Новый СертификатыУдостоверяющихЦентровWindows());
Соединение = Новый HTTPСоединение("api.reo.ru", , , , , , ЗащищенноеСоединение);
Запрос = Новый HTTPЗапрос("reo-weight-control-api/api/v1/weight-controls/import");
Запрос.Заголовки.Вставить("accept", "*/*");
Запрос.Заголовки.Вставить("Content-Type", "multipart/form-data");
Запрос.УстановитьИмяФайлаТела("D:\Test.json");
Если так, то ошибка 422 (ошибка валидации)
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(
Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто),
Новый СертификатыУдостоверяющихЦентровWindows());
Соединение = Новый HTTPСоединение("api.reo.ru", , , , , , ЗащищенноеСоединение);
Запрос = Новый HTTPЗапрос("reo-weight-control-api/api/v1/weight-controls/import");
Запрос.Заголовки.Вставить("accept", "*/*");
Запрос.Заголовки.Вставить("Content-Type", "multipart/form-data");
Запрос.УстановитьИмяФайлаТела("D:\Test.json");
(12) От балды вероятно - вообще не изучал тему, но если без ЗащищенноеСоединение , то 301 получаю, а с ЗащищенноеСоединение уже хоть что-то
В мануале написано нужно так:
curl -X 'POST' \
'https://api.reo.ru/reo-weight-control-api/api/v1/weight-controls/import' \
-H 'accept: */*' \
-H 'Content-Type: multipart/form-data' \
-F 'file='
Где file - файл с данными весового контроля, см. Таблица 1
В мануале написано нужно так:
curl -X 'POST' \
'https://api.reo.ru/reo-weight-control-api/api/v1/weight-controls/import' \
-H 'accept: */*' \
-H 'Content-Type: multipart/form-data' \
-F 'file='
Где file - файл с данными весового контроля, см. Таблица 1
(13)
Если я правильно помню, что означает курловое -F ''file=', то должно быть примерно так:
В мануале написано
Если я правильно помню, что означает курловое -F ''file=', то должно быть примерно так:
СодержимоеJSON = "...";
ИмяПараметра = "file";
ТипMime = "application/json";
Граница = СтрЗаменить(Новый УникальныйИдентификатор, "-", "");
Поток = Новый ПотокВПамяти;
Запись = Новый ЗаписьДанных(Поток, "UTF-8", , Символы.ВК + Символы.ПС);
Запись.ЗаписатьСтроку(СтрШаблон("--%1", Граница);
Запись.ЗаписатьСтроку(СтрШаблон("Content-Disposition: form-data; name=""%1""", ИмяПараметра);
Запись.ЗаписатьСтроку(СтрШаблон("Content-Type: %1", ТипMime);
Запись.ЗаписатьСтроку("");
Запись.ЗаписатьСтроку(СодержимоеJSON);
Запись.ЗаписатьСтроку(СтрШаблон("--%1--", Граница);
Запись.ЗаписатьСтроку("");
Запись.Закрыть();
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
Соединение = Новый HTTPСоединение("api.reo.ru", , , , , ,ЗащищенноеСоединение);
Запрос = Новый HTTPЗапрос("reo-weight-control-api/api/v1/weight-controls/import");
Запрос.Заголовки.Вставить("accept", "*/*");
Запрос.Заголовки.Вставить("Content-Type", СтрШаблон("multipart/form-data; boundary=%1", Граница));
ТелоЗапроса = Поток.ЗакрытьИПолучитьДвоичныеДанные();
Запрос.УстановитьТелоИзДвоичныхДанных(ТелоЗапроса);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Показать
(16)
Соединение = Новый HTTPСоединение("www.service.xxx", , , , , Таймаут, Новый ЗащищенноеСоединениеOpenSSL(), Ложь);
Заголовки = Новый Соответствие;
Заголовки["accept"] = "application/json";
Заголовки["Content-Type"] = "multipart/form-data; boundary=----WebKitFormBoundary" + IDBoundary;
Запрос = Новый HTTPЗапрос("/api/v1/blabla", Заголовки);
data = ПолучитьЧертовJSON();
Запрос.УстановитьТелоИзСтроки(
"------WebKitFormBoundary" + IDBoundary + "
|Content-Disposition: form-data; name=""data""
|
|" + data + "
|------WebKitFormBoundary" + IDBoundary + "--");
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Показать
(19)
Ответ сервера
{"":["Failed to read the request form. Missing content-type boundary."]}
Поправил в запросе WebKitFormBoundary60b7addaa04b4f8d9609577e58f8c807 - пробел сделал
Так, уже ближе - Ответ {"file":["The file field is required."]}
В теле запроса такое
------WebKitFormBoundary60b7addaa04b4f8d9609577e58f8c807
Content-Disposition: form-data; name="data"
{"objectId":"0f62b963-a***","accessKey":"***-a7d9-47961cd636ef","weightControls":[{"id":"058a901f-099c-4411-9971-b60022247fec","dateBefore":"2022-01-28 10:08:16.497247+03:00","dateAfter":"2022-01-28 10:52:31.897387+03:00","registrationNumber":"о145нн33","garbageTruckType":"Самосвал","garbageTruckBrand":"ГАЗ","garbageTruckModel":"КО-440-2","companyName":"ООО СПЕКТР","companyInn":"0275905660","companyKpp":"862201001","weightBefore":"24580","weightAfter":"10242","weightDriver":"95","coefficient":"1","garbageWeight":"14243","garbageType":"Производственный мусор","codeFKKO":"2 21 000 00 00 0","nameFKKO":"Отходы добычи и обогащения железных руд"}]}
------WebKitFormBoundary60b7addaa04b4f8d9609577e58f8c807--
Ответ сервера
{"":["Failed to read the request form. Missing content-type boundary."]}
Поправил в запросе WebKitFormBoundary60b7addaa04b4f8d9609577e58f8c807 - пробел сделал
Так, уже ближе - Ответ {"file":["The file field is required."]}
В теле запроса такое
------WebKitFormBoundary60b7addaa04b4f8d9609577e58f8c807
Content-Disposition: form-data; name="data"
{"objectId":"0f62b963-a***","accessKey":"***-a7d9-47961cd636ef","weightControls":[{"id":"058a901f-099c-4411-9971-b60022247fec","dateBefore":"2022-01-28 10:08:16.497247+03:00","dateAfter":"2022-01-28 10:52:31.897387+03:00","registrationNumber":"о145нн33","garbageTruckType":"Самосвал","garbageTruckBrand":"ГАЗ","garbageTruckModel":"КО-440-2","companyName":"ООО СПЕКТР","companyInn":"0275905660","companyKpp":"862201001","weightBefore":"24580","weightAfter":"10242","weightDriver":"95","coefficient":"1","garbageWeight":"14243","garbageType":"Производственный мусор","codeFKKO":"2 21 000 00 00 0","nameFKKO":"Отходы добычи и обогащения железных руд"}]}
------WebKitFormBoundary60b7addaa04b4f8d9609577e58f8c807--
(26) Если все попытки сюда копипастить, простыня большая будет )
------WebKitFormBoundary 11f33499f0b1443f92b747b8f891ec2d
Content-Disposition: form-data; name="file"
{"objectId":"****9d-f0b9872141a8","accessKey":"*****4d72-a7d9-47961cd636ef","weightControls":[{"id":"058a901f-099c-4411-9971-b60022247fec","dateBefore":"2022-01-28 10:08:16.497247+03:00","dateAfter":"2022-01-28 10:52:31.897387+03:00","registrationNumber":"о145нн33","garbageTruckType":"Самосвал","garbageTruckBrand":"ГАЗ","garbageTruckModel":"КО-440-2","companyName":"ООО СПЕКТР","companyInn":"0275905660","companyKpp":"862201001","weightBefore":"24580","weightAfter":"10242","weightDriver":"95","coefficient":"1","garbageWeight":"14243","garbageType":"Производственный мусор","codeFKKO":"2 21 000 00 00 0","nameFKKO":"Отходы добычи и обогащения железных руд"}]}
------WebKitFormBoundary 11f33499f0b1443f92b747b8f891ec2d
------WebKitFormBoundary 11f33499f0b1443f92b747b8f891ec2d
Content-Disposition: form-data; name="file"
{"objectId":"****9d-f0b9872141a8","accessKey":"*****4d72-a7d9-47961cd636ef","weightControls":[{"id":"058a901f-099c-4411-9971-b60022247fec","dateBefore":"2022-01-28 10:08:16.497247+03:00","dateAfter":"2022-01-28 10:52:31.897387+03:00","registrationNumber":"о145нн33","garbageTruckType":"Самосвал","garbageTruckBrand":"ГАЗ","garbageTruckModel":"КО-440-2","companyName":"ООО СПЕКТР","companyInn":"0275905660","companyKpp":"862201001","weightBefore":"24580","weightAfter":"10242","weightDriver":"95","coefficient":"1","garbageWeight":"14243","garbageType":"Производственный мусор","codeFKKO":"2 21 000 00 00 0","nameFKKO":"Отходы добычи и обогащения железных руд"}]}
------WebKitFormBoundary 11f33499f0b1443f92b747b8f891ec2d
(28) Если после -----WebKitFormBoundary пробел, то ошибка {"file":["The file field is required."]}
Если без пробела то {"":["Failed to read the request form. Unexpected end of Stream, the content may have already been read by another component. "]}
Вот тут ниже вариант, полученный с двоичных данных файла - (24)
{"":["Failed to read the request form. Invalid header line: \r"]}
Если без пробела то {"":["Failed to read the request form. Unexpected end of Stream, the content may have already been read by another component. "]}
Вот тут ниже вариант, полученный с двоичных данных файла - (24)
{"":["Failed to read the request form. Invalid header line: \r"]}
(41) День добрый.
Использовал варианты формирования JSON, предложенные в данной теме.
Из 3 штук два заработали, один не пошел, подозреваю что проблема с символами ВК и ПС в теле JSON получалась.
Вот код, делал для конфигурации ВесыСофт Весовой терминал, допилите под себя
Использовал варианты формирования JSON, предложенные в данной теме.
Из 3 штук два заработали, один не пошел, подозреваю что проблема с символами ВК и ПС в теле JSON получалась.
Вот код, делал для конфигурации ВесыСофт Весовой терминал, допилите под себя
Процедура СформироватьИОтправить()
ТЗ2 = ТабВзвешиваний.Выгрузить();
// Создать структуру с данными. коды ниже для нашего полигона получены на портале
Данные = Новый Структура;
Данные.Вставить("objectId", "ВАШ ID");
Данные.Вставить("accessKey", "ВАШ Key");
// Добавить элемент структуры МассивВесы типа Массив.
МассивВесы = Новый Массив;
МассивОтправленныхДокументов = Новый Массив; // Для отметки на форме что отправлено и посл записи в доп реквизит документа Взвешивание
Для Каждого СтрокаТЗ из ТЗ2 Цикл
Если СтрокаТЗ.Отметка и НЕ СтрокаТЗ.ДокументОтправлен И (СтрокаТЗ.ДатаВремя >= ДатаНачалаЭксплуатации) Тогда
ДанныеВН = Новый Структура;
ДанныеВН.Вставить("id",Строка(СтрокаТЗ.ДокСсылка.УникальныйИдентификатор()));
ДанныеВН.Вставить("dateBefore", ПолучитьДатуВремя(СтрокаТЗ.ДатаВремя)); // преобразовать датувремя , так • 2024-04-17 11:23:12
ДанныеВН.Вставить("dateAfter", Неопределено);
ДанныеВН.Вставить("registrationNumber", СокрЛП(СтрокаТЗ.НомерТС)); // убрать пробелы внутри - необязательно. СтрЗаменить(СокрЛП(СтрокаТЗ.НомерТС)," ","");
ДанныеВН.Вставить("garbageTruckType", Неопределено);
ДанныеВН.Вставить("garbageTruckBrand", СокрЛП(СтрокаТЗ.МаркаТС));
ДанныеВН.Вставить("garbageTruckModel", Неопределено);
ДанныеВН.Вставить("companyName", Неопределено);
ДанныеВН.Вставить( "companyInn", Неопределено);
ДанныеВН.Вставить("companyKpp", Неопределено);
ДанныеВН.Вставить("weightBefore", СокрЛП(Формат(СтрокаТЗ.ВесБрутто, "ЧГ=0"))); // уберем разделители разрядов
ДанныеВН.Вставить( "weightAfter", СокрЛП(Формат(СтрокаТЗ.ВесТара, "ЧГ=0")));
ДанныеВН.Вставить( "weightDriver", Неопределено);
ДанныеВН.Вставить("coefficient", "1");
ДанныеВН.Вставить("garbageWeight", СокрЛП(Формат(СтрокаТЗ.ВесНетто, "ЧГ=0")));
ДанныеВН.Вставить("garbageType", Неопределено);
ДанныеВН.Вставить("codeFKKO", Неопределено);
ДанныеВН.Вставить("nameFKKO", Неопределено);
МассивВесы.Добавить(ДанныеВН);
МассивОтправленныхДокументов.Добавить(СтрокаТЗ.ДокСсылка);
КонецЕсли;
КонецЦикла;
Если МассивВесы.Количество() = 0 Тогда
Сообщить("Нет данных для отправки");
Возврат;
КонецЕсли;
Данные.Вставить("weightControls", МассивВесы);
// Создать объект записи и открыть файл, в который будет выполняться запись.
Запись = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
//Запись.ОткрытьФайл("D:\Test.json",,, ПараметрыЗаписиJSON); // а без записи файла будем, работает
// Выполнить запись данных (Данные) с помощью объекта записи (Запись).
Запись.УстановитьСтроку(ПараметрыЗаписиJSON); // <Параметры> (необязательный) Тип: ПараметрыЗаписиJSON.
ЗаписатьJSON(Запись, Данные);
// Завершить работу с файлом.
СтрокаJSON = Запись.Закрыть();
ДД = ПолучитьДвоичныеДанныеИзСтроки(СтрокаJSON);
//
//Сообщить("Тест режим, отправка отключена");
// //Тест
//ЗаписатьСведенияОбОтправке(МассивОтправленныхДокументов);
//ПроставитьСведенияОбОтправкеВТЗНаФорме(МассивОтправленныхДокументов,ТЗ2);
//Возврат;
//ДД = Новый ДвоичныеДанные("D:\Test.json");
//curl -X 'POST' \
// 'https://api.reo.ru/reo-weight-control-api/api/v1/weight-controls/import' \
// -H 'accept: */*' \
// -H 'Content-Type: multipart/form-data' \
// -F 'file='
//Где file - файл с данными весового контроля, см. Таблица 1.
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;//();//(
// // тут чтото не то с телом получается {"":["Failed to read the request form. Line length limit 100 exceeded."]}
// {"":["Failed to read the request form. Invalid header line: \t\t{"]}
//
//Соединение = Новый HTTPСоединение("api.reo.ru", , , , , , ЗащищенноеСоединение);
//Запрос = Новый HTTPЗапрос("/reo-weight-control-api/api/v1/weight-controls/import");
//IDBoundary = "----"+СтрЗаменить(Новый УникальныйИдентификатор, "-", "");
//Запрос.Заголовки.Вставить("accept", "*/*"); //"application/json");//
//Запрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + IDBoundary);//boundary=" + IDBoundary);//boundary="+ IDBoundary);//----WebKitFormBoundary" + IDBoundary);//"multipart/form-data");
// Запрос.УстановитьТелоИзСтроки(
// "--" + IDBoundary + "
// |Content-Disposition: form-data; name=""file""; filename=""Test.json""
// |
// |" + СтрокаJSON + "
// |
// |--" + IDBoundary+ "--
// |");// + "--");
//
//
////Запрос.УстановитьИмяФайлаТела("D:\Test.json");
//тЗапр = Запрос.ПолучитьТелоКакСтроку();
//
////Запрос.УстановитьТелоИзСтроки(СтрокаJSON); //УстановитьТелоИзСтроки("mData="+СтрокаJS,"windows-1251",ИспользованиеByteOrderMark.НеИспользовать);
////Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
//Ответ = Соединение.ОтправитьДляОбработки(Запрос);
//ОтветСервера = Ответ.ПолучитьТелоКакСтроку();
//
////Сообщить(""+Ответ);
//Если Ответ.КодСостояния = 200 Тогда
// Сообщить("Зебест, все ништяк!")
//Иначе
// Сообщить("Все плохо, код ошбки : "+ОтветСервера);
//КонецЕсли
//******************************
//Это тоже Работает!
////ТипMime = "application/json";
//////// Должно работать, починил
//Граница = "----"+СтрЗаменить(Новый УникальныйИдентификатор, "-", "");
//
//Поток1 = Новый ПотокВПамяти;
////Запись = Новый ЗаписьДанных(Поток, "UTF-8", , Символы.ВК + Символы.ПС);
//Запись = Новый ЗаписьДанных(Поток1, "UTF-8", , Символы.ВК + Символы.ПС,"");
//Запись.ЗаписатьСтроку("--"+Граница);
//Запись.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""Test.json""");
////Запись.ЗаписатьСтроку(СтрШаблон("Content-Type: %1", ТипMime)); //необязательно
//Запись.ЗаписатьСтроку("");
//Запись.ЗаписатьСтроку(СтрокаJSON);
////Запись.Записать(ДД);
//Запись.ЗаписатьСтроку(""); // если писали ДД, то пустая строка обязательно
//Запись.ЗаписатьСтроку("--"+Граница+"--" );
//Запись.ЗаписатьСтроку("");
//Запись.Закрыть();
//
////ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
//Соединение = Новый HTTPСоединение("api.reo.ru", , , , , ,ЗащищенноеСоединение);
//Запрос = Новый HTTPЗапрос("reo-weight-control-api/api/v1/weight-controls/import");
//
//Запрос.Заголовки.Вставить("accept", "*/*");
//Запрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+ Граница);
//
//ТелоЗапроса = Поток1.ЗакрытьИПолучитьДвоичныеДанные();
//
//Запрос.УстановитьТелоИзДвоичныхДанных(ТелоЗапроса);
//
//тЗапр = Запрос.ПолучитьТелоКакСтроку();
//
//Ответ = Соединение.ОтправитьДляОбработки(Запрос);
//ОтветСервера = Ответ.ПолучитьТелоКакСтроку();
//********************
// Работает !
Разделитель = "----"+СтрЗаменить(Строка(Новый УникальныйИдентификатор),"-","");
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Разделитель);
Заголовки.Вставить("accept", "*/*");
Попытка
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
Соединение = Новый HTTPСоединение("api.reo.ru", , , , , ,ЗащищенноеСоединение);
Запрос = Новый HTTPЗапрос("reo-weight-control-api/api/v1/weight-controls/import",Заголовки);
Тело = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(Тело, , , Символы.ВК + Символы.ПС, "");
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""Test.json""");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.Записать(ДД);
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель+"--");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.Закрыть();
ДанныеТела = Тело.ЗакрытьИПолучитьДвоичныеДанные();
Запрос.УстановитьТелоИзДвоичныхДанных(ДанныеТела);
//тЗапр = Запрос.ПолучитьТелоКакСтроку();
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
ОтветСервера = Ответ.ПолучитьТелоКакСтроку();
Исключение
Сообщить("Ошибка отправки");
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Если Ответ.КодСостояния = 200 Тогда
Сообщить("Зебест, все ништяк!");
ЗаписатьСведенияОбОтправке(МассивОтправленныхДокументов);
// и еще таб на форме желательно перерисовать
ПроставитьСведенияОбОтправкеВТЗНаФорме(МассивОтправленныхДокументов,ТЗ2);
Иначе
Сообщить("Все плохо, ошибка: "+ ОтветСервера);
КонецЕсли
КонецПроцедуры
Показать
(14) Ответ сервера {"":["Failed to read the request form. Invalid header line: \r"]}
Тело запроса такое
--69a8718dfa1b46bab90f2aac8ecb515f
Content-Disposition: form-data; name="file"
Content-Type: application/json
{"objectId":"******9d-f0b9872141a8","accessKey":"*******7d9-47961cd636ef","weightControls":[{"id":"058a901f-099c-4411-9971-b60022247fec","dateBefore":"2022-01-28 10:08:16.497247+03:00","dateAfter":"2022-01-28 10:52:31.897387+03:00","registrationNumber":"о145нн33","garbageTruckType":"Самосвал","garbageTruckBrand":"ГАЗ","garbageTruckModel":"КО-440-2","companyName":"ООО СПЕКТР","companyInn":"0275905660","companyKpp":"862201001","weightBefore":"24580","weightAfter":"10242","weightDriver":"95","coefficient":"1","garbageWeight":"14243","garbageType":"Производственный мусор","codeFKKO":"2 21 000 00 00 0","nameFKKO":"Отходы добычи и обогащения железных руд"}]}
--69a8718dfa1b46bab90f2aac8ecb515f--
Тело запроса такое
--69a8718dfa1b46bab90f2aac8ecb515f
Content-Disposition: form-data; name="file"
Content-Type: application/json
{"objectId":"******9d-f0b9872141a8","accessKey":"*******7d9-47961cd636ef","weightControls":[{"id":"058a901f-099c-4411-9971-b60022247fec","dateBefore":"2022-01-28 10:08:16.497247+03:00","dateAfter":"2022-01-28 10:52:31.897387+03:00","registrationNumber":"о145нн33","garbageTruckType":"Самосвал","garbageTruckBrand":"ГАЗ","garbageTruckModel":"КО-440-2","companyName":"ООО СПЕКТР","companyInn":"0275905660","companyKpp":"862201001","weightBefore":"24580","weightAfter":"10242","weightDriver":"95","coefficient":"1","garbageWeight":"14243","garbageType":"Производственный мусор","codeFKKO":"2 21 000 00 00 0","nameFKKO":"Отходы добычи и обогащения железных руд"}]}
--69a8718dfa1b46bab90f2aac8ecb515f--
(24) (27) Рабочий пример передачи присоединенного файла из двоичных данных в другой сервис.
Но смысл понятен:
Запись пустой строки нужна, удалять их не надо.
Но смысл понятен:
ДД = ПолучитьИзВременногоХранилища(Данныефайла.СсылкаНаДвоичныеДанныеФайла);
Разделитель = "----"+СтрЗаменить(Строка(Новый УникальныйИдентификатор),"-","");
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Разделитель);
Запрос = Новый HTTPЗапрос(СтруктураАдреса.ПутьНаСервере,Заголовки);
Тело = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(Тело, , , Символы.ВК + Символы.ПС, "");
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename="""+СокрЛП(Данныефайла.ИмяФайла)+"""");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.Записать(ДД);
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель+"--");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.Закрыть();
ДанныеТела = Тело.ЗакрытьИПолучитьДвоичныеДанные();
Запрос.УстановитьТелоИзДвоичныхДанных(ДанныеТела);
ПоказатьЗапись пустой строки нужна, удалять их не надо.
(30) Вероятно мы близки к чему-то. Ответ сервера - пустая строка, КодСостояния 415
Хотя пишут в тырнете HTTP 415 Unsupported Media Type
Тело запроса такое (если см Запрос.ПолучитьТелоКакСтроку())
-----2d4d698c6bf54f14b78abaa69efddb22
Content-Disposition: form-data; name="file"; filename="D:\Test.json"
{
"objectId": "****47c-9d5e-abe4bebffdaa",
"accessKey": *****c-454d-8b1d-6d5064a8d109",
"weightControls": [
{
"id": "058a901f-099c-4411-9971-b60022247fec",
"dateBefore": "2022-01-28 10:08:16.497247+03:00",
"dateAfter": "2022-01-28 10:52:31.897387+03:00",
"registrationNumber": "о145нн33",
"garbageTruckType": "Самосвал",
"garbageTruckBrand": "ГАЗ",
"garbageTruckModel": "КО-440-2",
"companyName": "ООО СПЕКТР",
"companyInn": "0275905660",
"companyKpp": "862201001",
"weightBefore": "24580",
"weightAfter": "10242",
"weightDriver": "95",
"coefficient": "1",
"garbageWeight": "14243",
"garbageType": "Производственный мусор",
"codeFKKO": "2 21 000 00 00 0",
"nameFKKO": "Отходы добычи и обогащения железных руд"
}
]
}
------2d4d698c6bf54f14b78abaa69efddb22--
Хотя пишут в тырнете HTTP 415 Unsupported Media Type
Тело запроса такое (если см Запрос.ПолучитьТелоКакСтроку())
-----2d4d698c6bf54f14b78abaa69efddb22
Content-Disposition: form-data; name="file"; filename="D:\Test.json"
{
"objectId": "****47c-9d5e-abe4bebffdaa",
"accessKey": *****c-454d-8b1d-6d5064a8d109",
"weightControls": [
{
"id": "058a901f-099c-4411-9971-b60022247fec",
"dateBefore": "2022-01-28 10:08:16.497247+03:00",
"dateAfter": "2022-01-28 10:52:31.897387+03:00",
"registrationNumber": "о145нн33",
"garbageTruckType": "Самосвал",
"garbageTruckBrand": "ГАЗ",
"garbageTruckModel": "КО-440-2",
"companyName": "ООО СПЕКТР",
"companyInn": "0275905660",
"companyKpp": "862201001",
"weightBefore": "24580",
"weightAfter": "10242",
"weightDriver": "95",
"coefficient": "1",
"garbageWeight": "14243",
"garbageType": "Производственный мусор",
"codeFKKO": "2 21 000 00 00 0",
"nameFKKO": "Отходы добычи и обогащения железных руд"
}
]
}
------2d4d698c6bf54f14b78abaa69efddb22--
(37) Да, так и сделал. Не понимаю зачем вообще оно нужно.
Сейчас допилил без записи json временного файла на диск. Работает.
Сервис благополучно кушает с кодом 200, но на портале не появляются данные. Причем кушает и с отвесами за предыдущие даты, и 100/500 раз за сегодня отправил...
Звонил в ТП, жду ответ.
Сейчас допилил без записи json временного файла на диск. Работает.
Запись = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
Запись.УстановитьСтроку(); // <Параметры> (необязательный) Тип: ПараметрыЗаписиJSON.
ЗаписатьJSON(Запись, Данные);
// Завершить работу с файлом.
ДанныеJS = Запись.Закрыть();
ДД = ПолучитьДвоичныеДанныеИзСтроки(ДанныеJS )
Сервис благополучно кушает с кодом 200, но на портале не появляются данные. Причем кушает и с отвесами за предыдущие даты, и 100/500 раз за сегодня отправил...
Звонил в ТП, жду ответ.
(14) Проверил с поправками - код под api ФГИС УТКО тоже рабочий.
и еще поправочка
можно так
или можно так
Получаю код ответа 200, все норм.
Теперь непонятки когда данные должны появиться у них на портале, ТехПоддержка что-то там сложная
Запись = Новый ЗаписьДанных(Поток, "UTF-8", , Символы.ВК + Символы.ПС,""); // тут добавил параметр КонвертируемыйРазделительСтрок = ""
и еще поправочка
можно так
Запись.ЗаписатьСтроку(СодержимоеJSON); // где СодержимоеJSON = СтрокаJSON
или можно так
Запись.Записать(ДвоичныеДанныефайлаJSON);
Запись.ЗаписатьСтроку("");// если ДвоичныеДанные - обязательно добавляем пустую строку
Запись.ЗаписатьСтроку(СтрШаблон("--%1--", Граница);
Получаю код ответа 200, все норм.
Теперь непонятки когда данные должны появиться у них на портале, ТехПоддержка что-то там сложная
Добрый день.
Пытаюсь решить эту задачу.
Два дня убил на составление тела запроса. Проблема в том, что по умолчанию после каждой строки добавлялся символ /0D.
Решил таким образом:
При открытии в HEX редакторе всё соответствует стандарту. Но от сервера стал приходить ответ:
Failed to read the request form. Line length limit 100 exceeded
Что может быть??? Есть у кого то положительное решение средствами платформы???
Пытаюсь решить эту задачу.
Два дня убил на составление тела запроса. Проблема в том, что по умолчанию после каждой строки добавлялся символ /0D.
Решил таким образом:
Строка1 = "Content-Disposition: form-data; name="""+Настройки.ИмяПараметра+"""; filename="""+Настройки.ИмяФайла+""""+Символы.ПС;
Строка2 = "Content-Type: " + Настройки.ТипКонтента + Символы.ПС;
Строка3 = Символы.ПС;
Строка0=Строка1+Строка2+Строка3;
Данные0 = ПолучитьДвоичныеДанныеИзСтроки(Строка0,"UTF-8");
Поток = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(Поток,"UTF-8");
ЗаписьДанных.Записать(Данные0);
ЗаписьДанных.Записать(ПолучитьДвоичныеДанныеИзСтроки(ДанныеJSON + Символы.ПС));
ЗаписьДанных.Закрыть();
Данные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
ПоказатьПри открытии в HEX редакторе всё соответствует стандарту. Но от сервера стал приходить ответ:
Failed to read the request form. Line length limit 100 exceeded
Что может быть??? Есть у кого то положительное решение средствами платформы???
В общем с этим ФГИС УТКО все через одно место. Выгрузку написали. Будьте осторожны, техподдержка вводит в заблуждение!!!
Из за того, что у нас несколько полигонов и в процессе заполнения документов была путаница, часть документов ушла не на тот полигон. Техподдержка полдня уверяла, что все нормально и когда будет выгрузка на корректный ИД объекта, все встанет как надо. По факту оказалось, что мало того что ничего уже никуда не встанет как надо, так еще и любые операции удаления или правки для отвесов, загруженных через API невозможны (при загрузке шаблонами все можно править и удалять). В итоге часть информации оказалась искаженной во ФГИС. Ответ техподдержки - вы нас не правильно поняли. А на вопрос что нет тестового контура - ваши проблемы, надо было тестировать или на старых периодах, или на одном документе. Полный не профессионализм. Уверяли до этого полдня что все норм.
Всем удачи и добра
Из за того, что у нас несколько полигонов и в процессе заполнения документов была путаница, часть документов ушла не на тот полигон. Техподдержка полдня уверяла, что все нормально и когда будет выгрузка на корректный ИД объекта, все встанет как надо. По факту оказалось, что мало того что ничего уже никуда не встанет как надо, так еще и любые операции удаления или правки для отвесов, загруженных через API невозможны (при загрузке шаблонами все можно править и удалять). В итоге часть информации оказалась искаженной во ФГИС. Ответ техподдержки - вы нас не правильно поняли. А на вопрос что нет тестового контура - ваши проблемы, надо было тестировать или на старых периодах, или на одном документе. Полный не профессионализм. Уверяли до этого полдня что все норм.
Всем удачи и добра
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот