ФГИС Сатурн. Интерфейс авторизации

20.04.23

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

Процедуры авторизации для API ФГИС Сатурн.

По просьбе разработчика ФГИС Сатурн публикую свои наработки для работы с API из 1С.

#Область ПрограммныйИнтерфейсФГИССатурн

//Преобразует текст формата JSON в значение типа "Структура"
// Функция - JSONВСтруктуру
//  
// Параметры:
//  ТекстJSON	 - Строка	 - строка с текстом формата JSON
// 
// Возвращаемое значение:
//  Структура - структура с данными
//
Функция JSONВСтруктуру(ТекстJSON) Экспорт
    ЧтениеJSON = Новый ЧтениеJSON();
    ЧтениеJSON.УстановитьСтроку(ТекстJSON);
    Структура = ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
    Возврат Структура;
КонецФункции 

//Преобразует значение типа "Структура" в текст формата JSON
// Функция - Структуру ВJSON
//
// Параметры:
//  СтруктураНаОтправку	 - Структура	 - структура с данными
// 
// Возвращаемое значение:
//  Строка - текст формата JSON
//
Функция СтруктуруВJSON(СтруктураНаОтправку) Экспорт
	МояЗаписьJSON = Новый ЗаписьJSON;
	МояЗаписьJSON.УстановитьСтроку();
	
	ЗаписатьJSON(МояЗаписьJSON, СтруктураНаОтправку);
	
	Тело = МояЗаписьJSON.Закрыть();
	Возврат Тело;
КонецФункции   

//Возвращает ид сессии в формати ФГИС Сатурн
// Функция - Сгенерировать ид сессии
//
// Параметры:
//  salt - Строка	 - строка для генерации ид сессии полученная от апи авторизации
//  Ключ - Строка	 - ключ доступа к АПИ
// 
// Возвращаемое значение:
// Строка  - ид сессии в формати ФГИС Сатурн
//
Функция СгенерироватьИдСессии(salt, Ключ)
	
	КлючИСессия = salt + "." + Ключ;
	
	Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256);
	
	ДДКлючИСессия = ПолучитьДвоичныеДанныеИзСтроки(КлючИСессия);
	
	Хеширование.Добавить(ДДКлючИСессия);
	
	ДдХеш = Хеширование.ХешСумма;
	
	Возврат "SEAPISID:" + НРег(ПолучитьHexСтрокуИзДвоичныхДанных(ДдХеш));
	
КонецФункции

//Выполняет первичную авторизацию в апи ФГИС Сатурн
// Процедура - Авторизация ФГИССатурн
//
// Параметры:
//  ПараметрыПроцедуры	 - Структура	 - Структура с параметрами подключения. Логин - имя пользователя для соединения,
//  Пароль - пароль для соединения, Домен - домен пользователя, Сервер - адрес сервера ФГИС Сатурн,
//  ЛогинФГИС - логин пользователя ФГИС Сатурн, Ключ - ключ доступа к АПИ.
//  При успешном выполнении добавляет в данную структуру поле ИдСессии - ид сессии в формати ФГИС Сатурн
//  При ошибке добавляет поле Ошибка - истина, ОписаниеОшибки - строка
Процедура АвторизацияФГИССатурн(ПараметрыПроцедуры)
	
	Соединение = Новый HTTPСоединение(ПараметрыПроцедуры.Сервер, 443, ПараметрыПроцедуры.Логин, ПараметрыПроцедуры.Пароль,,, Новый ЗащищенноеСоединениеOpenSSL); //TODO С авторизацией разгрестись
	
	Запрос = Новый HTTPЗапрос("probeInnerArm/innerArm/seapiAuth");
	Запрос.Заголовки.Вставить("Content-type", "application/json");
		
	СтруктураПараметров = Новый Структура; 
	СтруктураПараметров.Вставить("op", "startAuth");  //Команда "Начало авторизации"
	СтруктураПараметров.Вставить("login", ПараметрыПроцедуры.ЛогинФГИС);
	СтруктураПараметров.Вставить("domain", ПараметрыПроцедуры.Домен); 
	
	Тело = СтруктуруВJSON(СтруктураПараметров);
	
	Запрос.УстановитьТелоИзСтроки(Тело);
	
	Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос); 
	
	Если Ответ.КодСостояния <> 200 Тогда 
		ПараметрыПроцедуры.Вставить("Ошибка", Истина);
		ПараметрыПроцедуры.Вставить("ОписаниеОшибки", Ответ.ПолучитьТелоКакСтроку());
		Возврат;
	КонецЕсли;
	
	СтруктураОтвета = JSONВСтруктуру(Ответ.ПолучитьТелоКакСтроку());
	
	Если СтруктураОтвета.resCode <> 200 Тогда
		ПараметрыПроцедуры.Вставить("Ошибка", Истина);
		ПараметрыПроцедуры.Вставить("ОписаниеОшибки", СтруктураОтвета.resMsg);
		Возврат;	                                                          
	КонецЕсли;
		
	ИдСессии = СгенерироватьИдСессии(СтруктураОтвета.resData.salt, ПараметрыПроцедуры.Ключ);           
	
	ПараметрыПроцедуры.Вставить("ИдСессии", ИдСессии);	
	
