Форум программистов, компьютерный форум, киберфорум
C#: Веб-сервисы, WCF
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.61/847: Рейтинг темы: голосов - 847, средняя оценка - 4.61
1 / 1 / 0
Регистрация: 16.12.2015
Сообщений: 1
.NET 4.x

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ

16.12.2015, 11:46. Показов 174920. Ответов 999

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Передо мной стоит задача интеграции с системой ГИС ЖКХ (https://dom.gosuslugi.ru/) программой, написанной на языке C#, .NET Framework 4
Данный сервис предоставляет SOAP веб-сервисы для приема и передачи информации, соединение защищается сертификатом по алгоритму ГОСТ. Каждый элемент внутри тела SOAP сообщения подписывается сигнатурой XAdES-BES.
На данный момент для осуществления защищённого соединения я использую «МагПро КриптоТуннель» (stunnel) со следующими настройками:
Конфигурация stunnel (stunnel.conf)
verify=2
client=yes
CAFile=CA-test2-cryptopro.pem
engine=gost
usb_eject=yes
sslVersion=TLSv1
taskbar=yes
DEBUG=7

[pseudo-https]
protocol = http
accept = 127.0.0.1:8754
connect = 54.76.42.99:60045
ciphers = GOST2001-GOST89-GOST89
TIMEOUTclose = 0
cert=test.pem
key=test.key

Для обмена SOAP сообщениями я использую стандартный сервис WCF с прокси-классами, сгенерированные из WSDL файлов. Для подписи SOAP сообщений сигнатурой использую ниже представленный класс:
C#. Класс для подписи исходного SOAP сообщения
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
class ServiceClientBehavior : IEndpointBehavior, IClientMessageInspector
{
    public object BeforeSendRequest(ref Message request, IClientChannel channel)
    {
        XmlDocument doc = new XmlDocument();
        MemoryStream ms = new MemoryStream();
        XmlWriter writer = XmlWriter.Create(ms);
        request.WriteMessage(writer);
        writer.Flush();
        ms.Position = 0;
        doc.Load(ms);
        
        SignXml(doc);
        
        ms.SetLength(0);
        writer = XmlWriter.Create(ms);
        doc.WriteTo(writer);
        writer.Flush();
        ms.Position = 0;
        XmlReader reader = XmlReader.Create(ms);
        request = Message.CreateMessage(reader, int.MaxValue, request.Version);
 
        return null;
    }
    
    void SignXml(XmlDocument doc)
    {
        doc.PreserveWhitespace = true;
 
        // Получение элемента из тела сообщения
        var requestNode = doc.DocumentElement.ChildNodes[1].ChildNodes[0];
        var signRequestNode = SignRequest(requestNode);
 
        var body = requestNode.ParentNode;
        body.RemoveChild(requestNode);
        body.AppendChild(signRequestNode);
    }
    XmlNode SignRequest(XmlNode reqNode)
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.PreserveWhitespace = true;
        xmlDoc.AppendChild(xmlDoc.ImportNode(reqNode, true));
 
        var signedXml = new SignedXML(xmlDoc);
        signedXml.SigningKey = certificate.PrivateKey;
 
        KeyInfo keyInfo = new KeyInfo();
        keyInfo.AddClause(new KeyInfoX509Data(certificate));
        signedXml.KeyInfo = keyInfo;
 
        signedXml.Signature.Id = "SignatureId";
 
        #region Создание DataObject
        {
            XmlElement SignaturePropertiesRoot;
            XmlElement QualifyingPropertiesRoot;
            string xadesURI = "http://uri.etsi.org/01903/v1.3.2#";
            string dsURI = "http://www.w3.org/2000/09/xmldsig#";
 
            QualifyingPropertiesRoot = xmlDoc.CreateElement("xades", "QualifyingProperties", xadesURI);
            QualifyingPropertiesRoot.SetAttribute("Target", "#SignatureId");
 
            SignaturePropertiesRoot = xmlDoc.CreateElement("xades", "SignedProperties", xadesURI);
            SignaturePropertiesRoot.SetAttribute("Id", "SignedPropertiesId");
 
            XmlElement SignedSignatureProperties = xmlDoc.CreateElement("xades", "SignedSignatureProperties", xadesURI);
 
            XmlElement timestamp = xmlDoc.CreateElement("xades", "SigningTime", xadesURI);
            timestamp.InnerText = XmlConvert.ToString(DateTimeOffset.Now);
            SignedSignatureProperties.AppendChild(timestamp);
 
            XmlElement SigningCertificate = xmlDoc.CreateElement("xades", "SigningCertificate", xadesURI);
            XmlElement Cert = xmlDoc.CreateElement("xades", "Cert", xadesURI);
            XmlElement CertDigest = xmlDoc.CreateElement("xades", "CertDigest", xadesURI);
 
            XmlElement DigestMethod = xmlDoc.CreateElement("ds", "DigestMethod", dsURI); DigestMethod.SetAttribute("Algorithm", "http://www.w3.org/2001/04/xmldsig-more#gostr3411");
            XmlElement DigestValue = xmlDoc.CreateElement("ds", "DigestValue", dsURI); DigestValue.InnerText = ComputeGostHash(this.ClientCertificate.RawData);
            CertDigest.AppendChild(DigestMethod);
            CertDigest.AppendChild(DigestValue);
            Cert.AppendChild(CertDigest);
 
            XmlElement IssuerSerial = xmlDoc.CreateElement("xades", "IssuerSerial", xadesURI);
            XmlElement X509IssuerName = xmlDoc.CreateElement("ds", "X509IssuerName", dsURI); X509IssuerName.InnerText = GetIssuerName(certificate);
            XmlElement X509SerialNumber = xmlDoc.CreateElement("ds", "X509SerialNumber", dsURI); X509SerialNumber.InnerText = GetSerialNumber(certificate);
            IssuerSerial.AppendChild(X509IssuerName);
            IssuerSerial.AppendChild(X509SerialNumber);
            Cert.AppendChild(IssuerSerial);
 
            SigningCertificate.AppendChild(Cert);
            SignedSignatureProperties.AppendChild(SigningCertificate);
 
            SignaturePropertiesRoot.AppendChild(SignedSignatureProperties);
            QualifyingPropertiesRoot.AppendChild(SignaturePropertiesRoot);
            DataObject dataObject = new DataObject
            {
                Data = QualifyingPropertiesRoot.SelectNodes("."),
            };
            signedXml.AddObject(dataObject);
        }
        #endregion
 
        signedXml.SignedInfo.SignatureMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411";
        signedXml.SignedInfo.CanonicalizationMethod = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315";
 
        var reference = new Reference();
        reference.Uri = "#RequestId";
        reference.DigestMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr3411";
        reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
        reference.AddTransform(new XmlDsigExcC14NTransform());
        signedXml.AddReference(reference);
 
        reference = new Reference();
        reference.Uri = "#SignedPropertiesId";
        reference.DigestMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr3411";
        reference.Type = "http://uri.etsi.org/01903#SignedProperties";
        reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
        reference.AddTransform(new XmlDsigExcC14NTransform());
        signedXml.AddReference(reference);
 
        signedXml.ComputeSignature();
 
        XmlElement signatureNode = signedXml.GetXml();
        xmlDoc.DocumentElement.PrependChild(xmlDoc.ImportNode(signatureNode, true));
 
        if (!VerifyXml(xmlDoc))
            throw new Exception("Подпись не проходит проверку.");
        return reqNode.OwnerDocument.ImportNode(xmlDoc.DocumentElement, true);
    }
}

