#Область ОбработчикиСобытий // Обработчик метода GET /version // Функция ВерсияПолучить(Запрос) Ответ = Новый HTTPСервисОтвет(200); Данные = Новый Структура; Данные.Вставить("version", ОплатаСервиса.ВерсияИнтерфейса()); ОплатаСервисаСлужебный.ДобавитьЗаголовкиДанных(Ответ); Ответ.УстановитьТелоИзСтроки(ОплатаСервисаСлужебный.СтрокаJSON(Данные)); ОплатаСервисаСлужебный.ЛогироватьHTTPЗапрос(Запрос, Ответ); Возврат Ответ; КонецФункции // Обработчик метода POST /setup // Функция УстановитьНастройкиДобавить(Запрос) Попытка Данные = ОплатаСервисаСлужебный.ДанныеJSON(Запрос.ПолучитьТелоКакСтроку()); СостояниеЗадания = ШаблонСостоянияЗадания(); ОбязательныеСвойства = СтрРазделить("version,url,login,password,subscriber",","); ТекстОшибки = ""; Если Не ПроверитьЗаполнение(Данные, ОбязательныеСвойства, ТекстОшибки) Тогда Ответ = ОтветОшибка(10400, ТекстОшибки); Возврат Ответ; КонецЕсли; Константы.ИспользоватьОплатуСервиса.Установить(Истина); Константы.АдресСервисаФреш.Установить(Данные.url); Константы.ИмяПользователяУчетнойСистемы.Установить(Данные.login); ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ОплатаСервисаСлужебный.ВладелецПароляАвторизацииВУчетнойСистеме(), Данные.password); ТекущийПользователь = Пользователи.ТекущийПользователь(); ПрограммныйИнтерфейсСервисаСлужебный.ДобавитьЗаписьАвторизацииВСервисе( ТекущийПользователь, Данные.login, Данные.password, Данные.subscriber); Параметры = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор()); Параметры.НаименованиеФоновогоЗадания = НСтр("ru = 'Установка настроек оплаты сервиса'"); Параметры.ОжидатьЗавершение = 1; ПараметрыВыполнения = ДлительныеОперации.ВыполнитьПроцедуру( Параметры, "ОплатаСервисаСлужебный.УстановитьНастройкиОплатыСервиса", Данные.subscriber); СостояниеЗадания = СостояниеЗаданияДляОтвета(ПараметрыВыполнения); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ТекстОшибки = СтрШаблон(НСтр("ru = 'Не удалось установить настройки по причине: %1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); Ответ = ОтветОшибка(10400, ТекстОшибки); ОплатаСервисаСлужебный.ЛогироватьHTTPЗапрос(Запрос, Ответ); ЗаписьЖурналаРегистрации(ОплатаСервисаСлужебный.СобытиеЖурналаРегистрации(НСтр("ru = 'Ошибка данных'")), УровеньЖурналаРегистрации.Ошибка, Метаданные.HTTPСервисы.Биллинг, , ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); Возврат Ответ; КонецПопытки; Ответ = Новый HTTPСервисОтвет(200); ДанныеОтвета = ОплатаСервиса.ШаблонДанныхОтвета(); ДанныеОтвета.Вставить("tariff_loading_supported", ОплатаСервиса.ПоддерживаетсяЗагрузкаТарифов()); ДанныеОтвета.Вставить("tariff_loading_job", СостояниеЗадания); // обратная совместимость. ДанныеОтвета.Вставить("setup_job", СостояниеЗадания); ОплатаСервисаСлужебный.ДобавитьЗаголовкиДанных(Ответ); Ответ.УстановитьТелоИзСтроки(ОплатаСервисаСлужебный.СтрокаJSON(ДанныеОтвета)); ОплатаСервисаСлужебный.ЛогироватьHTTPЗапрос(Запрос, Ответ); Возврат Ответ; КонецФункции // Обработчик метода POST /uninstall // Функция УдалитьНастройкиДобавить(Запрос) Попытка Данные = ОплатаСервисаСлужебный.ДанныеJSON(Запрос.ПолучитьТелоКакСтроку()); СостояниеЗадания = ШаблонСостоянияЗадания(); ОбязательныеСвойства = СтрРазделить("version,subscriber",","); ТекстОшибки = ""; Если Не ПроверитьЗаполнение(Данные, ОбязательныеСвойства, ТекстОшибки) Тогда Ответ = ОтветОшибка(10400, ТекстОшибки); Возврат Ответ; КонецЕсли; Константы.ИспользоватьОплатуСервиса.Установить(Ложь); Константы.АдресСервисаФреш.Установить(""); Константы.ИмяПользователяУчетнойСистемы.Установить(""); ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(ОплатаСервисаСлужебный.ВладелецПароляАвторизацииВУчетнойСистеме()); ТекущийПользователь = Пользователи.ТекущийПользователь(); ПрограммныйИнтерфейсСервисаСлужебный.УдалитьЗаписьАвторизацииВСервисе(ТекущийПользователь); Параметры = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор()); Параметры.НаименованиеФоновогоЗадания = НСтр("ru = 'Удаление настроек оплаты сервиса'"); Параметры.ОжидатьЗавершение = 1; ПараметрыВыполнения = ДлительныеОперации.ВыполнитьПроцедуру( Параметры, "ОплатаСервисаСлужебный.УдалитьНастройкиОплатыСервиса", Данные.subscriber); СостояниеЗадания = СостояниеЗаданияДляОтвета(ПараметрыВыполнения); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ТекстОшибки = СтрШаблон(НСтр("ru = 'Не удалось удалить настройки по причине: %1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); Ответ = ОтветОшибка(10400, ТекстОшибки); ОплатаСервисаСлужебный.ЛогироватьHTTPЗапрос(Запрос, Ответ); ЗаписьЖурналаРегистрации(ОплатаСервисаСлужебный.СобытиеЖурналаРегистрации(НСтр("ru = 'Ошибка данных'")), УровеньЖурналаРегистрации.Ошибка, Метаданные.HTTPСервисы.Биллинг, , ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); Возврат Ответ; КонецПопытки; Ответ = Новый HTTPСервисОтвет(200); ДанныеОтвета = ОплатаСервиса.ШаблонДанныхОтвета(); ДанныеОтвета.Вставить("setup_job", СостояниеЗадания); ОплатаСервисаСлужебный.ДобавитьЗаголовкиДанных(Ответ); Ответ.УстановитьТелоИзСтроки(ОплатаСервисаСлужебный.СтрокаJSON(ДанныеОтвета)); ОплатаСервисаСлужебный.ЛогироватьHTTPЗапрос(Запрос, Ответ); Возврат Ответ; КонецФункции // Обработчик метода GET /setup_result/{ИдентификаторЗадания} // // Параметры URL: // ИдентификаторЗадания - Строка - идентификатор задания установки настроек // Функция СостояниеУстановкиУдаленияНастроекПолучить(Запрос) ИдентификаторЗадания = Новый УникальныйИдентификатор(Запрос.ПараметрыURL["ИдентификаторЗадания"]); ПараметрыВыполнения = ДлительныеОперации.ОперацияВыполнена(ИдентификаторЗадания); ПараметрыВыполнения.Вставить("ИдентификаторЗадания", ИдентификаторЗадания); Ответ = Новый HTTPСервисОтвет(200); ОплатаСервисаСлужебный.ДобавитьЗаголовкиДанных(Ответ); ДанныеОтвета = СостояниеЗаданияДляОтвета(ПараметрыВыполнения); Ответ.УстановитьТелоИзСтроки(ОплатаСервисаСлужебный.СтрокаJSON(ДанныеОтвета)); Возврат Ответ; КонецФункции // Обработчик метода POST /bill/{Версия}/* // // Параметры URL: // Версия - Строка - версия интерфейса в числовом виде // Функция СчетНаОплатуДобавить(Запрос) Возврат ОтветЗапросаСчетаНаОплату(Запрос); КонецФункции // Обработчик метода PUT /bill/{Версия}/* // // Параметры URL: // Версия - версия интерфейса. // Функция СчетНаОплатуИзменить(Запрос) Возврат ОтветЗапросаСчетаНаОплату(Запрос); КонецФункции #КонецОбласти #Область СлужебныеПроцедурыИФункции Функция ПроверитьЗаполнение(Данные, ОбязательныеСвойства, ТекстОшибки = "") ОтсутствующиеСвойства = Новый Массив; Для Каждого Свойство Из ОбязательныеСвойства Цикл Если Не Данные.Свойство(Свойство) Тогда ОтсутствующиеСвойства.Добавить(Свойство); КонецЕсли; КонецЦикла; Если ОтсутствующиеСвойства.Количество() > 0 Тогда ТекстОшибки = СтрШаблон( НСтр("ru = 'Отсутствуют обязательные свойства: %1'"), СтрСоединить(ОтсутствующиеСвойства, ", ")); Возврат Ложь; КонецЕсли; ВерсияИнтерфейса = Данные.version; Если ВерсияИнтерфейса > ОплатаСервиса.ВерсияИнтерфейса() Тогда ТекстОшибки = СтрШаблон( НСтр("ru = 'Версия интерфейса оплат %1 менеджера сервиса не поддерживается приложением.'"), ВерсияИнтерфейса); Возврат Ложь; КонецЕсли; Возврат Истина; КонецФункции Функция ШаблонСостоянияЗадания() ШаблонДанныхЗадания = Новый Структура; ШаблонДанныхЗадания.Вставить("id", ""); ШаблонДанныхЗадания.Вставить("status", ""); ШаблонДанныхЗадания.Вставить("error", Ложь); ШаблонДанныхЗадания.Вставить("brief_message", ""); ШаблонДанныхЗадания.Вставить("detail_message", ""); Возврат ШаблонДанныхЗадания; КонецФункции Функция СостояниеЗаданияДляОтвета(ПараметрыВыполнения) СостояниеЗадания = ШаблонСостоянияЗадания(); СостояниеЗадания.id = Строка(ПараметрыВыполнения.ИдентификаторЗадания); Если ПараметрыВыполнения.Статус = "Выполняется" Тогда СостояниеЗадания.status = "Running"; ИначеЕсли ПараметрыВыполнения.Статус = "Выполнено" Тогда СостояниеЗадания.status = "Completed"; ИначеЕсли ПараметрыВыполнения.Статус = "Ошибка" Тогда СостояниеЗадания.status = "Error"; СостояниеЗадания.error = Истина; СостояниеЗадания.brief_message = ПараметрыВыполнения.КраткоеПредставлениеОшибки; СостояниеЗадания.detail_message = ПараметрыВыполнения.ПодробноеПредставлениеОшибки; ИначеЕсли ПараметрыВыполнения.Статус = "Отменено" Тогда СостояниеЗадания.status = "Canceled"; КонецЕсли; Возврат СостояниеЗадания; КонецФункции Функция ОтветЗапросаСчетаНаОплату(Запрос) Попытка ТелоЗапроса = ОплатаСервисаСлужебный.ДанныеJSON(Запрос.ПолучитьТелоКакСтроку()); ДанныеЗапроса = ОплатаСервиса.ДанныеЗапросаСчетаНаОплату(ТелоЗапроса); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ТекстОшибки = СтрШаблон(НСтр("ru = 'Не удалось прочитать данные по причине: %1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); Ответ = ОтветОшибка(ОплатаСервиса.КодВозвратаОшибкаДанных(), ТекстОшибки); ОплатаСервисаСлужебный.ЛогироватьHTTPЗапрос(Запрос, Ответ); ЗаписьЖурналаРегистрации(ОплатаСервисаСлужебный.СобытиеЖурналаРегистрации(НСтр("ru = 'Ошибка данных'")), УровеньЖурналаРегистрации.Ошибка, Метаданные.HTTPСервисы.Биллинг, , ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); Возврат Ответ; КонецПопытки; ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(ДанныеЗапроса.ИдентификаторСчета); ПараметрыВыполнения.НаименованиеФоновогоЗадания = СтрШаблон( НСтр("ru = 'Подготовка счета на оплату по запросу %1.'"), ДанныеЗапроса.ИдентификаторСчета); ПараметрыВыполнения.ОжидатьЗавершение = 0; ДлительныеОперации.ВыполнитьПроцедуру(ПараметрыВыполнения, "ОплатаСервисаСлужебный.ПодготовитьСчетНаОплату", ДанныеЗапроса); Ответ = Новый HTTPСервисОтвет(200); ДанныеОтвета = ОплатаСервиса.ШаблонДанныхОтвета(); ОплатаСервисаСлужебный.ДобавитьЗаголовкиДанных(Ответ); Ответ.УстановитьТелоИзСтроки(ОплатаСервисаСлужебный.СтрокаJSON(ДанныеОтвета)); ОплатаСервисаСлужебный.ЛогироватьHTTPЗапрос(Запрос, Ответ); Возврат Ответ; КонецФункции Функция ОтветОшибка(КодОшибки, ТекстОшибки) Ответ = Новый HTTPСервисОтвет(400); Данные = ОплатаСервиса.ШаблонДанныхОтвета(КодОшибки, ТекстОшибки); ОплатаСервисаСлужебный.ДобавитьЗаголовкиДанных(Ответ); Ответ.УстановитьТелоИзСтроки(ОплатаСервисаСлужебный.СтрокаJSON(Данные)); Возврат Ответ; КонецФункции #КонецОбласти