- Подготовка производственной площадки к маркировке
- Сроки внедрения маркировки для производителей: что нужно знать малым, средним и крупным?
- Оборудование для маркировки: какое нужно и что пригодится из того, что у вас уже есть?
- Состав кода маркировки молочной продукции
ЭДО-Лайт Честный Знак (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
Исключение
Сообщить(Ответ.ПолучитьТелоКакСтроку());
Возврат Неопределено
КонецПопытки;