- Подготовка производственной площадки к маркировке
- Сроки внедрения маркировки для производителей: что нужно знать малым, средним и крупным?
- Оборудование для маркировки: какое нужно и что пригодится из того, что у вас уже есть?
- Состав кода маркировки молочной продукции
ЭДО-Лайт Честный Знак (Content is not allowed in prolog.)
Доброго времени суток :)
Никак не могу решить проблему с ошибками при отправке УПД в ЭДО-Лайт честного знака с помощью 1С 8.3 УПП.
Вообщем проблема такова что при отправке исправного файла через веб-интерфейс - все ок. При попытке чтения и отправки этого же самого файла через их метод API - "3.1. Метод загрузки файла информации продавца УПД согласно приказу 820 от 19.12.2018 № ММВ-7-15/820@ в формате XML" - отдает ошибку либо Content is not allowed in prolog. , либо Header length exceeded maximum header size of 4096 (если убрать переносы строк между "Content-Type: application/xml" и текстом base64 документа). Использую кодировку windows-1251 и в файле, и при чтении, и при передаче. Пытался перекодировать строку передачи в ANSI - не помогло. Использовал разные разновидности кода заполнения тела запроса - не помогло. Если сталкивались с такой проблемой, подскажите пжлст :)
Текущий код отправки (Подсмотрел отсюда - Тык)
Соединение = Новый HTTPСоединение("edo-gismt.crpt.ru",443,,,,,Новый ЗащищенноеСоединениеOpenSSL); HTTPЗапрос = Новый HTTPЗапрос("/api/v1/outgoing-documents"); ВремГраница = "---------------------------" + СтрЗаменить(Новый УникальныйИдентификатор, "-", ""); HTTPЗапрос.Заголовки.Вставить("Authorization", "Bearer " + Токен); HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+ВремГраница); Файл = Новый ТекстовыйДокумент; Файл.Прочитать(ПутьФайла); //СтрокаBase64 = ЗашифроватьBase64(Файл.ПолучитьТекст(),"windows-1251"); СтрокаBase64 = ЗашифроватьBase64(ПерекодироватьСтроку(Файл.ПолучитьТекст(),КодировкаТекста.ANSI),КодировкаТекста.ANSI); СертификатДляОбмена = "9B82A4A04376F1FD4C6923858EAF96DA4CEB98C5"; //Отпечаток сертификата ПодписанныйТекст = ПодписатьТекст(СтрокаBase64,СертификатДляОбмена,Истина); ПС = Символы.ВК+Символы.ПС; Тело = ""; Тело = Тело + "--"+ВремГраница+ПС; Тело = Тело + "Content-Disposition: form-data; name=""content""; filename="""+ИмяФайла+".xml"""+ПС; Тело = Тело + "Content-Type: application/xml"+ПС+ПС; Тело = Тело + СтрокаBase64 +ПС; Тело = Тело + "--"+ВремГраница+"--"+ПС; HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзСтроки(Тело,КодировкаТекста.ANSI)); Ответ = Соединение.ОтправитьДляОбработки(HTTPЗапрос); ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); Попытка ID = ПрочитатьJSON(ЧтениеJSON).id; Возврат ID Исключение Сообщить(Ответ.ПолучитьТелоКакСтроку()); Возврат Неопределено КонецПопытки;
З.Ы. Временно убрал "Content-Disposition: form-data; name=""signature""" - с ним потом разберусь
Старый код:
Соединение = Новый HTTPСоединение("edo-gismt.crpt.ru",443,,,,,Новый ЗащищенноеСоединениеOpenSSL); HTTPЗапрос = Новый HTTPЗапрос("/api/v1/outgoing-documents"); ВремГраница = СтрЗаменить(Новый УникальныйИдентификатор, "-", ""); HTTPЗапрос.Заголовки.Вставить("Authorization", "Bearer " + Токен); HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+ВремГраница); Файл = Новый ТекстовыйДокумент; Файл.Прочитать(ПутьФайла); СтрокаBase64 = ЗашифроватьBase64(Файл.ПолучитьТекст(),"windows-1251"); ТелоЗапроса = Новый ТекстовыйДокумент(); ТелоЗапроса.РазделительСтрок = Символы.ВК + Символы.ПС; ТелоЗапроса.ДобавитьСтроку("--" + ВремГраница); ТелоЗапроса.ДобавитьСтроку("Content-Disposition: form-data; name=""content""; filename="""+ИмяФайла+".xml"""); ТелоЗапроса.ДобавитьСтроку("Content-Type: text/xml"+ПС); ТелоЗапроса.ДобавитьСтроку(СтрокаBase64); ТелоЗапроса.ДобавитьСтроку("--" + ВремГраница); ТелоЗапроса.ДобавитьСтроку("Content-Disposition: form-data; name=""signature"";"+ПС); ТелоЗапроса.ДобавитьСтроку(ПодписанныйТекст); ТелоЗапроса.ДобавитьСтроку("--" + ВремГраница + "--"+ПС); ТелоЗапросаСтрока = ТелоЗапроса.ПолучитьТекст(); HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапросаСтрока, "windows-1251", ИспользованиеByteOrderMark.НеИспользовать); Ответ = Соединение.ОтправитьДляОбработки(HTTPЗапрос); ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); Попытка ID = ПрочитатьJSON(ЧтениеJSON).id; Возврат ID Исключение Сообщить(Ответ.ПолучитьТелоКакСтроку()); Возврат Неопределено КонецПопытки;