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

Управляйте учетной политикой раздельного ведения затрат по контракту ГОЗ с подсистемой для 1С:Бухгалтерия. Отчеты по контрактам и контроль операций для исполнения в срок по 275-ФЗ. Минимальные требования: Версия платформы 1С: Предприятие 8.3 – 8.3.23 Версия конфигурации 1С: Бухгалтерия – 3.0.150.39 или выше.

28.08.2020    202019    1625    vvmanannikov    132    

831

Гособоронзаказ: учет и отчетность БП3.0 КОРП + ПРОФ + БИТ.ФИНАНС

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

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

30000 руб.

16.08.2019    88476    213    85    

127

ЕГАИС++. Опт, производство, импорт

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

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

8970 руб.

15.12.2015    166722    704    362    

391

SALE! 40%

Обмен 1С с Честным Знаком для УТ11, УНФ, КА2, ERP, Розница: Расширение для работы с СУЗ, ГИС МТ, ЦРПТ

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

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

18000 10800 руб.

28.03.2023    10435    38    9    

39

Обмен с системами Казначейства: Электронный бюджет

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

Обработка для обмена платежными документами в формате xml для системы Федерального казначейства "Электронный бюджет" из конфигураций 1С. Поставляется в двух вариантах для БП 3.0 и КА 2.х/ERP 2.х. Работа только с контрагентами.

15000 руб.

14.10.2020    59194    350    101    

279

Гособоронзаказ в 1С: УПП 1.3

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

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

90000 руб.

25.09.2020    29045    33    9    

36

Обмен с системой ФГИС Зерно через API для любых конфигураций (универсальная подсистема ХамелеонЗерно)

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

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

124800 руб.

27.06.2023    3102    20    0    

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