В результате после подписи элемента "exportNsiItemRequest" SOAP-сообщение выглядит следующим образом:
XML. Подписанное SOAP сообщение
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Header>
        <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">urn:exportNsiItem</Action>
        <h:RequestHeader xmlns="http://dom.gosuslugi.ru/schema/integration/7.1.0.2/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:h="http://dom.gosuslugi.ru/schema/integration/7.1.0.2/">
            <Date>2015-12-16T16:12:47.9885439+10:00</Date>
            <MessageGUID>c7a1d946-9fcf-4ebc-9c08-20ebe81179cf</MessageGUID>
            <SenderID>387142bd-4ff7-4d15-ab09-18b3d99fd9bd</SenderID>
        </h:RequestHeader>
    </s:Header>
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <exportNsiItemRequest Id="RequestId" xmlns="http://dom.gosuslugi.ru/schema/integration/7.1.0.2/nsi/">
            <Signature Id="SignatureId" xmlns="http://www.w3.org/2000/09/xmldsig#">
                <SignedInfo>
                    <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
                    <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411" />
                    <Reference URI="#RequestId">
                        <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="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
                        <DigestValue>fpTlCLCz9/78q4Zpng9eAiCZuaHP51fCXfllN2TeFPw=</DigestValue>
                    </Reference>
                    <Reference URI="#SignedPropertiesId" Type="http://uri.etsi.org/01903#SignedProperties">
                        <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="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
                        <DigestValue>9sBDvpcyxJLVxibQGy280Rz/MlcESescb6k6MEGKreQ=</DigestValue>
                    </Reference>
                </SignedInfo>
                <SignatureValue>...</SignatureValue>
                <KeyInfo>
                    <X509Data>
                        <X509Certificate>...</X509Certificate>
                    </X509Data>
                </KeyInfo>
                <Object>
                    <xades:QualifyingProperties Target="#SignatureId" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
                        <xades:SignedProperties Id="SignedPropertiesId">
                            <xades:SignedSignatureProperties>
                                <xades:SigningTime>2015-12-16T16:13:13.4750017+10:00</xades:SigningTime>
                                <xades:SigningCertificate>
                                    <xades:Cert>
                                        <xades:CertDigest>
                                            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" />
                                            <ds:DigestValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#">B2/4UjEeZwUG0c+mlEfnAZIy8mlbGpkOp4L+jPkgcVY=</ds:DigestValue>
                                        </xades:CertDigest>
                                        <xades:IssuerSerial>
                                            <ds:X509IssuerName xmlns:ds="http://www.w3.org/2000/09/xmldsig#">cn=CRYPTO-PRO Test Center 2,o=CRYPTO-PRO LLC,l=Moscow,c=RU,1.2.840.113549.1.9.1=support@cryptopro.ru</ds:X509IssuerName>
                                            <ds:X509SerialNumber xmlns:ds="http://www.w3.org/2000/09/xmldsig#">401416565317479933092244230678231137456309019</ds:X509SerialNumber>
                                        </xades:IssuerSerial>
                                    </xades:Cert>
                                </xades:SigningCertificate>
                            </xades:SignedSignatureProperties>
                        </xades:SignedProperties>
                    </xades:QualifyingProperties>
                </Object>
            </Signature>
            <RegistryNumber>221</RegistryNumber>
        </exportNsiItemRequest>
    </s:Body>
