Получение подписанного файла запроса к системе ФГИС ЗЕРНО, на языке C#, с использованием CryptoPro.NET (Sharpei)

22.05.23

Интеграция - Обмен с ГосИС

В решении предложена работающая процедура получения подписанного файла запроса к системе ФГИС ЗЕРНО, на языке C#, с использованием CryptoPro.NET (Sharpei). Пригодится для реализации процедур обмена с системой ФГИС Зерно, используя нестандартныеконфигурации 1С8, 1С77 или вообще любые другие системы. Реализует полный процесс трансформаций, получения кеша и подписи файла.

Сформировать любым "бизнес" приложением файл запроса в xml, например, для получения списка партий ЗЕРНА:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="urn://x-artefacts-mcx-gov-ru/fgiz-zerno/api/ws/types/1.0.3">
	<soapenv:Header/>
	<soapenv:Body>
		<ns:SendRequestRequest>
			<ns:MessageData Id="SIGNED_BY_CALLER">
				<ns:MessageID>a45468ed-c26c-4a5b-995d-b12b6364fb18</ns:MessageID>
				<ns:ReferenceMessageID>a45468ed-c26c-4a5b-995d-b12b6364fb18</ns:ReferenceMessageID>
				<ns:MessagePrimaryContent>
					<ns:RequestGetListLot status="SUBSCRIBED" xmlns:ns="urn://x-artefacts-mcx-gov-ru/fgiz-zerno/api/ws/lots/1.0.3" xmlns:ns1="urn://x-artefacts-mcx-gov-ru/fgiz-zerno/api/organizations/1.0.3">
						<ns:Paging pageNumber="0" pageLength="100"/>
					</ns:RequestGetListLot>
				</ns:MessagePrimaryContent>
			</ns:MessageData>
			<ns:InformationSystemSignature>
			</ns:InformationSystemSignature>
		</ns:SendRequestRequest>
	</soapenv:Body>
</soapenv:Envelope>

Файл может быть в любом "человекочитаемом виде", содержащим переносы, отступы и т.д.

В файле обязательно должен быть тег "<ns:MessageData Id="SIGNED_BY_CALLER">"

По нему мы определяем подписываемый блок.

В файле обязательно должен быть пустой блок, куда мы при помощи функции вставим подпись и всё, что требуется к ней

<ns:InformationSystemSignature>
</ns:InformationSystemSignature>

 

Это изначально файл запроса с тегом "SendRequestRequest".

Для получения сразу файла запроса результата (после того, как система приняла запрос), без дополнительных манипуляций, у функции есть параметр  "isResponse".

Если его установить в true, то мы получим подписанный текст файла запроса результата, типа "SendResponseRequest" (просто заменим теги до подписи в изначальном файле).

Код получения подписанного файла.

Используется CryptoPro.NET

using CryptoPro.Sharpei.Xml;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography.Xml;
using System.Xml;
		
