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

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    366492    2476    137    

1083

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

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

55200 руб.

16.08.2019    93883    255    89    

149

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

38

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

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

828 руб.

15.12.2015    172500    863    370    

406

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

147

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

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

19200 руб.

14.10.2020    64280    390    103    

322

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

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

6540 руб.

09.01.2024    6098    81    21    

81

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

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

6000 руб.

27.06.2023    5021    20    2    

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