</s:Envelope>

Проблема заключается в том, что ответ от сервера приходит следующий:
ru.lanit.security.crypto.CryptoException : ЭП не прошла проверку: Invalid XML Signature
Текст ответного сообщения следующий:
XML. SOAP-ответ от сервера
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<soap:Envelope xmlns:ns2="http://dom.gosuslugi.ru/schema/integration/7.1.0.2/" xmlns:ns3="http://www.w3.org/2000/09/xmldsig#" xmlns:ns5="http://dom.gosuslugi.ru/schema/integration/7.1.0.2/nsi/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
        <ns2:ResultHeader>
            <ns2:Date>2015-12-16T09:14:28.819+03:00</ns2:Date>
            <ns2:MessageGUID>c7a1d946-9fcf-4ebc-9c08-20ebe81179cf</ns2:MessageGUID>
        </ns2:ResultHeader>
    </soap:Header>
    <soap:Body>
        <ns5:exportNsiItemResult Id="signed-data-container">
            <ds:Signature Id="xmldsig-3208628d-03cc-4576-895d-ea6d78b1b6dd" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
                <ds:SignedInfo>
                    <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
                    <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411" />
                    <ds:Reference URI="#signed-data-container">
                        <ds:Transforms>
                            <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                            <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
                        </ds:Transforms>
                        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
                        <ds:DigestValue>iqCeIlUfsqxdZRuMTjvYKWBTVOtSNrJIYledBG8LrWA=</ds:DigestValue>
                    </ds:Reference>
                    <ds:Reference Type="http://uri.etsi.org/01903#SignedProperties" URI="#xmldsig-3208628d-03cc-4576-895d-ea6d78b1b6dd-signedprops">
                        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
                        <ds:DigestValue>yASmvpbUBqEPr1Vp+qzYjXhzzXymC9ggqUZZ8GbBVkI=</ds:DigestValue>
                    </ds:Reference>
                </ds:SignedInfo>
                <ds:SignatureValue>...</ds:SignatureValue>
                <ds:KeyInfo>
                    <ds:X509Data>
                        <ds:X509Certificate>...</ds:X509Certificate>
                    </ds:X509Data>
                </ds:KeyInfo>
                <ds:Object>
                    <xades:QualifyingProperties Target="#xmldsig-3208628d-03cc-4576-895d-ea6d78b1b6dd" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
                        <xades:SignedProperties Id="xmldsig-3208628d-03cc-4576-895d-ea6d78b1b6dd-signedprops">
                            <xades:SignedSignatureProperties>
                                <xades:SigningTime>2015-12-16T09:14:28.870+03:00</xades:SigningTime>
                                <xades:SigningCertificate>
                                    <xades:Cert>
                                        <xades:CertDigest>
                                            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
                                            <ds:DigestValue>Sz5+eJyswooXj8h3A5bhMbPG61QPExSKXuw+ZLzyeQ8=</ds:DigestValue>
                                        </xades:CertDigest>
                                        <xades:IssuerSerial>
                                            <ds:X509IssuerName>cn=CRYPTO-PRO Test Center 2,o=CRYPTO-PRO LLC,l=Moscow,c=RU,1.2.840.113549.1.9.1=support@cryptopro.ru</ds:X509IssuerName>
                                            <ds:X509SerialNumber>401416477754091206680439394611221196150735163</ds:X509SerialNumber>
                                        </xades:IssuerSerial>
                                    </xades:Cert>
                                </xades:SigningCertificate>
                            </xades:SignedSignatureProperties>
                        </xades:SignedProperties>
                    </xades:QualifyingProperties>
                </ds:Object>
            </ds:Signature>
            <ns2:ErrorMessage>
                <ns2:ErrorCode>AUTH01105</ns2:ErrorCode>
                <ns2:Description>Ошибка формата подписи запроса</ns2:Description>
                <ns2:StackTrace>ru.lanit.hcs.integration.common.exception.OperationProcessorException: ЭП не прошла проверку: Invalid XML Signature</ns2:StackTrace>
            </ns2:ErrorMessage>
        </ns5:exportNsiItemResult>
    </soap:Body>