static string getSignXmlFile(string textXmlFile, AsymmetricAlgorithm Key, X509Certificate Certificate, bool isResponse = false)
{

	if(isResponse) textXmlFile = textXmlFile.Replace("SendRequestRequest", "SendResponseRequest"); // Замена типа запроса

	
	XmlDocument doc = new XmlDocument(); // Создаем новый XML документ.
	doc.PreserveWhitespace = true; // Пробельные символы участвуют в вычислении подписи и должны быть сохранены для совместимости с другими реализациями.
	//doc.Load(new XmlTextReader(FileName)); // Читаем документ из файла.
	doc.LoadXml(textXmlFile); // Читаем документ из строки

	if (isResponse)
	{
		XmlNode MessagePrimaryContent = doc.SelectSingleNode("//*[local-name()='MessagePrimaryContent']");
		doc.SelectSingleNode("//*[local-name()='MessageData']").RemoveChild(MessagePrimaryContent);
	}

	SignedXml signedXml = new SignedXml(doc); // Создаем объект SignedXml по XML документу.
	signedXml.SigningKey = Key; // Добавляем ключ в SignedXml документ. 

	
	Reference reference = new Reference();
	reference.Uri = "#SIGNED_BY_CALLER"; // Создаем ссылку на node для подписи.

	// Проставляем алгоритм хэширования
	reference.DigestMethod = CPSignedXml.XmlDsigGost3411_2012_256Url; // CryptoPro.Sharpei.Xml

	// Добавляем transform для канонизации.
	var c14 = new XmlDsigExcC14NTransform();
	reference.AddTransform(c14);

	// Добавляем СМЭВ трансформ.
	// начиная с .NET 4.5.1 для проверки подписи, необходимо добавить этот трансформ в довернные:
	// signedXml.SafeCanonicalizationMethods.Add("urn://smev-gov-ru/xmldsig/transform");
	var smev = new XmlDsigSmevTransform(); // CryptoPro.Sharpei.Xml
	reference.AddTransform(smev);

	signedXml.AddReference(reference); // Добавляем ссылку на подписываемые данные

	KeyInfo keyInfo = new KeyInfo(); // Создаем объект KeyInfo.

	keyInfo.AddClause(new KeyInfoX509Data(Certificate)); // Добавляем сертификат в KeyInfo
	
	signedXml.KeyInfo = keyInfo; // Добавляем KeyInfo в SignedXml.

	// Алгоритм подписи берётся автоматически (из ключа)
	//signedXml.SignedInfo.SignatureMethod = CPSignedXml.XmlDsigGost3411_2012_256HMACUrl;
	signedXml.SignedInfo.CanonicalizationMethod = c14.Algorithm;

	signedXml.ComputeSignature(); // Вычисляем подпись.

	XmlElement xmlDigitalSignature = signedXml.GetXml(); // Получаем XML представление подписи и сохраняем его в отдельном node.

	doc.SelectSingleNode("//*[local-name()='InformationSystemSignature']").AppendChild(doc.ImportNode(xmlDigitalSignature, true));


	// При наличии стартовой XML декларации ее удаляем
	// (во избежание повторного сохранения)
	if (doc.FirstChild is XmlDeclaration)
	{
		doc.RemoveChild(doc.FirstChild);
	}

	/*
	// Сохраняем подписанный документ в файле.
	using (XmlTextWriter xmltw = new XmlTextWriter(SignedFileName, new UTF8Encoding(false)))
	{
		xmltw.WriteStartDocument();
		doc.WriteTo(xmltw);
	}
	*/

	// Сохраняем подписанный документ в строке и возвращаем
	using (var stringWriter = new StringWriter())
	using (var xmlTextWriter = XmlWriter.Create(stringWriter))
	{
		doc.WriteTo(xmlTextWriter);
		xmlTextWriter.Flush();
		return stringWriter.GetStringBuilder().ToString();
	}

}

 

ФГИС Зерно XML SendRequestRequest SMEV СМЕВ InformationSystemSignature KeyInfo XmlDsigGost3411_2012_256HMACUrl C# OKPD2 XmlDsigExcC14NTransform

См. также

Бюджетный учет Обмен с ГосИС Бухгалтер Пользователь Бухгалтерский учет 1С:Бухгалтерия 3.0 1С:Управление холдингом Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Управляйте учетной политикой раздельного учета ГОЗ в 1С:Бухгалтерия 3.0 ПРОФ/КОРП и УХ 3.2. Отчеты по исполнению госконтрактов, расчетно-калькуляционные материалы и контроль операций для исполнения в срок. Готовое расширение подходит для всех бухгалтеров и руководителей производства, помогая вести правильный учет по гособоронзаказу в соответствии 275-ФЗ. Профессиональный консалтинг и регулярные обновления продукта.

28.08.2020    313968    2154    vvmanannikov    132    

1009

Бюджетный учет Обмен с ГосИС Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Государственные, бюджетные структуры Россия Бухгалтерский учет Платные (руб)

Доработка конфигурации 1С:Бухгалтерия предприятия, редакция 3.0. реализована в виде расширения. Предназначена для ведения раздельного учета и автоматизации заполнения отчетности исполнения контрактов ГОЗ в конфигурациях 1С БП КОРП, ПРОФ, Базовая, БИТ.ФИНАНС.

55200 руб.

16.08.2019    92259    235    87    

141

SALE! 40%

Обмен с ГосИС Программист Бухгалтер Пользователь Платформа 1С v8.3 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Интеграция и синхронизация Честный Знак и 1C - полноценная обработка, которая манипулирует сотнями задач по ведению учета в системе мониторинга честный знак, особенности: такие как полная поддержка учета карточек в национальном каталоге (модерация, редактирование, подписание, получение информации), получение кодов маркировок в станции управления заказами "СУЗ Облако", удобная отправка и получение "УПД" через систему "ЭДОЛайт" из документов реализации или корректировки, так же существует механизм приема через ЭДОЛайт, отправка и получения таких документов как перемаркировка , списание, отгрузка и еще более 40 типов документов в ГИСМТ которые описаны ниже, моментальное сопоставление и внедрение в типовую конфигурацию которое обеспечивает ракетную мега скорость

18000 10800 руб.

28.03.2023    18474    120    24    

94

Бюджетный учет Обмен с ГосИС Бухгалтер Пользователь Бухгалтерский учет 1С:Управление производственным предприятием Государственные, бюджетные структуры Россия Бухгалтерский учет Платные (руб)

