Получение подписанного файла запроса к системе ФГИС ЗЕРНО, на языке 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    439743    2815    140    

1175

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

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

55200 руб.

16.08.2019    97149    273    91    

161

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

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

828 руб.

15.12.2015    176047    1148    372    

412

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

Универсальная конфигурация ХамелеонЗерно для взаимодействия с системой ФГИС Зерно (тестовый+рабочий контур) может использоваться для интеграции в любую конфигурацию на базе 1С, версии ПРОФ и выше. Работа через API 1.0.7 и на API 1.0.8. Для удобства реализован общий интерфейс в виде обработки, схожей с интерфейсом ФГИС Зерно, но возможностей гораздо больше, т.к. при интеграции в Вашу учетную систему, можно на основании Ваших справочников и документов, создавать соответствующие документы и справочники в системе ФГИС Зерно и наоборот.

22800 руб.

27.06.2023    5956    34    2    

20

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

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

19200 руб.

14.10.2020    68585    402    105    

338

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

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

24000 руб.

18.03.2019    115619    35    115    

186

Обмен с ГосИС Бухгалтер Пользователь 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    21877    174    34    

44

Оптовая торговля Производство готовой продукции (работ, услуг) Обмен с ГосИС Программист Бухгалтер 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    109086    292    110    

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