</soap:Envelope>


Подскажите пожалуйста:
1) Как сделать валидную подпись, которая будет проходить проверку сервером, используя WCF ?
2) Как с помощью средств CryptoPro.NET отказаться от использования «МагПро КриптоТуннель» ?
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.12.2015, 11:46
Ответы с готовыми решениями:

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (3)
Предыдущая тема: https://www.cyberforum.ru/web-services-wcf/thread1776736.html Кто нибудь знает откуда брать справочники NsiRef по...

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (5)
Предыдущая тема: https://www.cyberforum.ru/web-services-wcf/thread1840159.html И так мы Я и umatkot, Берёмся за реализацию всего этого...

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4)
Предыдущая тема: https://www.cyberforum.ru/web-services-wcf/thread1800721.html Здравствуйте. Подскажите, пожалуйста: делаю getState...

999
6 / 5 / 0
Регистрация: 10.03.2015
Сообщений: 58
13.05.2016, 14:28
Студворк — интернет-сервис помощи студентам
Может у вас не работает, так как по этому дому уже есть ДРСО электроснабжения в системе?
0
6 / 5 / 0
Регистрация: 28.03.2016
Сообщений: 34
13.05.2016, 16:54
все работает я убрал вобще соббсвенника делаю договор оферты

Добавлено через 2 часа 23 минуты
вобщем дошли да тойже ошбики с созданием ЛС в помещении пишет что данное помещение с идентиикатором таким то (непонятно еще откуда идентификатор взят т.к. у дома самого он другой и это МКД) наша не поставляет ресурсы.... будем в ПНД разбираться т.к. в ручную все работает и подгружается... попробуем ЛС пришпандорить к уже созданным домам.... и другими ЛС загруженными из экселя.... кстати дальше кто знает какие шаги? загрузка начислений и оплат кто то разбирался уже?
0
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 36
14.05.2016, 15:06
кто-нибудь знает, как сопоставляются лицевые счета?
0
476 / 239 / 114
Регистрация: 12.05.2016
Сообщений: 647
14.05.2016, 16:10
кто-нибудь знает, как сопоставляются лицевые счета?
На текущий момент путем экспериментов выяснили, что по сочетанию "платежный код + senderID"

Нам удалось с помощью API создать много лицевых счетов с одним и тем же платежным кодом, но разными SenderID.

Соответственно для каждой РСО и УК, которые предоставляют услуги в доме будет как бы свой собственный "подсчет" с одним и тем же платежным кодом.

А потом уже где-то у себя внутрях ГисЖКХ объединяет их в рамках единого лицевого счета на данное помещение + ответственного квартиросъемщика. Чтобы человек видел все свои начисления от разных поставщиков в едином счете.
0
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 36
14.05.2016, 18:20
Anvano, Спасибо большое!!!

Добавлено через 1 час 5 минут
можно использовать ДРСО на все дома или необходимо выгружать для каждого дома?
0
476 / 239 / 114
Регистрация: 12.05.2016
Сообщений: 647
14.05.2016, 22:00
Цитата Сообщение от VladimirGT Посмотреть сообщение
можно использовать ДРСО на все дома или необходимо выгружать для каждого дома?
Метод создания дома для РСО (importHouseRSOData) вроде на текущий момент не требует указания ДРСО для каждого запроса.
0
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 36
14.05.2016, 23:49
Anvano, Спасибо большое!!! Ты меня просто спасаешь
0
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 7
16.05.2016, 08:12
У кого-нибудь работает метод importHouseRSOData? Не поделись примером запроса?
Начинаю как-то так:
C#
1
2
3
4
5
6
7
8
9
10
       HouseManagementPortsTypeClient client = new HouseManagementPortsTypeClient();
           HeaderType header = new HeaderType
          {
              Date = DateTime.Now,
              MessageGUID = Guid.NewGuid().ToString()
          };
            importHouseRSODataRequest reg = new importHouseRSODataRequest()
          {
 
          }
