По просьбе разработчика ФГИС Сатурн публикую свои наработки для работы с 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"