Делаю HTTP запрос в СМЭВ, у меня полностью сформированная xml строка, я ее вставляю в Soup в SendRequest и получаю нормальный ответ сервиса, то есть вроде все правильно. Но отправляю то же средствами 1С HTTP запросом - сервис мне возвращает что на входе не xml данные.
Что не так с запросом? Подозреваю что дело в заголовке, я скопировал их с Своапа, и например у меня так "Content-Type: text/xml;charset=UTF-8" , думаю тут что то не правильно, или в параметрах запроса что то не так
---
Еще раз. Гадать что не так можно долго.
В чем проблема поставить Fiddler?
https://www.telerik.com/fiddler
Он покажет какой запрос у вас отправляется при рабочем варианте, и при HTTP соединении.
Найти отличия будет не сложно.
---
я ее вставляю в Soup в SendRequest и получаю нормальный ответ сервиса
В Fiddlere вы бы увидели все заголовки.
И не требовалось бы ничего гадать.
---
здравствуйте! подскажите, пожалуйста, Вам удалось реализовать отправку запроса в СМЭВ? дело в том, что мне поручили настроить интеграцию нашей базы 1с (нетиповой) с базой соц защиты через СМЭВ, я пока очень плохо представляю с чего даже начать. понимаю что надо отправлять http запросы, но непонятно как в них вставлять данные об эл подписях и т.п.. Если Вам удалось реализовать взаимодействие со СМЭВ, поделитесь, пожалуйста, Вашим опытом (может краткие шаги как Вы формировали сам запрос). Буду очень благодарна!!!!
---
Удалось. Но с нуля это очень сложно. Там огромное количество нюансов. Нас спасло только то что мы делали свою разработку на базе конфигурации БГУ, та уже были процедуры формирования подписи и собственно пакета в смев. Остальное только на основе чтения документации по СМЕВу. Документация там очень хорошая
---
спасибо! поняла! будем разбираться, в нашу нетиповую базу у нас внедрена БСП, по сути наверное там тоже должны быть функции формирования пакетов или только в типовых реализовано? и еще вопрос, Вы когда тестировали брали реальную ЭЦП или тестовую?
---
Осторожно. В БСП там функции подписи есть, но у СМЭМа очень специфические требования собственно к пакету xml. Там много чего кроме самой подписи. По этому, если у вас конфигурация с нуля - я думаю вам будет лучше перенести код из БГУ, там обработка, по передаче есть иначе жуть,
      Для тестирования используется тестовые контуры тех или иных сервисов СМЭВа, насколько помню там требований к ключу нет, если не ошибаюсь - там у них его для тестов вообще создать можно тестовый.
     И еще от себя, в инструкциях сервисов - описываются и тестовые запросы - их и надо использовать. Произвольные запросы могут просто не срабатывать. Несколько дней на это потерял.
---
Для тестирования используется тестовые контуры тех или иных сервисов СМЭВа, насколько помню там требований к ключу нет, если не ошибаюсь - там у них его для тестов вообще создать можно тестовый.

