Добрый день. У кого есть опыт подписания передачи СНТ в ИС ЭСФ, прошу помочь. Пытаюсь интегрироваться с этой системой, используя сервис для аутентификации SessionService и сервис для работы с СНТ на SntWebService. Однако, при попытке передать СНТ получаю ошибку о том, что для указанного пользователя нет активных сессий. Последовательность действий выглядит следующим образом:
- Создаю запрос на отправку СНТ. Для каждого
<sntInfo>
формируется<sntBody>
и устанавливается значениеSntV1
элементу<version>
. - Для каждого
<sntInfo>
генерируется подпись и заполняются элементы<signature>
и<signatureType>
. Что именно нужно подписывать из документации не ясно, поэтому пробовал разные варианты: подпись содержимого<sntBody>
и всего элемента<sntInfo>
(без<signature>
и<signatureType>
). Подписывать пробовал и с использованиемSignedXml
изSystem.Security.Cryptography.Xml.dll
, и через сервер, предоставленный в составе SDK. Для подписи использую приватную часть ЭЦП. - Отправляю запрос на создание сессии. При этом используется логин, пароль и открытая часть ключа ЭЦП.
- Дополняю
<sntUploadRequest>
элементом<sessionId>
с полученным идентификатором сессии, а в<x509Certificate>
записываю публичную часть ключа ЭЦП. - Отправляю запрос на экспорт СНТ:
<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"></Action> </s:Header> <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <sntUploadRequest xmlns="v1.snt"> <sessionId xmlns="">bd40a425ced34b7c9f251207180528af-710720401423--ENTREPRENEUR</sessionId> <sntInfoList xmlns=""> <sntInfo> <sntBody><q1:snt xmlns:q1="v1.snt"><date>2021-11-15</date><number>KZPO00011653</number><shippingDate>21.12.2020</shippingDate><sntType>PRIMARY_SNT</sntType><consignee><countryCode>KZ</countryCode><name>Тестовый пользователь</name><nonResident>false</nonResident><tin>123456789011</tin></consignee><consignor><countryCode>RU</countryCode><name>Грузоотправитель</name><nonResident>true</nonResident></consignor><contract><date>21.12.2020</date><isContract>true</isContract><number>11458521/001</number></contract><currencyCode>RUB</currencyCode><currencyRate>5.67</currencyRate><customer><name>Тестовый пользователь</name><tin>123456789011</tin><actualAddress>Астана, ул. Туркестан 8</actualAddress><countryCode>KZ</countryCode><nonResident>false</nonResident><registerCountryCode>KZ</registerCountryCode><storeId>1417</storeId></customer><productSet><totalExciseAmount>0</totalExciseAmount><totalNdsAmount>89429.76</totalNdsAmount><totalPriceWithTax>834677.76</totalPriceWithTax><totalPriceWithoutTax>745248</totalPriceWithoutTax><products><product><ndsAmount>89429.76</ndsAmount><ndsRate>12</ndsRate><priceWithTax>834677.76</priceWithTax><priceWithoutTax>745248</priceWithoutTax><productNumber>1</productNumber><tnvedCode>4418740000</tnvedCode><truOriginCode>2</truOriginCode><measureUnitCode>778</measureUnitCode><price>1242.08</price><productName>Паркет Tarkett Дуб</productName><quantity>600</quantity></product></products></productSet><seller><name>Поставщик</name><actualAddress>Россия, г. Омск, пр. Победы 28</actualAddress><countryCode>RU</countryCode><nonResident>true</nonResident><registerCountryCode>RU</registerCountryCode></seller><shippingInfo><carriageNumber>17, 18</carriageNumber><nonResident>false</nonResident><transportTypes><transportType>RAILWAY</transportType></transportTypes></shippingInfo><sntImport><importType>IMPORT</importType></sntImport></q1:snt></sntBody> <version>SntV1</version> <signature>eiV1JcdkwxvHl3tc48/W1Og1ZoM9JQAjPl2u1kJnNig=vjfap6N1bXPYBebDlxBIp/PQC0Xjpc/+Dbl7Q2J0ZPDjQmF5q//MHFnRDSEdAzPvhpi/Ly/Nj2DiW213cLHM455uYStHs1+bess2RSl+nKi9gC5PFZsMSVIulVSqeKJRZfz6MSNW94icsTX3T0WTEXyOh5cHMhOqEPhcm0KZEC+35vTNLVtGi3uvrKJgwsi0tesXIeI0XYzzirxo+hqUkiqmaFOv611ME8LqqzooWm16wfz2uJfuN1p4+vIkGoU1bta0CGEegQWWtnSWLBw8TWFzMvPHKemLtj1cOBTqI5dP0fGZdjcXWgigcasFe6pB/xq9R6aQGqykgSUPSna2qQ==</signature> <signatureType>OPERATOR</signatureType> </sntInfo> </sntInfoList> <x509Certificate xmlns="">MIIGaDCCBFCgAwIBAgIUUKodyBYpi7M+ns9EnfNWXY3kUAYwDQYJKoZIhvcNAQELBQAwUjELMAkG A1UEBhMCS1oxQzBBBgNVBAMMOtKw0JvQotCi0KvSmiDQmtCj05jQm9CQ0J3QlNCr0KDQo9Co0Ksg 0J7QoNCi0JDQm9Cr0pogKFJTQSkwHhcNMjAxMjIyMDU1NDUxWhcNMjExMjIyMDU1NDUxWjCBqjEm MCQGA1UEAwwd0JPQntCg0KjQldCd0JjQndCQINCV0JvQldCd0JAxGzAZBgNVBAQMEtCT0J7QoNCo 0JXQndCY0J3QkDEYMBYGA1UEBRMPSUlONzEwNzIwNDAxNDIzMQswCQYDVQQGEwJLWjEdMBsGA1UE KgwU0JLQmNCa0KLQntCg0J7QktCd0JAxHTAbBgkqhkiG9w0BCQEWDlNDLUlQRkBNQUlMLlJVMIIB IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7096cSJ4/lnOSSyLsFuiBP8KybjP86HBNNZw 95dhACZGpH3eOkGIdX5GfvfcCnwW6gvCIuANVJmI95iOEbPYv5cs+p1ydcQ9DrpJfFZ1iDW/F7A1 B8vo6Xg2rGSGb9mMJLb853aJ1HVatdhDekwP7fCG0TlrAVlbyJNgSujNO45WnPsMKnIQmene7ef5 hcKi1TlnHWEYinib/jo95b5DiWm9KjcHDjDawxTbbxGl5wV7IWNMiGfkOkd6NcUgoJlyMNx8MJ4e Go+g9DSfzeY57+1CzymCN6F7HA3uY3jaEe03Vf9ZEQT7rRIWpfFM3gc4tiokgZlXLSKh+CM6GICt 8QIDAQABo4IB2zCCAdcwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggqgw4D AwQBATAPBgNVHSMECDAGgARbanQRMB0GA1UdDgQWBBSyAENNxWyHg31aC68vzYmAcMDApTBeBgNV HSAEVzBVMFMGByqDDgMDAgQwSDAhBggrBgEFBQcCARYVaHR0cDovL3BraS5nb3Yua3ovY3BzMCMG CCsGAQUFBwICMBcMFWh0dHA6Ly9wa2kuZ292Lmt6L2NwczBWBgNVHR8ETzBNMEugSaBHhiFodHRw Oi8vY3JsLnBraS5nb3Yua3ovbmNhX3JzYS5jcmyGImh0dHA6Ly9jcmwxLnBraS5nb3Yua3ovbmNh X3JzYS5jcmwwWgYDVR0uBFMwUTBPoE2gS4YjaHR0cDovL2NybC5wa2kuZ292Lmt6L25jYV9kX3Jz YS5jcmyGJGh0dHA6Ly9jcmwxLnBraS5nb3Yua3ovbmNhX2RfcnNhLmNybDBiBggrBgEFBQcBAQRW MFQwLgYIKwYBBQUHMAKGImh0dHA6Ly9wa2kuZ292Lmt6L2NlcnQvbmNhX3JzYS5jZXIwIgYIKwYB BQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5nb3Yua3owDQYJKoZIhvcNAQELBQADggIBAExpcJCZEjqv Q5BCaPKfVtozY5CHpj5mSyBjgu9YVqh5mfom+y50M4jvdRdNKBa2CkpCaJ7STuWUpHLemxv848LP kDxA66fEEwQTW+E88x8qrmHDhxt2dfGPDy6nHQxFT6d/KcRW0nYr06xyNfgS8KA2n/uTU7gy4fzh rsaJ/1DwD6xLTqHIgbMkKVFe5kpf+iacAVm8SucL4opZfWU4P0k35b+AEptl4R1CM3fgbDmYy3rL ijU3rrkZ8VJ3R/JLgg7IzvSMzIhsaoRRK3Z5JMdPCRlpKJb845RpwSd3cVoLZP+dasBWHsQ8sOVa udwusI7y22ciZdFvpFjRqcJ8nA+eJMg/2zOqhj5yy8PQTTd1v4OGmaFYxopjpxnDfDBO3FVH8yfZ ZjTN6MNeGFMlr2reQxpSA3CUOrej4A6oCjBg0E7mw2vnUeQDrwKGFHTTllrol8tvGStV+6fom8EN Qgi1iDL10ejDHng9NlsIP8Zc612bCzY0Q4N9Nv7cZE5/Vy0BXb5phjO8dn17dhjs/TnUb/76XChT XM+e2EOP5Y+2cFCWVtHMcre+anJHJw++K6w8LDUQVsaiMRtspAIyO8nMnHaOiZp4HdRoEPz81itz PHbuJQIVrf/5T+cBJA3rtoTNgZqVQ6/Hqr2FdevkwJeXA992tyIXbhKPGdOuIx97 </x509Certificate> </sntUploadRequest> </s:Body> </s:Envelope>
- Получаю ошибку о том, что для пользователя нет открытых сессий:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <s:Header xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" /> <soap:Body> <soap:Fault> <faultcode>soap:Server</faultcode> <faultstring>No open session associated with user.</faultstring> <detail> <ns3:sessionClosedException xmlns:snt="snt" xmlns:ns3="v1.snt"> <description>No open session associated with user.</description> </ns3:sessionClosedException> </detail> </soap:Fault> </soap:Body> </soap:Envelope>
- Отправляю запрос статуса той же сессии.
- Получаю ответ, что сессия активна:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <s:Header xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" /> <soap:Body> <ns2:currentSessionStatusResponse xmlns:ns2="esf"> <status>OK</status> </ns2:currentSessionStatusResponse> </soap:Body> </soap:Envelope>
То есть, несмотря на то, что сессия активна, она не ассоциируется с пользователем, чей сертификат приложен к запросу на экспорт СНТ. Из сообщения об ошибке непонятно, в чём именно проблема: в ключах, алгоритме подписи, каких-то заголовках и т.п. Кто с таким сталкивался? Очень нужна помощь.