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

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

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

30000 руб.

28.08.2020    457556    2860    140    

1186

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

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

22800 руб.

27.06.2023    6205    37    2    

20

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

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

8970 руб.

15.12.2015    176727    1152    374    

412

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

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

55200 руб.

16.08.2019    97653    272    91    

161

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

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

19200 руб.

14.10.2020    69140    403    105    

340

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

43

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

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

24000 руб.

18.03.2019    116039    36    115    

186
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. lalex23 160 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 160 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с. Я добавлял доп обработчик.
4. azrail 17.06.25 10:22 Сейчас в теме
Доброго дня!
С 17 февраля 2025 года вход в личный кабинет ФГИС «Сатурн» возможен только через авторизацию «Госуслуг» (ЕСИА), вход по логину и паролю больше не предусмотрен.

Изменен сервис API по работе с Сатурном.

Как сейчас справляются с вводом данных? Подскажите, может есть какие-то рабочие механизмы?
Для отправки сообщения требуется регистрация/авторизация