Это не так. Требуется подпись реального участника с которой он зарегистрирован в СМЭВ, т.к. СМЭВ идентифицирует участника по сертификату, которым подписано сообщение.
---
Точно, вспомнил. Там требуется регистрация, и сама регистрация дает доступ к тестовому контуру
---
подскажите, пожалуйста, еще по поводу обработки. У нас есть типовая БГУ гос. учреждения, посмотрела обработки и нашла обработки "ОбменГИСГМП2" и "ОбменДаннымиИСРНИП". Вы эти обработки имеете в виду? и еще чисто ради интереса - какой Вид сведений Вы передавали/запрашивали через СМЭВ ?
---
Точно смотрел "ОбменГИСГМП2" про вторую не знаю.
В налоговую - есть или нет задолженности у Физ.Юрлиц
---
Спасибо Вам огромное!!!
---
Здравствуйте! Александр, у меня к Вам еще назрел вопрос по эл подписи, вдруг Вы в курсе (или может другие форумчане увидят мой вопрос и подскажут ). Разбираюсь с подписанием документов с помощью этой обработки, и там подписание идет с помощью подключения компоненты Компонента_xades и функции ГосУслугиКлиентСервер.ПодписатьДанныеПоФорматуГИСГМП20НаКлиенте. В результате формат подписи соответствует подписи физ лица. А у нас подпись выдана на орган власти, обезличенная. Вы случайно не знаете какую функцию по подписанию нужно использовать в таком случае? все посмотрела, и вроде как в общих модулях нашла два вида шаблона xml:
// Вариант "furs.mark.crpt.ru_v1".
Функция КонвертXML1()

 Возврат
 "<soap:Envelope
 | xmlns:wsse=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd""
 | xmlns:wsu=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd""
 | xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
 | <soap:Header>
 | <wsse:Security soap:actor=""http://smev.gosuslugi.ru/actors/smev"">
 | <ds:Signature xmlns:ds=""http://www.w3.org/2000/09/xmldsig#"">
 | <SignedInfo xmlns=""http://www.w3.org/2000/09/xmldsig#"">
 | <CanonicalizationMethod Algorithm=""http://www.w3.org/2001/10/xml-exc-c14n#""/>
 | <SignatureMethod Algorithm=""%SignatureMethod%""/>
 | <Reference URI=""#body"">
 | <Transforms>
 | <Transform Algorithm=""http://www.w3.org/2000/09/xmldsig#enveloped-signature""/>
 | <Transform Algorithm=""http://www.w3.org/2001/10/xml-exc-c14n#""/>
 | </Transforms>
 | <DigestMethod Algorithm=""%DigestMethod%""/>
 | <DigestValue>%DigestValue%</DigestValue>
 | </Reference>
 | </SignedInfo>
 | <SignatureValue xmlns=""http://www.w3.org/2000/09/xmldsig#"">
 | %SignatureValue%
 | </SignatureValue>
 | <ds:KeyInfo>
 | <wsse:SecurityTokenReference>
 | <wsse:Reference URI=""#SenderCertificate""
 | ValueType=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3""/>
 | </wsse:SecurityTokenReference>
 | </ds:KeyInfo>
 | </ds:Signature>
 | <wsse:BinarySecurityToken
 | EncodingType=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary""
 | ValueType=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3""
 | wsu:Id=""SenderCertificate"">
 | %BinarySecurityToken%
 | </wsse:BinarySecurityToken>
 | </wsse:Security>
 | </soap:Header>
 | <soap:Body wsu:Id=""body"">
 | %MessageXML%
 | </soap:Body>
 |</soap:Envelope>";

КонецФункции

// Вариант "dmdk.goznak.ru_v1".
Функция КонвертXML2()

 Возврат
 "<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/""
 | xmlns:ns=""urn://xsd.dmdk.goznak.ru/exchange/1.0""
 | xmlns:ns1=""urn://xsd.dmdk.goznak.ru/batch/1.0""
 | xmlns:ns2=""urn://xsd.dmdk.goznak.ru/contractor/1.0""
 | xmlns:ns3=""urn://xsd.dmdk.goznak.ru/types/1.0"">
 | <soapenv:Header />
 | <soapenv:Body>
 | <ns:CheckBatchRequest>
 | <ns:CallerSignature>
 | <ds:Signature xmlns:ds=""http://www.w3.org/2000/09/xmldsig#"">
 | <ds:SignedInfo>
 | <ds:CanonicalizationMethod Algorithm=""http://www.w3.org/2001/10/xml-exc-c14n#"" />
 | <ds:SignatureMethod Algorithm=""%SignatureMethod%"" />
 | <ds:Reference URI=""#body"">
 | <ds:Transforms>
 | <ds:Transform Algorithm=""http://www.w3.org/2001/10/xml-exc-c14n#"" />
 | <ds:Transform Algorithm=""urn://smev-gov-ru/xmldsig/transform"" />
 | </ds:Transforms>
 | <ds:DigestMethod Algorithm=""%DigestMethod%"" />
 | <ds:DigestValue>%DigestValue%</ds:DigestValue>
 | </ds:Reference>
 | </ds:SignedInfo>
 | <ds:SignatureValue>%SignatureValue%</ds:SignatureValue>
 | <ds:KeyInfo>
 | <ds:X509Data>
 | <ds:X509Certificate>%BinarySecurityToken%</ds:X509Certificate>
 | </ds:X509Data>
 | </ds:KeyInfo>
 | </ds:Signature>
 | </ns:CallerSignature>
 | <ns:RequestData Id=""body"">
 | %MessageXML%
 | </ns:RequestData>
 | </ns:CheckBatchRequest>
 | </soapenv:Body>
 |</soapenv:Envelope>";