КонецПроцедуры  

Процедура ПодтвердитьИдСессии(ПараметрыПроцедуры) 
	
	Соединение = Новый HTTPСоединение(ПараметрыПроцедуры.Сервер, 443, ПараметрыПроцедуры.Логин, ПараметрыПроцедуры.Пароль,,, Новый ЗащищенноеСоединениеOpenSSL); //TODO С авторизацией разгрестись
	
	Запрос = Новый HTTPЗапрос("probeInnerArm/innerArm/seapiAuth");
	Запрос.Заголовки.Вставить("Content-type", "application/json");
	
	СтруктураПараметров = Новый Структура; 
	СтруктураПараметров.Вставить("op", "approveSID"); //Команда "Подтвердить авторизацию"
	СтруктураПараметров.Вставить("login", ПараметрыПроцедуры.ЛогинФГИС);
	СтруктураПараметров.Вставить("domain", ПараметрыПроцедуры.Домен);
	СтруктураПараметров.Вставить("sid", ПараметрыПроцедуры.ИдСессии);
	
	Тело = СтруктуруВJSON(СтруктураПараметров);
	
	Запрос.УстановитьТелоИзСтроки(Тело);
	
	Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
	
	Если Ответ.КодСостояния <> 200 Тогда 
		ПараметрыПроцедуры.Вставить("Ошибка", Истина);
		ПараметрыПроцедуры.Вставить("ОписаниеОшибки", Ответ.ПолучитьТелоКакСтроку());
		Возврат;
	КонецЕсли; 
	
	СтруктураОтвета = JSONВСтруктуру(Ответ.ПолучитьТелоКакСтроку());
	
	Если СтруктураОтвета.resCode <> 202 Тогда
		ПараметрыПроцедуры.Вставить("Ошибка", Истина);
		ПараметрыПроцедуры.Вставить("ОписаниеОшибки", СтруктураОтвета.resMsg);
		Возврат;	                                                          
	КонецЕсли; 
	
	ПараметрыПроцедуры.Вставить("СессияВалиднаДо", СтруктураОтвета.resData.validTo);
	
КонецПроцедуры 

Процедура ЗакрытьСессию(ПараметрыПроцедуры)
	
	Соединение = Новый HTTPСоединение(ПараметрыПроцедуры.Сервер, 443, ПараметрыПроцедуры.Логин, ПараметрыПроцедуры.Пароль,,, Новый ЗащищенноеСоединениеOpenSSL); //TODO С авторизацией разгрестись
	
	Запрос = Новый HTTPЗапрос("probeInnerArm/innerArm/seapiAuth");
	Запрос.Заголовки.Вставить("Content-type", "application/json");
	
	СтруктураПараметров = Новый Структура; 
	
	СтруктураПараметров.Вставить("op", "closeSession"); //Команда закрыть сессию
	СтруктураПараметров.Вставить("login", ПараметрыПроцедуры.ЛогинФГИС);
	СтруктураПараметров.Вставить("domain", ПараметрыПроцедуры.Домен);
	СтруктураПараметров.Вставить("sid", ПараметрыПроцедуры.ИдСессии);	
	