дальше затык, никак не соображу .... Спасибо
0
0 / 0 / 0
Регистрация: 27.01.2016
Сообщений: 9
16.05.2016, 08:55
Кто-нибудь знает как победить ошибку импорта лицевых счетов (importAccountData) "Организация не предоставляет услуги для помещения с идентификатором ..."?
ДРСО импортирован, дома импортируются без ошибок. Пробовал привязать к ДРСО помещение - результат тот же. При чем если пытаться создать ЛС на помещение, на котором уже есть ЛС, опять же выходит аналогичная ошибка.
0
476 / 239 / 114
Регистрация: 12.05.2016
Сообщений: 647
16.05.2016, 11:11
Цитата Сообщение от Jinks Посмотреть сообщение
Кто-нибудь знает как победить ошибку импорта лицевых счетов (importAccountData) "Организация не предоставляет услуги для помещения с идентификатором ..."?
ДРСО импортирован, дома импортируются без ошибок. Пробовал привязать к ДРСО помещение - результат тот же. При чем если пытаться создать ЛС на помещение, на котором уже есть ЛС, опять же выходит аналогичная ошибка.
А вы сначала сделайте exportHouseData для этого дома под тем же sender_id под которым пытаетесь делать importAccountData. И посмотрите вообще какие квартиры и помещения вам вернутся.

Далее, что передаёте в параметры: <hous:isUOAccount> и <hous:isRSOAccount>, если у вас РСО, то надо только второй оставлять....

Лицевой счет может быть создан в доме (<hous:FIASHouseGuid>) ИЛИ в помещении (<hous:PremisesGUID>) ИЛИ в комнате (<hous:LivingRoomGUID>). Может вы пытаетесь одновременно несколько GUID-ов ему скормить ?

Добавлено через 3 минуты
Цитата Сообщение от Milawin Посмотреть сообщение
У кого-нибудь работает метод importHouseRSOData? Не поделись примером запроса?
Вот рабочий запрос (ну естессно код FIAS для дома свой подставите). Как его в .NET завернуть и подписать - смотрите сами уже ....

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://dom.gosuslugi.ru/schema/integration/8.6.0.6/" xmlns:hous="http://dom.gosuslugi.ru/schema/integration/8.6.0.6/house-management/" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
   <soapenv:Header>
      <ns:RequestHeader>
         <ns:Date>2016-04-28T16:00:00</ns:Date>
         <ns:MessageGUID>${=java.util.UUID.randomUUID()}</ns:MessageGUID>
         <ns:SenderID>????????????????????????</ns:SenderID>
      </ns:RequestHeader>
   </soapenv:Header>
   <soapenv:Body>
      <hous:importHouseRSORequest>
        <hous:ApartmentHouse>
           <hous:ApartmentHouseToUpdate>
               <hous:BasicCharacteristicts>
                 <hous:NoKNData>true</hous:NoKNData>
                  <hous:FIASHouseGuid>??????????????????????????</hous:FIASHouseGuid>
              </hous:BasicCharacteristicts>
               <ns:TransportGUID>${=java.util.UUID.randomUUID()}</ns:TransportGUID>
            </hous:ApartmentHouseToUpdate>
           <hous:EntranceToCreate>
               <hous:EntranceNum>1</hous:EntranceNum>
               <ns:TransportGUID>${=java.util.UUID.randomUUID()}</ns:TransportGUID>
            </hous:EntranceToCreate>
           <hous:ResidentialPremises>
              <hous:ResidentialPremisesToCreate>
                 <hous:NoKNData>true</hous:NoKNData>
                  <hous:PremisesNum>1</hous:PremisesNum>
                  <hous:EntranceNum>1</hous:EntranceNum>
                  <hous:PremisesCharacteristic>
                     <ns:Code>1</ns:Code>
                     <ns:GUID>96a1ce61-b402-46c4-ac6e-34b8670480af</ns:GUID>
                 </hous:PremisesCharacteristic>
                  <hous:TotalArea>30</hous:TotalArea>
                  <ns:TransportGUID>${=java.util.UUID.randomUUID()}</ns:TransportGUID>
               </hous:ResidentialPremisesToCreate>
              <hous:LivingRoomToCreate>
                 <hous:NoKNData>true</hous:NoKNData>
                  <hous:RoomNumber>1</hous:RoomNumber>
                  <hous:Square>30</hous:Square>
                  <ns:TransportGUID>${=java.util.UUID.randomUUID()}</ns:TransportGUID>
               </hous:LivingRoomToCreate>
           </hous:ResidentialPremises>
         </hous:ApartmentHouse>
     </hous:importHouseRSORequest>
   </soapenv:Body>