Для 1С: УПП 1.3 предлагаем Вашему вниманию подсистему "Раздельный учет результатов финансово-хозяйственной деятельности организаций, выполняющих государственный оборонный заказ (раздельный учет ГОЗ)". Ключевые возможности подсистемы: - Автоматическое заполнение регламентированного отчета «Исполнение контрактов ГОЗ»; - Расшифровка показателей отчета об исполнении контрактов ГОЗ с детализацией до документов; - Контроль хозяйственных операций на соответствие требованиям Постановления Правительства № 47; - Автоматизированный ввод начальных данных по контрактам, заключенным ранее даты начала использования подсистемы.

90000 руб.

25.09.2020    30821    42    10    

40

Оптовая торговля Розничная торговля Обмен с ГосИС Бухгалтер Платформа 1С v8.3 1С:Управление торговлей 10 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Россия Бухгалтерский учет Управленческий учет Акцизы Платные (руб)

Полнофункциональное расширение (ранее известное как Модуль 1С-ЕГАИС) для взаимодействия типовых конфигураций 1С и ЕГАИС, предоставляющее максимум возможностей по работе с УТМ. Получение и отправка ТТН, отправка акта о постановке на баланс и акта о списании. Получение остатков. Загрузка и сопоставление номенклатуры и контрагентов. Оправка в ЕГАИС отчетов о производстве и импорте.

8970 руб.

15.12.2015    171012    957    364    

401

ККМ Кассовые операции Розничная торговля Обмен с ГосИС Программист Бухгалтер Пользователь Бухгалтерский учет Оперативный учет Управляемые формы 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение конфигурации для УТ 11.5, КА 2.5 ,ERP 2.5 (Управляемые формы) позволяет выполнять печать кассовых чеков на одну ККМ 54-ФЗ с нескольких рабочих мест. НИКАКИХ НАСТРОЕК В РАЗРАБОТКЕ - ПОДКЛЮЧИЛ И ПЕЧАТАЙ. Если у вас несколько отделов и одна ККМ - печатайте на одной ККМ! Если у вас две ККМ и одна поломалась - печатайте на одной ККМ, пока ремонтируете другую!

5000 руб.

27.08.2018    122899    1036    586    

872

Регламентированный учет и отчетность Обмен с ГосИС ЭДО и ОФД Бухгалтер Пользователь Платформа 1С v8.3 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Оптовая торговля, дистрибуция, логистика Россия Управленческий учет Платные (руб)

Работаете по контрактной схеме, сталкивались с проблемой, что в контракте жестко указаны наименование, цена, единица измерения товара. И не все готовы создавать новую номенклатуру под каждый контракт или менять наименование и единицу измерения для уже имеющейся. Тем более, бывает так, что контракт - это формальность. Контракт не описывает жесткие условия поставки, нужно соблюсти правильность в предоставлении документов. Данное решение позволит вам оперировать своей номенклатурой при оформлении реализаций по государственному контракту в УТ 11.5 и КА 2.5.11, в то же время выводить на печать документы, соответствующие данным контракта. Реализована выгрузка для сайта госзакупок (ЕИС) по 44-ФЗ.

60000 руб.

19.12.2022    12220    34    20    

21

Обмен с ГосИС Программист Пользователь Платформа 1С v8.3 Управляемые формы Здравоохранение, медицина, стоматология Россия Платные (руб)

Конфигурация МИС "Регистратура ЕГИСЗ 1.8" предназначена для отправки медицинских,инструментальных , лабораторных случаев обслуживания , выписных эпикризовв формате CDA в Единую государственную информационную систему в сфере здравоохранения через N.3Health -официального оператора передачи данных в ЕГИСЗ. Может быть интегрирована в любую конфигурацию 1С на управляемых формах.

24000 руб.

25.08.2022    13300    25    12    

26
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 817 22.05.23 13:47 Сейчас в теме
Можно замутить это в 1С с помощью C# внутри 1С
2. don-do 29.05.23 12:17 Сейчас в теме
(1)
Можно собрать консольное приложение и запускать его с параметрами.
Еще посмотри готовый пример в телеге Зерно API.
Туда я выложил этот код, несколько доработав, подсматривая в други источники, вместо шарпея - LibCore.
ПС: C# не знаю
3. пользователь 29.01.24 09:12
Сообщение было скрыто модератором.
...
4. пользователь 31.01.24 11:53
Сообщение было скрыто модератором.
...
5. пользователь 31.01.24 13:17
Сообщение было скрыто модератором.
...
7. пользователь 31.01.24 14:35
Сообщение было скрыто модератором.
...
8. user2044289 31.01.24 14:41 Сейчас в теме
(4) Во вложении то, что у меня пока получилось для работы с ФГИС Зерно.
Прикрепленные файлы:
CryptoTest.exe
6. пользователь 31.01.24 14:18
Сообщение было скрыто модератором.
...
9. пользователь 31.01.24 14:46
Сообщение было скрыто модератором.
...
10. пользователь 31.01.24 14:55
Сообщение было скрыто модератором.
...
Оставьте свое сообщение