КонецПроцедуры


#КонецОбласти

Для обращения к командам API требуется создать ИД сессии и передавать его в теле запроса.

Сначала вызываем процедуру АвторизацияФГИССатурн.

В нее передаем структуру со следующими параметрами:

Сервер - адрес сервера (демо версия апи - api-demo.fgis-saturn.ru, боевой - api1.fgis-saturn.ru/gate1)

Логин - логин пользователя системы для доступа к соединению (не уточнял требуется ли в боевом варианте, для тестовой среды - "admin")

Пароль - пароль пользователя системы для доступа к соединению (не уточнял требуется ли в боевом варианте, для тестовой среды - "qazwsx")

ЛогинФГИС - логин пользователя системы.

Домен - домен пользователя системы.

В случае успешного выполнения - процедура добавит параметр ИдСессии в переданную в нее структуру.

Далее вызываем процедуру ПодтвердитьИдСессии.

В нее можно передать ранее созданную структуру ПараметрыПроцедуры с параметром ИдСессии полученным из предыдущего вызова.

В случае успешного выполнения - процедура добавит/обновит параметр СессияВалиднаДо.

Если требуется держать сессию дольше чем по дату указанную в этом параметре, процедуру следует вызвать повторно.

Для закрытия сессии вызываем процедуру ЗакрытьСессию.

В нее можно передать ранее созданную структуру ПараметрыПроцедуры с параметром ИдСессии полученным из предыдущего вызова.

В случае ошибок - все процедуры добавляют в переданную структуру параметры Ошибка = Истина и ОписаниеОшибки - с текстовым описанием ошибки.

UPD: Данный код работоспособен на тестовой среде. Для продуктивной среды следует заменить в урл хттп запросов "probeInnerArm/innerArm" на "gate1"

ФГИС Сатурн

См. также

Раздельный учет по гособоронзаказу (ГОЗ) - Подсистема для 1С:Бухгалтерии 3.0 ПРОФ и КОРП

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

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

28.08.2020    202307    1628    vvmanannikov    132    

832

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

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

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

30000 руб.

16.08.2019    88547    210    85    

127

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

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

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

8970 руб.

15.12.2015    166866    706    362    

391

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

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

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

18000 руб.

28.03.2023    10473    38    9    

40

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

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

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

15000 руб.

14.10.2020    59271    351    101    

280

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

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

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

90000 руб.

25.09.2020    29076    33    9    

36

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

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

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

124800 руб.

27.06.2023    3110    20    0    

8
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. lalex23 159 14.06.23 12:49 Сейчас в теме
Есть подозрение, что проблема на моей стороне, но 1С:Предприятие 8.3 (8.3.15.1747)
Код ошибки: -400
Сообщение ошибки: ERR:400 Bad Request
Описание ошибки: запрос не распознан
Тело запроса: {
"op": "startAuth",
"login": "ivanov_ni_220628",
"domain": "vetis"
}
что может быть не так? сервис авторизации в настоящий момент работает, простая ссылка
https://api-demo.fgis-saturn.ru/probeInnerArm/innerArm/seapiAuth?op=startAuth&login=ivanov_ni_220628&domain=vetis
выдаёт результат
{"resCode":200,"resMsg":"OK:200 ","resDescription":"Ожидается генерации ключа сессии.","resData":{"salt":"8fF4d6P8ie"}}
2. lalex23 159 14.06.23 13:16 Сейчас в теме
(1) победил строкой:
Запрос.УстановитьТелоИзСтроки(Тело, "UTF-8", ИспользованиеByteOrderMark.НеИспользовать);
не один сторонний веб-сервис ворОтит нос от BOM-символов, что вкрячивает в текст запроса 1С
3. EliasShy 48 14.06.23 15:33 Сейчас в теме
(2) На 8.3.19 и 8.3.21 таким проблем не было.

В приложенном примере не обошли проблему с датой: как ее отдает Сатурн и как ее видит 1с. Я добавлял доп обработчик.
Оставьте свое сообщение