</soapenv:Envelope>
1
0 / 0 / 0
Регистрация: 27.01.2016
Сообщений: 9
16.05.2016, 11:17
Цитата Сообщение от Anvano Посмотреть сообщение
А вы сначала сделайте exportHouseData для этого дома под тем же sender_id под которым пытаетесь делать importAccountData. И посмотрите вообще какие квартиры и помещения вам вернутся.
Далее, что передаёте в параметры: <hous:isUOAccount> и <hous:isRSOAccount>, если у вас РСО, то надо только второй оставлять....
Лицевой счет может быть создан в доме (<hous:FIASHouseGuid>) ИЛИ в помещении (<hous:PremisesGUID>) ИЛИ в комнате (<hous:LivingRoomGUID>). Может вы пытаетесь одновременно несколько GUID-ов ему скормить ?
Помещение есть, смотрел через веб-интерфейс (так же разбирал json запросы в вебе на предмет того, что происходит при создании договора и какие идентификтаоры передаются). exportHouseData падает с ошибкой нехватки атрибута ("EXP001000" Внутренняя ошибка), которого в wsdl нет.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ru.lanit.hcs.integration.common.exception.XmlValidationException: Line: 748. Column: 13. Message: cvc-complex-type.2.4.b: The content of element 'ns5:HouseManagementType' is not complete. One of '{"http://dom.gosuslugi.ru/schema/integration/8.7.0.7/":Code}' is expected.
 
    at ru.lanit.hcs.integration.common.spring.service.impl.SecureXmlServiceImpl.parseUntrustedXml(SecureXmlServiceImpl.java:53)
    at ru.lanit.hcs.integration.common.spring.service.impl.XmlServiceImpl.getBodyAsObject(XmlServiceImpl.java:250)
    at ru.lanit.hcs.integration.common.spring.mdp.OperationProcessorInvokerMDP.process(OperationProcessorInvokerMDP.java:356)
    at ru.lanit.hcs.integration.common.spring.mdp.OperationProcessorInvokerMDP.internalOnMessage(OperationProcessorInvokerMDP.java:173)
    at ru.lanit.hcs.integration.common.spring.mdp.OperationProcessorInvokerMDP.onMessage(OperationProcessorInvokerMDP.java:85)
    at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:685)
    at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:623)
    at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:591)
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:308)
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:246)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1142)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1134)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1031)
    at java.lang.Thread.run(Thread.java:745)
Параметры передаю все в соответствии с форматами.
XML
1
<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Header><Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">urn:importAccountData</Action><h:RequestHeader xmlns="http://dom.gosuslugi.ru/schema/integration/8.7.0.7/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:h="http://dom.gosuslugi.ru/schema/integration/8.7.0.7/"><Date>2016-05-16T11:03:53.4348011+05:00</Date><MessageGUID>b788268a-7a13-4063-bb5b-f0ba6dfee264</MessageGUID><SenderID>...</SenderID></h:RequestHeader></s:Header><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><importAccountRequest Id="signed-data-container" xmlns="http://dom.gosuslugi.ru/schema/integration/8.7.0.7/house-management/"><ds:Signature Id="xmldsig-9b9677f9-5944-4249-a6f6-9e75430a85fd" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">...</ds:Signature><Account><isRSOAccount>true</isRSOAccount><CreationDate>2001-01-01T00:00:00</CreationDate><TotalSquare>55.5</TotalSquare><Accommodation><PremisesGUID>531d28f5-5107-4ae3-b261-16ef0133aefb</PremisesGUID></Accommodation><PayerInfo /><TransportGUID xmlns="http://dom.gosuslugi.ru/schema/integration/8.7.0.7/">41f163e2-5575-4328-a61b-067188d30a77</TransportGUID><AccountNumber xmlns="http://dom.gosuslugi.ru/schema/integration/8.7.0.7/">72040284224</AccountNumber></Account></importAccountRequest></s:Body></s:Envelope>
0
6 / 6 / 0
Регистрация: 24.12.2015
Сообщений: 41
16.05.2016, 11:19
Цитата Сообщение от Anvano Посмотреть сообщение
Вот рабочий запрос
не рабочий, так как версия не верная в xml: 8.6.0.6
сейчас в перспективной версии 8.7.0.7

Добавлено через 1 минуту
Цитата Сообщение от Jinks Посмотреть сообщение
Помещение есть, смотрел через веб-интерфейс (так же разбирал json запросы в вебе на предмет того, что происходит при создании договора и какие идентификтаоры передаются). exportHouseData падает с ошибкой нехватки атрибута ("EXP001000" Внутренняя ошибка), которого в wsdl нет.
Ошибка такая есть. ждите, скоро поправят.
0
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 36
16.05.2016, 14:15
Для "importHouseRSO" ОКТМО для дома нужно заполнять или нет?
0
6 / 6 / 0
Регистрация: 24.12.2015
Сообщений: 41
16.05.2016, 15:00
VladimirGT, ОКТМО (обязательное для всех территорий, за исключением города и космодрома "Байконур"). Значение из ФИАС при наличии.
в схемах написано.
0
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 36
16.05.2016, 16:19
Dr_Elvis, Спасибо большое!!!
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
17.05.2016, 05:41
Цитата Сообщение от Jinks Посмотреть сообщение
'ns5:HouseManagementType' is not complete. One of '{"http://dom.gosuslugi.ru/schema/integration/8.7.0.7/":Code}' is expected
Jinks, Ну у тебя там кода справочника не хватает. Попробуй взять описание из другого запроса, например
<ns:Code>1</ns:Code>

и смотри полный формат в альбоме - стр. 731.
Мне бы ваши проблемы.

Добавлено через 9 минут
Ребята, кто-нибудь сейчас со студии подключается? Запросы от springjazzy нормально работают?
Проблема, блин. Начал осваивать классы, потихоньку, медленно но верно пёр к успеху, пока на любой реальный запрос, например, импорт объектов инфраструктуры не выдал ошибку СНИЛС владельца сертификата не совпадает с должностным лицом в ЛК. Написал в техподержку - решили через неделю - добавили снилс мне как у гендира.
Но тут меня поджидала облава - сертификат закончился настоящий и нужно перерегистрировать. Я отправил им - написали, что всё в порядке, а теперь выдаёт косяк, что certificate header is blank. Такая же ошибка появляется, если отправлять запрос не по HTTPS каналу на порт 46. В документации ланит советует добавлять отпечаток серта в header запроса - всё равно не проходит. У кого-нибудь было подобное после замены сертификата? Или что-то поменялось с начала мая?

Добавлено через 43 минуты
Milawin, Есть предложение поработать вместе. Вы же из РСО? Это очень сложный запрос - в нём много нюансов. Начинайте смотреть приложение альбома с 94 страницы - я попробую сгенерировать класс - так как мне тоже потом понадобится. У меня проблема сейчас с сертификатом - я Вам пришлю код - Вы пробуете - присылаете лог из Fiddler - смотрим дальше.

Добавлено через 1 час 55 минут
Вопрос к знатокам: ребята, как вы получаете FIAS код для объекта?
0
0 / 0 / 0
Регистрация: 27.01.2016
Сообщений: 9
17.05.2016, 06:32
Цитата Сообщение от umatkot Посмотреть сообщение
Jinks, Ну у тебя там кода справочника не хватает. Попробуй взять описание из другого запроса, например
<ns:Code>1</ns:Code>
Проблема в том, что для экспорта дома ссылка на справочник не требуется (нужен только FIAS код).

Цитата Сообщение от umatkot Посмотреть сообщение
Вопрос к знатокам: ребята, как вы получаете FIAS код для объекта?
У нас есть своя схема гео объектов, так же к нам в систему выгружен полный справочник fias и произведено сопоставление между ними.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
17.05.2016, 07:04
Цитата Сообщение от Jinks Посмотреть сообщение
У нас есть своя схема гео объектов, так же к нам в систему выгружен полный справочник fias и произведено сопоставление между ними
Повезло вам. Если сервис требует код - я бы попробовал всё-таки вставить. В формате тоже указано, что он не требуется? Мне кажется - нет. Вы как отсылаете запрос? Через SOAP или своими средствами(Студия, 1С, ещё какая-то система)?
Когда в студии я генерирую класс - там есть сгенерированное описание запросов из WSDL - все типы и параметры. При сверке с альбомом (точнее, его приложением), я узнаю какие поля нужны, а какие - нет. Когда работал сертификат - я методом тыка меняю параметры и по ошибкам ориентируюсь - чего мне не хватает. Так я сделал несколько запросов до проблемы. Сейчас я решил генерировать классы несмотря ни на что и потом уже играть в домино с перестановками методов и параметров. Поясню, через SOAP это делать несколько сложнее, чем через студию.

