Как стать автором
Обновить

Комментарии 13

А Битрикс тут каким боком?
Я понимаю что тут описаны особенности платформы 1C, а не конкретно 1С: Битрикс, но какое еще хаб будет близок по тематики?
Ага, битрикс тут ни к селу.., лучше добавьте тэг WSDL.

Сразу скажу, вопросы шифрования/подписи по ГОСТУ при работе с ГИС ЖКХ за рамками этой статьи и на хабре уже освещались. Хотя без подписей запросы выполнить не удастся.


А вот мне интересно, можно ли без использования ВК, штатными средствами подписывать запросы?
Вообще в платформе есть механизмы работы с ГОСТ шифрованием, но в ГИС ЖКХ надо подписывать не весь файл, а только кусок XML технология XAdES. У нас отдельный web сервис на C#, который подписывать пакеты с помощью NET Framework. КриптоПро .NET перед отправкой в ГИС ЖКХ
Вот у меня лично по коду есть два очень тревожащих меня вопроса знатокам:
1. Не вызывает ли дополнительного утомления кодера исходный текст в смешанной раскладке, причём при их смешении прямо в имени переменных (в константах и комментариях они мешаются часто и в других языках)?

2. Не слышно, 1С не планирует внести в платформу более человеческий метод работы с SOAP, т.к. это судя по всему основной протокол ГосAPI? Вот честно, у меня кровь из глаз хлынула на куске по формированию запроса через банальное конструирование XML на низком уровне…
Про смесь кодировок, я не говорил, что это пойдет на продакшен, именно в таком виде, там фактически будут использованы обертки и обычный программист использует конструкции тип Структура = ЗапросоЮрЛицаПоОргн(«1234567890123»). Потом ответ будет типа Структура.Наименование, Структура.КПП и т.п.

В стандартных объектах платформы ФабрикаXDTO, СвойствоXDTO, ЧтениеXML, ЧтениеJSON, ЕстьNULL тоже идет смешение раскладок. И вообще многие символы которые используются в код или запросах 1С нельзя поставить без смены кодировки (>,<, % и т.п. особенно раздражает символ | ), и если в коде спасает автозамена через шаблоны, то в запросах увы это не работает.

Вообще как я уже писал в конце, работать с xsd очень не удобно. 1С фактически кроме контроля типов на этапе выполнения ничего не предоставляет почти все сложные типы инициализируются как Неопределено даже без типизаций, приходиться сидеть в xsd схемах и документаций. Хотя десериализация происходит нормально, там уже все сделает платформа из знания типов и текущих данных, и тогда уже можно работать через точку в удобном режиме. В том же C#, как других языках, через кодогенерацию можно получить готовые классы и не заниматься ручным сбором. Тут к сожалению такой метод мне не известен все руками.

Вообще задача была показать как работать со сложными XSD схемами: разбитыми на куски с иерархией типов и т.п., а не ограничится примерами из документаций.

Про ГосAPI я ничего не слышал. Но есть же в документообороте работа с ЭЦП, и обмен электронными счетами факторами тоже есть. Может что то и будет.
Какой то изврат получается полнейший господа!
Вот тоже самое малой кровью и легко редактируется

IdПодписи = СтрЗАменить(Строка(Новый УникальныйИдентификатор()),"-","");
Запрос = "
|<soapenv:Envelope xmlns:soapenv="«http://schemas.xmlsoap.org/soap/envelope/»" xmlns:base="«http://dom.gosuslugi.ru/schema/integration/base/»" xmlns:org="«http://dom.gosuslugi.ru/schema/integration/organizations-registry-common/»" xmlns:xd="«http://www.w3.org/2000/09/xmldsig#»">
| <soapenv:Header>
| <base:ISRequestHeader>
| <base:Date>"+Формат(ТекущаяДата(),«ДФ=yyyy-MM-ddTHH:mm:00»)+"</base:Date>
| <base:MessageGUID>"+Строка(Новый УникальныйИдентификатор())+"</base:MessageGUID>
| </base:ISRequestHeader>
| </soapenv:Header>
| <soapenv:Body>
| <org:exportDataProviderRequest Id="""+IdПодписи+""">
| <org:IsActual>true</org:IsActual>
| </org:exportDataProviderRequest>
| </soapenv:Body>
|</soapenv:Envelope>";
Xades = Новый COMОбъект(«Xades1C.Xades1C»);
ПодписанныйЗАпрос = Xades.SignSTR(ЗАпрос, IdПодписи, Константы.ОтпечатокПодписи.Получить(), Константы.ПарольСертификата.Получить());

Заголовки = Новый Соответствие;
Заголовки.Вставить(«Content-Type», «text/xml;charset=UTF-8»);
Заголовки.Вставить(«SOAPAction», «urn:exportDataProvider»);

HTTPЗапрос = Новый HTTPЗапрос("/ext-bus-org-registry-common-service/services/OrgRegistryCommon", Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(ПодписанныйЗАпрос, «UTF-8»);
HTTPСоединение = Новый HTTPСоединение(«127.0.0.1»,«8080», «lanit»,«tv,n8!Ya»);
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);

Ответ = HTTPОтвет.ПолучитьТелоКакСтроку();

Сообщить(Ответ);

Дальше ответ разбирайте как
лЧтение = Новый ЧтениеXML;
лЧтение.УстановитьСтроку(Ответ);
лОбъект = ФабрикаXDTO.ПрочитатьXML(................);
Это да, но как проверять типы и отлавливать их изменения при изменений xsd схемы?
Разработчики меняют их пару раз в месяц
От этих разработчиков ничего не спасет.
Последний конкретный раз когда они кординально все поменяли (начало октября — добавили version «10.0.2.1» и т.д.) Все равно ведь все переделывать пришлось
Это да с ГИС ЖКХ много не понятных вопросов и не только в интеграниции, но и организационно, часть деятельности по ЖКХ (всякие хоз постройки) под нее не попадают, общаги тоже. В целом она не приносит никаких данных нам в работу, зато требует очень многое отдать, и за не корректно и отсутствия данных еще и штрафовать будут

Как я уже говорил, по мимо практической части работы с ГИС ЖКХ, я хотел показать именно работу с XDTO, я таких данных не находил, как работать с примитивными типам, свойствами, десериализовать кусок данных.
Да так то статья полезная… когда начинали делать в июне месяце вообще информации мало было
а где вы берёте вот этого зверя Xades = Новый COMОбъект(«Xades1C.Xades1C») ???
Вот и прошло 3 года… вот и можно ответить на вопрос… я прям быстрый
«Новый COMОбъект(«Xades1C.Xades1C»);» это ком объект для 1С собранный на основе примера выложенного на сайте ГИС ЖКХ dom.gosuslugi.ru/filestore/publicDownloadServlet?context=contentmanagement&uid=b8021a1b-a395-4eec-9b22-6b856d8634d6&mode=view
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории