Получение подписанного файла запроса к системе ФГИС ЗЕРНО, на языке 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С v8.3 1С:Бухгалтерия 3.0 1С:Управление холдингом Химическая промышленность Государственные, бюджетные структуры Электротехника и микроэлектроника Машиностроение и приборостроение Металлургическая промышленность Россия Бухгалтерский учет Бюджетный учет Платные (руб)

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

30000 руб.

28.08.2020    422937    2764    138    

1165

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

Автоматизация учета ЕГАИС в 1С для оптовой торговли, производства и импорта алкогольной продукции. Получение и отправка ТТН, отправка акта о постановке на баланс и акта о списании. Получение остатков. Загрузка и сопоставление номенклатуры и контрагентов. Оправка в ЕГАИС отчетов о производстве и импорте.

828 руб.

15.12.2015    175349    1139    372    

409

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

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

55200 руб.

16.08.2019    96716    268    91    

159

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

Решение создано для помощи разработчикам, интеграторам и другим заинтересованным лицам по настройке системы маркировки обуви, одежды, лекарств, табака, фото, молока, духов(парфюма), питьевой воды, велосипедов и шин. Задавайте вопросы по работе с ЦРПТ, GS1, ЭДО, Национальным каталогом, накоплен опыт и знания по данным темам.

24000 руб.

18.03.2019    115104    35    115    

185

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

Обработка для обмена платежными документами в формате xml для системы Федерального казначейства "Электронный бюджет" из конфигураций 1С. Поставляется для БП 3.0 Работа только с контрагентами. Сайт "Электронного Бюджета": https://www.budget.gov.ru/

19200 руб.

14.10.2020    67654    391    105    

336

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

Интеграция для работы 1С с ГИИС ДМДК. Государственная интегрированная информационная система в сфере контроля за оборотом драгоценных металлов, драгоценных камней и изделий из них на всех этапах этого оборота.

65000 руб.

12.04.2022    21573    171    34    

43

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

Автоматический обмен данными с системой ФГИС Меркурий из 1С через ВетИС API: загрузка данных по хозяйствующим субъектам, предприятиям; типов, групп, видов, наименований продукции, сопоставление данных и запись их в базу данных; создание на основании расходных документов транспортных партий, отправка на сервер, печать полученных ветеринарных свидетельств, запрос остатков складского журнала, проведение инвентаризаций, оформление производственных партий.

11500 руб.

08.12.2017    108522    292    110    

148

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

Обработка для выгрузки платежных поручений из конфигураций 1С:БП 3.0 и ERP/КА в банк Департамента финансов г. Москвы. Поддерживается выгрузка в текстовом и XML-форматах.

19200 руб.

15.06.2020    23813    77    42    

52
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 925 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
Сообщение было скрыто модератором.
...
Оставьте свое сообщение