КонецФункции
 - один из них для физ лица, другой для органа власти, но при отладке не нашла каким образом выбирается формат подписи. Или он изначально заложен в компоненте и тогда надо выбирать другую компоненту? Буду признательна за любую помощь!
---
- один из них для физ лица, другой для органа власти, но при отладке не нашла каким образом выбирается формат подписи.
Эти функции не используются при обмене со СМЭВ в БГУ. То есть при вызове ГосУслугиКлиентСервер.ПодписатьДанныеПоФорматуГИСГМП20НаКлиенте.

В компоненту передается строка с xml, имя узла, который подписывается и сертификат подписи с паролем (или без).
XML вы должны сформировать самостоятельно заранее.
Далее компонента вернет блок подписи Signature, который вставляется в этот XML.
---
а можно каким-либо образом изменить блок подписи Signature в компоненте? (чтобы он соответствовал формату ЭЦП органа власти)
---
Он соответствует, иначе как по вашему в БГУ бы обмен работал?
Приведите пример, что именно в подписи не соответствует по вашему мнению?
---
меня смущает блок "keyinfo". Прикладываю для примера выдержку из СМЭВ подписи ФЛ и подписи ОВ (ИС), у них этот блок отличается. Т.е. в БГУ программа у меня формирует этот блок с тегами как у ФЛ.

PS Спасибо Вам за отклик!!! (возможно мои вопросы Вам кажутся глупыми, но я всего пол года в 1с, а с ЭЦП впервые работаю, не судите меня строго за мои вопросы!)
---
То что у вас на скрине это взаимодействие со СМЭВ 2.0. Там 2 разных подписи, одна в header, другая в body.
То что вы смотрите в БГУ2 - это обмен со СМЭВ 3.0, там формат подписей разный.

Но. В БГУ2 есть взаимодействие с ГИС ГМП 1.6 через СМЭВ 2.0. Там подпись в таком же формате, как вам надо. Смотрите в эту сторону, если вам надо именно со СМЭВ 2.0.
---
спасибо Вам огромное! Вы мне очень помогли! Действительно, мне скинули для изучения инструкцию по СМЭВ 2, не ту что надо(((( а версию я не проверила... эх...
---
Пожалуйста
---
(62) Здравствуйте! Александр, можно к Вам обратиться еще раз за помощью? или может другие участники подскажут. Буду признательная за ответы. Пытаюсь разобраться с подписанием ЭЦП на сервере (на сервер установлен криптопровайдер, сертификат ЭЦП, сервер на линуксе), взяла за основу функцию по подписанию из типовой БГУ:

```1c
    Функция ПодписатьДанныеПоФорматуГИСГМП20НаСервере(Участник,СодержимоеФайла,ТекстОшибки,Знач ИмяУзлаПодписиОВ=") Экспорт
    ...
    Если ЗначениеЗаполнено(ИмяУзлаПодписиОВ) Тогда

    Отправитель = НастройкиУчастника.Отправитель;

    НастройкиОтправителя = НастройкиПодисиУчастников[Отправитель];
    ДанныеСертификатаЗаголовка= НастройкиОтправителя.ДанныеСертификатаСообщения;

    Попытка

    КомпонентаПодписи.ПодписатьXMLDSignСМЭВ3(
    СодержимоеФайла,
    ИмяУзлаПодписиОВ,
    ДанныеСертификатаЗаголовка,
    Истина,
    Истина,
    НастройкиОтправителя.ПарольЭПСообщения);

    Подпись = КомпонентаПодписи.Подпись;

    Исключение

    ТекстОшибки = НСтр("ru='При формировании подписи ОВ возникла ошибка");

    Возврат ТекстОшибки;

    КонецПопытки;

    Подписано = Истина;
    КонецЕсли;
    возврат Подпись;
    конецФункции
```

И вот вопрос, если в xml нет русских букв, то подпись идет хорошо, все подписывает, но если прописать значение какого-либо атрибута русскими буквами, то выдает ошибку (см вложение). Я понимаю что-где проблема скорее всего с кодировкой, но как ее можно исправить?
---
К сожалению, тут не подскажу
---
(64)спасибо! буду думать дальше)))
---
Вам удалось решить вопрос подписания с кириллицей внутри?

1С нам ответила, что это ошибка работы внешней компоненты в среде Linux, но пока они не могут воспроизвести проблему.
Так же они запросили подробные сведения о сервере - версия ОС, региональные настройки и проч.
---
Я вот так делал

```1c
    Функция ПолучитьПараметрыСоединения()
    Заголовки = Новый Соответствие();
    Заголовки.Вставить("Content-Type", "application/xml; charset=UTF-8");
    Заголовки.Вставить("Authorization","Basic "+Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(Логин+":"+Пароль)));

    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
    Соединение = Новый HTTPСоединение(Сервер,,,,,,ЗащищенноеСоединение);

    Возврат Новый ФиксированнаяСтруктура("Соединение,Заголовки",Соединение,Заголовки);
    КонецФункции
```
---
не помогло, у меня сервис без авторизации, так что я Content-Type попробовал, не помогло, зато выяснил что

```1c
    Заголовоки.Вставить("Content-Length", Формат(СтрДлина(СтрТЧ.Запрос),"ЧГ="));
```
 обязательно надо, без него вообще не обрабатывается
---
Заголовок "Content-Length" платформа добавляет сама.
---
Может быть, но пытался ремить его отваливалось то таймоуту
---
Установите Fiddler - будете видеть что реально отправляете и что получаете.
---
И что это даст, надо где то узнать что надо передавать
---
Там не надо ничего особенного передавать.
В БГУ2 соответствие формируется так:
СоответствиеЗаголовковФорматов = Новый ФиксированноеСоответствие(ЭкспортФайлов.ПолучитьЗаголовкиМассиваФорматов(НастройкаОбмена, МассивФ));

Там все просто.
Есть 2 общих заголовка, значения которых заполняются в этой функции:
ОбщиеЗаголовки = Новый Соответствие;
 ОбщиеЗаголовки.Вставить("Connection", "Keep-Alive");
 ОбщиеЗаголовки.Вставить("Content-Type", "text/xml; charset=utf-8");

Далее в форматах обмена есть настройки заголовков.
Они могут быть разные для разных форматов.
В них указывается заголовок "SOAPAction" - в зависимости от вида сообщения его значения "urn:GetResponse", "urn:SendRequest", "urn:Ack".
Собственно все.
---
я меня сейчас так

```1c
    Заголовоки = Новый Соответствие;
    Заголовоки.Вставить("Content-type", "text/xml; charset=utf-8");
    Заголовоки.Вставить("Connection", "Keep-Alive");
    Заголовоки.Вставить("Content-Length", Формат(СтрДлина(СтрТЧ.Запрос),"ЧГ="));
    Заголовоки.Вставить("SOAPAction",""urn:SendRequest"");

    ЗапросHTTP = Новый HTTPЗапрос(АдресРесурса, Заголовоки);

    ЗапросHTTP.УстановитьТелоИзСтроки(СтрТЧ.Запрос,КодировкаТекста.UTF8,ИспользоватьBOM);
```

а в результате
Incoming message is not xml message
и по моему на клиенте
---
ИспользоватьBOM
Какое значение?
---
Было в обмене с ГИС ГМП
---
Убрал - результат тот же
---
В обмене с ГИС ГМП у ИспользоватьBOM значение - Не использовать
---
Поставил не использовать - не помогло
Тут вот еще что, убрал все заголовки кроме последнего (В справочнике у меня только одно соответствие везде) так выдало
Unmarshalling Error: Unexpected character (CTRL-CHAR, code 152) expected '=' at [row,col {unknown-source}]: [8,26]
у меня smev/v1.2/ws это АдресРесурса правильно?
---
Полный адрес тестового стенда: smev3-n0.test.gosuslugi.ru:7500/smev/v1.2/ws?wsdl
Он должен открываться в браузере - показывать wsdl сервиса.

Сервер: smev3-n0.test.gosuslugi.ru
Порт: 7500
Адрес ресурса: smev/v1.2/ws?wsdl
---
результат -
Unmarshalling Error: Unexpected character (CTRL-CHAR, code 152) expected '=' at [row,col {unknown-source}]: [8,26]
---
Incoming message is not xml message
В СтрТЧ.Запрос - что?
---
строка со значением хмл данных которые замечательно обрабатываются своапом
---
Сообщение было скрыто модератором.
---
Извините могу файл прикрепить, он не маленький
---
С описанными выше заголовками, и настройкой BOM - не использовать, успешно отправилось сообщение на адрес тестового стенда.
Заголовки были:
Заголовоки.Вставить("Content-type", "text/xml; charset=utf-8");
Заголовоки.Вставить("Connection", "Keep-Alive");
Заголовоки.Вставить("SOAPAction","""urn:SendRequest""");
---
да в своапе я это тоже получаю, 1с ка никак не отправит
у меня сервер smev3-n0.test.gosuslugi.ru
порт 750
ресурс smev/v1.2/ws?wsdl
ошибка на скрине, ну что у меня не так то
---
https://sysadmins.online/threads/1418/

Настройки прокси в базе не корректные?
При обмене с ГИС ГМП в БГУ настраивается прокси.
https://its.1c.ru/db/metbud81#content:7283:hdoc:_toc5969488
Главное - Мои настройки - Настройки прокси сервера.
---
Я же свой обмен пишу, он вроде от ГИС ГМП только подписи берет, потом переделаю. Как он в HTTP запрос прокси сует?
---
В HTTPСоединении есть параметр - прокси. Настройка для прокси-сервера задается в настройках пользователя. Это БСПшный функционал.
Эта же настройка используется и при обмене с ГИС ГМП.
---
Прокси отключил, не помогло
похоже ошибка в том что и той строки которую я подставляю в сообщение пропадают три последнии строки
---
Вы же из БГУ берете пример, так посмотрите какие заголовки передаются там.
---
рад бы, но это жутко как сложно кажется, там целая цепочка вызовов и в конце значение ссылки справочника подставляется в квадратные скобки, вообще не понимаю как это формируется
---
значение ссылки справочника подставляется в квадратные скобки
Там соответствие, где ключ - ссылка на справочники, значение - соответствие заголовков.
Ща...
---
Еще раз. Гадать что не так можно долго.
В чем проблема поставить Fiddler?
https://www.telerik.com/fiddler
Он покажет какой запрос у вас отправляется при рабочем варианте, и при HTTP соединении.
Найти отличия будет не сложно.
---
поставил, нажал в своапе отправить, не увидел своего сообщения
---
После открытия фиддлера надо закрыть soapui и открыть заново.
---
Перезапустил, вроде пошло, в тексте запросов все ровно
это правильный

```1c
    POST http://smev3-n0.test.gosuslugi.ru:7500/smev/v1.2/ws HTTP/1.1
    Accept-Encoding: gzip,deflate
    Content-Type: text/xml;charset=UTF-8
    SOAPAction: "urn:SendRequest"
    Content-Length: 5364
    Host: smev3-n0.test.gosuslugi.ru:7500
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
```

это то что 1ска выдает

```1c
    POST http://smev3-n0.test.gosuslugi.ru:7500/smev/v1.2/ws HTTP/1.1
    Host: smev3-n0.test.gosuslugi.ru:7500
    Proxy-Authorization: NTLM TlRMTVNTUAABAAAAB7IIogkACQA3AAAADwAPACgAAAAKALpHAAAAD0xBUFRP­UC1TNTY2ODBNNldPUktHUk9VUA==
    User-Agent: 1C+Enterprise/8.3
    Accept: */*
    Connection: Keep-Alive
    Content-type: text/xml; charset=utf-8
    Content-Length: 5334
    Connection: Keep-Alive
    SOAPAction: "urn:SendRequest"
```

что за прокси?
---
Сравнивать стоит с закладки RAW - это полные сообщения с заголовками.
---
Да отличаются только строками хедера, первыми, я их выше привел, что за прокси, в нем дело наверно
---
Опа, внимательно посмотрел, в моем варианте от 1ски режутся три последние строчки, как это? у меня в файл все целеком сохраняется
---
Ошибка как на скрине в (28) к этому не относится, это ошибка отправки.
Если файл не корректный - это уже в ответе от смэв вернется, но сначала надо отправить.
---
Тут беда другая, по программе отправляются два пакета, ошибка похоже на трейтем, а вот в первых двух как раз сообщение о том что это не XML
---
А, ну тогда да, это может быть если сообщение обрывается.
---
почему тогда в первых двух режутся строки?
---
Надо найти момент в который они режутся. Они могут резаться где нибудь ранее, при присваивании.
---
Даже предположить не могу, при отправке просто идет присвоение, ни каких манипуляций, а потом тже строку пишу в файл - в файле все ровно
---
Все получилось, пришли корректные ответы.

```1c
    Заголовоки.Вставить("Content-Length", Формат(СтрДлина(СтрТЧ.Запрос),"ЧГ="));
```

из-за этого резались пакеты
---
Отлично, что заработало)

из-за этого резались пакеты
Так то сразу сказал, что это не нужно)