Добавлено через 8 минут
Цитата Сообщение от Jinks Посмотреть сообщение
Проблема в том, что для экспорта дома ссылка на справочник не требуется (нужен только FIAS код).
У них там опечаток валом в этом альбоме - вообще не понимаю, почему не сделать сервис в интернете с реальным справочником а крепить эти форматы в архивах на сайте? Такие деньги ушли на это, а методы допотопные используются. (Пример MSDN)
На странице 731 есть описание этого типа. Даже если представить на секунду, что код действительно не требуется, но сервис с ошибкой - значит нужно пихать код по требованию сервиса. И в альбоме аналогичная картина.

Добавлено через 8 минут
Цитата Сообщение от Jinks Посмотреть сообщение
Параметры передаю все в соответствии с форматами.
Точно запрос тот? Что-то я вообще не увидел HouseManagementType
0
0 / 0 / 0
Регистрация: 27.01.2016
Сообщений: 9
17.05.2016, 08:17
Цитата Сообщение от umatkot Посмотреть сообщение
Повезло вам. Если сервис требует код - я бы попробовал всё-таки вставить. В формате тоже указано, что он не требуется? Мне кажется - нет. Вы как отсылаете запрос? Через SOAP или своими средствами(Студия, 1С, ещё какая-то система)?
Когда в студии я генерирую класс - там есть сгенерированное описание запросов из WSDL - все типы и параметры. При сверке с альбомом (точнее, его приложением), я узнаю какие поля нужны, а какие - нет. Когда работал сертификат - я методом тыка меняю параметры и по ошибкам ориентируюсь - чего мне не хватает. Так я сделал несколько запросов до проблемы. Сейчас я решил генерировать классы несмотря ни на что и потом уже играть в домино с перестановками методов и параметров. Поясню, через SOAP это делать несколько сложнее, чем через студию.
Приложение на .NET. Прокси-классы сгенерированы студией и сверены с wsdl. Работа происходит через сгенерированные прокси-классы.

Цитата Сообщение от umatkot Посмотреть сообщение
У них там опечаток валом в этом альбоме - вообще не понимаю, почему не сделать сервис в интернете с реальным справочником а крепить эти форматы в архивах на сайте? Такие деньги ушли на это, а методы допотопные используются. (Пример MSDN)
На странице 731 есть описание этого типа. Даже если представить на секунду, что код действительно не требуется, но сервис с ошибкой - значит нужно пихать код по требованию сервиса. И в альбоме аналогичная картина.
Описание wsdl есть не только в архиве, как пример http://54.76.42.99:60046//ext-... ement?wsdl . Собственно с этого ендпоинта я и беру описание. Возможно, на тестовом стенде постоянно происходят какие-то изменения и wsdl не обновляется своевременно.

Цитата Сообщение от umatkot Посмотреть сообщение
Точно запрос тот? Что-то я вообще не увидел HouseManagementType
В этом то и проблема.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
17.05.2016, 08:57
Milawin, вот, смотри,
оказывается я пол дня потратил зря - некоторые параметры не требуются для обязаловки к заполнению.
Рабочий вариант должен быть следующим - остаётся узнать значение со справочника для часовой зоны, код фиас для дома и кадастровый номер, но кажись, он тоже может быть не обязательным.
Запрос во вложении.
Вложения
Тип файла: rar HouseManagement.rar (1.7 Кб, 70 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.05.2016, 08:57

.NET 4.x Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (2)
Начало темы здесь: https://www.cyberforum.ru/web-services-wcf/thread1615223.html umatkot, Да, к этому и пришел....а на дворе 1 июля ...

Интеграция с ГИС ЖКХ и подпись SOAP без Крипто .NET и stunnel
Решил создать отдельную тему, так как в теме Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4) - C# WCF уже можно заблудиться....

Soap, Java, Гис ЖКХ
Добрый день! Имеет ли кто опыт работы с soap в Java? Поставлена задача наладить работу с ГИС ЖКХ, До этого не работал с SOAP, почитал все...

1С и ГИС ЖКХ. Интеграция
Доброго дня, коллеги! Я думаю многие слышали о такой ГИС, как ЖКХ. Друзья, сталкивался ли кто нибудь с задачей интеграции с этой...

Интеграция с ГИС ЖКХ (ГЖ). 400 Bad request
Вводная: 1. C#. Классы proxy для работы с API генерятся утилитой SvcUtil.exe из wsdl-ек. 2. При срабатывании форматно-логического...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
420
Закрытая тема Создать тему
Новые блоги и статьи
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru