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

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С: Отчеты по исполнению госконтрактов, расчетно-калькуляционные материалы и контроль операций для исполнения в срок в 1С: Бухгалтерия 3.0 и Управление Холдингом 3.2. Простая настройка и полное соответствие законодательству. Профессиональный консалтинг и регулярные обновления продукта.

44000 руб.

28.08.2020    389377    2589    137    

1107

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

42

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

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

55200 руб.

16.08.2019    94731    260    89    

153

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

147

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

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

828 руб.

15.12.2015    173086    887    370    

407

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

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

19200 руб.

14.10.2020    65005    397    103    

327

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

Внешняя обработка для инвентаризации кодов маркировки в системе "Честный знак". Позволяет быстро определить и списать коды маркировки проданного, испорченного, утраченного (полный перечень причин списания указан ниже)  товара, которые всё ещё числятся за организацией. Привести в соответствие остатки маркированного товара программы 1С и системы "Честного знака".

6540 руб.

09.01.2024    6961    91    21    

87

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

Работаете по контрактной схеме, сталкивались с проблемой, что в контракте жестко указаны наименование, цена, единица измерения товара. И не все готовы создавать новую номенклатуру под каждый контракт или менять наименование и единицу измерения для уже имеющейся. Тем более, бывает так, что контракт - это формальность. Контракт не описывает жесткие условия поставки, нужно соблюсти правильность в предоставлении документов. Данное решение позволит вам оперировать своей номенклатурой при оформлении реализаций по государственному контракту в УТ 11.5 и КА 2.5.11, в то же время выводить на печать документы, соответствующие данным контракта. Реализована выгрузка для сайта госзакупок (ЕИС) по 44-ФЗ.

60000 руб.

19.12.2022    13525    37    25    

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