mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-03-25 21:39:21 +02:00
Переписаны методы http инструментария и события Google Calendar
This commit is contained in:
parent
3be0194c65
commit
d98fd2cd60
@ -287,45 +287,6 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
// Создать событие.
|
|
||||||
//
|
|
||||||
// Параметры:
|
|
||||||
// Токен - Строка - Токен
|
|
||||||
// Календарь - Строка - ID календаря
|
|
||||||
// ОписаниеСобытия - Соответствие Из КлючИЗначение - Описание события. См. ПолучитьОписаниеСобытия
|
|
||||||
//
|
|
||||||
// Возвращаемое значение:
|
|
||||||
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
|
|
||||||
Функция СоздатьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия) Экспорт
|
|
||||||
|
|
||||||
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
|
||||||
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь + "/events";
|
|
||||||
|
|
||||||
Дата0 = ОписаниеСобытия["ДатаНачала"];
|
|
||||||
Дата1 = ОписаниеСобытия["ДатаОкончания"];
|
|
||||||
Вложения = ОписаниеСобытия["МассивURLФайловВложений"];
|
|
||||||
Вложения = ПреобразоватьВложения(Вложения);
|
|
||||||
Уведомления = ОписаниеСобытия["ОтправлятьУведомления"];
|
|
||||||
|
|
||||||
Параметры = Новый Структура;
|
|
||||||
Параметры.Вставить("summary" , ОписаниеСобытия["Заголовок"]);
|
|
||||||
Параметры.Вставить("description", ОписаниеСобытия["Описание"]);
|
|
||||||
Параметры.Вставить("location" , ОписаниеСобытия["МестоПроведения"]);
|
|
||||||
Параметры.Вставить("start" , ПреобразоватьДату(Дата0));
|
|
||||||
Параметры.Вставить("end" , ПреобразоватьДату(Дата1));
|
|
||||||
Параметры.Вставить("attachments", Вложения);
|
|
||||||
|
|
||||||
ПараметрыURL = Новый Структура;
|
|
||||||
ПараметрыURL.Вставить("sendUpdates" , ?(Уведомления, "all", "none"));
|
|
||||||
ПараметрыURL.Вставить("supportsAttachments" , ?(Вложения.Количество() > 0, "true", "false"));
|
|
||||||
|
|
||||||
URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
|
|
||||||
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки, Истина);
|
|
||||||
|
|
||||||
Возврат Ответ;
|
|
||||||
|
|
||||||
КонецФункции
|
|
||||||
|
|
||||||
// Получить событие.
|
// Получить событие.
|
||||||
//
|
//
|
||||||
// Параметры:
|
// Параметры:
|
||||||
@ -349,6 +310,59 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
// Создать событие.
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен
|
||||||
|
// Календарь - Строка - ID календаря
|
||||||
|
// ОписаниеСобытия - Соответствие Из КлючИЗначение - Описание события. См. ПолучитьОписаниеСобытия
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
|
||||||
|
Функция СоздатьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия) Экспорт
|
||||||
|
Возврат УправлениеСобытием(Токен, Календарь, ОписаниеСобытия);
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Переместить событие.
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен
|
||||||
|
// КалендарьИсточник - Строка - ID календаря источника
|
||||||
|
// КалендарьПриемник - Строка - ID календаря приемника
|
||||||
|
// Событие - Строка - ID события календаря источника
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
|
||||||
|
Функция ПереместитьСобытие(Знач Токен, Знач КалендарьИсточник, Знач КалендарьПриемник, Знач Событие) Экспорт
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
URL = "https://www.googleapis.com/calendar/v3/calendars/"
|
||||||
|
+ КалендарьИсточник
|
||||||
|
+ "/events/"
|
||||||
|
+ Событие
|
||||||
|
+ "/move?destination="
|
||||||
|
+ КалендарьПриемник;
|
||||||
|
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, , Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Изменить событие.
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Токен - Строка - Токен
|
||||||
|
// Календарь - Строка - ID календаря
|
||||||
|
// ОписаниеСобытия - Строка - Новое описание события
|
||||||
|
// Событие - Строка - ID события
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// HTTPОтвет - Изменить событие
|
||||||
|
Функция ИзменитьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие) Экспорт
|
||||||
|
Возврат УправлениеСобытием(Токен, Календарь, ОписаниеСобытия, Событие);
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
// Удалить событие.
|
// Удалить событие.
|
||||||
//
|
//
|
||||||
// Параметры:
|
// Параметры:
|
||||||
@ -478,4 +492,43 @@
|
|||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Функция УправлениеСобытием(Знач Токен, Знач Календарь, Знач ОписаниеСобытия, Знач Событие = "")
|
||||||
|
|
||||||
|
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
|
||||||
|
Существующее = ЗначениеЗаполнено(Событие);
|
||||||
|
URL = "https://www.googleapis.com/calendar/v3/calendars/"
|
||||||
|
+ Календарь
|
||||||
|
+ "/events"
|
||||||
|
+ ?(Существующее, "/" + Событие, "");
|
||||||
|
|
||||||
|
Дата0 = ОписаниеСобытия["ДатаНачала"];
|
||||||
|
Дата1 = ОписаниеСобытия["ДатаОкончания"];
|
||||||
|
Вложения = ОписаниеСобытия["МассивURLФайловВложений"];
|
||||||
|
Вложения = ПреобразоватьВложения(Вложения);
|
||||||
|
Уведомления = ОписаниеСобытия["ОтправлятьУведомления"];
|
||||||
|
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
Параметры.Вставить("summary" , ОписаниеСобытия["Заголовок"]);
|
||||||
|
Параметры.Вставить("description", ОписаниеСобытия["Описание"]);
|
||||||
|
Параметры.Вставить("location" , ОписаниеСобытия["МестоПроведения"]);
|
||||||
|
Параметры.Вставить("start" , ПреобразоватьДату(Дата0));
|
||||||
|
Параметры.Вставить("end" , ПреобразоватьДату(Дата1));
|
||||||
|
Параметры.Вставить("attachments", Вложения);
|
||||||
|
|
||||||
|
ПараметрыURL = Новый Структура;
|
||||||
|
ПараметрыURL.Вставить("sendUpdates" , ?(Уведомления, "all", "none"));
|
||||||
|
ПараметрыURL.Вставить("supportsAttachments" , ?(Вложения.Количество() > 0, "true", "false"));
|
||||||
|
|
||||||
|
URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
|
||||||
|
|
||||||
|
Если Существующее Тогда
|
||||||
|
Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки, Истина);
|
||||||
|
Иначе
|
||||||
|
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки, Истина);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
#Область HTTPМетоды
|
#Область HTTPМетоды
|
||||||
|
|
||||||
// Без тела
|
#Область ЗапросыБезТела
|
||||||
|
|
||||||
Функция Get(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "") Экспорт
|
Функция Get(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "") Экспорт
|
||||||
Возврат ВыполнитьЗапросБезТела(URL, "GET", Параметры, ДопЗаголовки);
|
Возврат ВыполнитьЗапросБезТела(URL, "GET", Параметры, ДопЗаголовки);
|
||||||
@ -36,7 +36,9 @@
|
|||||||
Возврат ВыполнитьЗапросБезТела(URL, "DELETE", Параметры, ДопЗаголовки);
|
Возврат ВыполнитьЗапросБезТела(URL, "DELETE", Параметры, ДопЗаголовки);
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
// С телом
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область ЗапросыСТелом
|
||||||
|
|
||||||
Функция Post(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "", Знач JSON = Истина) Экспорт
|
Функция Post(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "", Знач JSON = Истина) Экспорт
|
||||||
Возврат ВыполнитьЗапросСТелом(URL, "POST", Параметры, ДопЗаголовки, JSON);
|
Возврат ВыполнитьЗапросСТелом(URL, "POST", Параметры, ДопЗаголовки, JSON);
|
||||||
@ -50,6 +52,10 @@
|
|||||||
Возврат ВыполнитьЗапросСТелом(URL, "PUT", Параметры, ДопЗаголовки, JSON);
|
Возврат ВыполнитьЗапросСТелом(URL, "PUT", Параметры, ДопЗаголовки, JSON);
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область ЗапросыMultipart
|
||||||
|
|
||||||
Функция PostMultipart(Знач URL
|
Функция PostMultipart(Знач URL
|
||||||
, Знач Параметры
|
, Знач Параметры
|
||||||
, Знач Файлы = ""
|
, Знач Файлы = ""
|
||||||
@ -70,6 +76,8 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
Функция ПараметрыЗапросаВСоответствие(Знач СтрокаПараметров) Экспорт
|
Функция ПараметрыЗапросаВСоответствие(Знач СтрокаПараметров) Экспорт
|
||||||
|
|
||||||
СоответствиеВозврата = Новый Соответствие;
|
СоответствиеВозврата = Новый Соответствие;
|
||||||
@ -181,22 +189,6 @@
|
|||||||
Возврат СтрЗаменить(Строка(Число), Символы.НПП, "");
|
Возврат СтрЗаменить(Строка(Число), Символы.НПП, "");
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
Процедура ВыполнитьСкрипт(Знач Текст) Экспорт
|
|
||||||
|
|
||||||
ИмяСкрипта = ПолучитьИмяВременногоФайла(".ps1");
|
|
||||||
ТекстСкрипта = Новый ТекстовыйДокумент;
|
|
||||||
|
|
||||||
ТекстСкрипта.УстановитьТекст(Текст);
|
|
||||||
|
|
||||||
ТекстСкрипта.Записать(ИмяСкрипта, КодировкаТекста.UTF8);
|
|
||||||
|
|
||||||
КодВозврата = 0;
|
|
||||||
ЗапуститьПриложение("powershell -file " + ИмяСкрипта + " -noexit", , Истина, КодВозврата);
|
|
||||||
|
|
||||||
УдалитьФайлы(ИмяСкрипта);
|
|
||||||
|
|
||||||
КонецПроцедуры
|
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
@ -208,56 +200,26 @@
|
|||||||
Если Не ЗначениеЗаполнено(Параметры) Тогда
|
Если Не ЗначениеЗаполнено(Параметры) Тогда
|
||||||
Параметры = Новый Структура;
|
Параметры = Новый Структура;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
|
Переадресация = 300;
|
||||||
|
Ошибка = 400;
|
||||||
|
ТипДанных = ?(JSON, "application/json", "application/x-www-form-urlencoded");
|
||||||
|
СтруктураURL = РазбитьURL(URL);
|
||||||
|
Сервер = СтруктураURL["Сервер"];
|
||||||
|
Адрес = СтруктураURL["Адрес"];
|
||||||
|
|
||||||
|
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки, ТипДанных);
|
||||||
|
Соединение = СоздатьСоединение(Сервер);
|
||||||
|
|
||||||
|
УстановитьТелоЗапроса(Запрос, Параметры, JSON);
|
||||||
|
|
||||||
GZip = "gzip";
|
Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
|
||||||
ТипДанных = ?(JSON, "application/json", "application/x-www-form-urlencoded");
|
ЭтоПереадрисация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка;
|
||||||
СтруктураURL = РазбитьURL(URL);
|
|
||||||
|
Если ЭтоПереадрисация Тогда
|
||||||
Заголовки = Новый Соответствие;
|
Ответ = ВыполнитьЗапросСТелом(Ответ.Заголовки["Location"], Вид, Параметры, ДопЗаголовки, JSON);
|
||||||
Заголовки.Вставить("Content-Type", ТипДанных);
|
Иначе
|
||||||
Заголовки.Вставить("Accept-Encoding", GZip);
|
ОбработатьОтвет(Ответ);
|
||||||
Заголовки.Вставить("Accept", "*/*");
|
|
||||||
Заголовки.Вставить("Connection", "keep-alive");
|
|
||||||
|
|
||||||
Если ТипЗнч(ДопЗаголовки) = Тип("Соответствие") Тогда
|
|
||||||
|
|
||||||
Для Каждого Заголовок Из ДопЗаголовки Цикл
|
|
||||||
Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение);
|
|
||||||
КонецЦикла;
|
|
||||||
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
|
|
||||||
НовыйЗапрос = Новый HTTPЗапрос(СтруктураURL["Адрес"], Заголовки);
|
|
||||||
|
|
||||||
Если JSON Тогда
|
|
||||||
Данные = JSONСтрокой(Параметры);
|
|
||||||
Иначе
|
|
||||||
СтрокаПараметров = ПараметрыЗапросаВСтроку(Параметры);
|
|
||||||
Данные = Прав(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1);
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
НовыйЗапрос.УстановитьТелоИзСтроки(Данные);
|
|
||||||
|
|
||||||
Ответ = Соединение.ВызватьHTTPМетод(Вид, НовыйЗапрос);
|
|
||||||
|
|
||||||
НужнаРаспаковка = Ответ.Заголовки.Получить("Content-Encoding") = GZip Или Ответ.Заголовки.Получить(
|
|
||||||
"content-encoding") = GZip;
|
|
||||||
|
|
||||||
Если НужнаРаспаковка Тогда
|
|
||||||
Ответ = РаспаковатьОтвет(Ответ);
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
Ответ = ?(ТипЗнч(Ответ) = Тип("HTTPОтвет"), Ответ.ПолучитьТелоКакДвоичныеДанные(), Ответ);
|
|
||||||
|
|
||||||
Если ТипЗнч(Ответ) = Тип("ДвоичныеДанные") Тогда
|
|
||||||
|
|
||||||
Попытка
|
|
||||||
Ответ = JsonВСтруктуру(Ответ);
|
|
||||||
Исключение
|
|
||||||
Ответ = ПолучитьСтрокуИзДвоичныхДанных(Ответ);
|
|
||||||
КонецПопытки;
|
|
||||||
|
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Возврат Ответ;
|
Возврат Ответ;
|
||||||
@ -270,40 +232,28 @@
|
|||||||
Параметры = Новый Структура;
|
Параметры = Новый Структура;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Заголовки = Новый Соответствие;
|
Переадресация = 300;
|
||||||
|
Ошибка = 400;
|
||||||
Если ТипЗнч(ДопЗаголовки) = Тип("Соответствие") Тогда
|
СтруктураURL = РазбитьURL(URL);
|
||||||
|
Сервер = СтруктураURL["Сервер"];
|
||||||
Для Каждого Заголовок Из ДопЗаголовки Цикл
|
Адрес = СтруктураURL["Адрес"] + ПараметрыЗапросаВСтроку(Параметры);
|
||||||
Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение);
|
|
||||||
КонецЦикла;
|
|
||||||
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
СтруктураURL = РазбитьURL(URL);
|
|
||||||
Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
|
|
||||||
Запрос = Новый HTTPЗапрос(СтруктураURL["Адрес"] + ПараметрыЗапросаВСтроку(Параметры), Заголовки);
|
|
||||||
Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
|
|
||||||
Переадресация = 300;
|
|
||||||
НеНайдено = 400;
|
|
||||||
|
|
||||||
Если Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < НеНайдено Тогда
|
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки);
|
||||||
Возврат ВыполнитьЗапросБезТела(Ответ.Заголовки["Location"], Вид, Параметры, ДопЗаголовки);
|
Соединение = СоздатьСоединение(Сервер);
|
||||||
|
|
||||||
|
Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
|
||||||
|
ЭтоПереадрисация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка;
|
||||||
|
|
||||||
|
Если ЭтоПереадрисация Тогда
|
||||||
|
Ответ = ВыполнитьЗапросБезТела(Ответ.Заголовки["Location"], Вид, Параметры, ДопЗаголовки);
|
||||||
|
Иначе
|
||||||
|
ОбработатьОтвет(Ответ);
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Попытка
|
Возврат Ответ;
|
||||||
ТелоОтвета = JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные());
|
|
||||||
Исключение
|
|
||||||
ТелоОтвета = Ответ.ПолучитьТелоКакДвоичныеДанные();
|
|
||||||
КонецПопытки;
|
|
||||||
|
|
||||||
Возврат ТелоОтвета;
|
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
// BSLLS:CognitiveComplexity-off
|
|
||||||
// BSLLS:Typo-off
|
|
||||||
|
|
||||||
Функция ВыполнитьЗапросМультипарт(Знач URL
|
Функция ВыполнитьЗапросМультипарт(Знач URL
|
||||||
, Знач Вид
|
, Знач Вид
|
||||||
, Знач Параметры
|
, Знач Параметры
|
||||||
@ -319,44 +269,128 @@
|
|||||||
Файлы = Новый Соответствие;
|
Файлы = Новый Соответствие;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
ЗаменаТочки = "___";
|
Переадресация = 300;
|
||||||
GZip = "gzip";
|
Ошибка = 400;
|
||||||
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
|
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
|
||||||
СтруктураURL = РазбитьURL(URL);
|
РазделительСтрок = Символы.ВК + Символы.ПС;
|
||||||
|
ТипДанных = "multipart/form-data; boundary=" + Boundary;
|
||||||
|
СтруктураURL = РазбитьURL(URL);
|
||||||
|
Сервер = СтруктураURL["Сервер"];
|
||||||
|
Адрес = СтруктураURL["Адрес"];
|
||||||
|
|
||||||
|
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки, ТипДанных);
|
||||||
|
Соединение = СоздатьСоединение(Сервер);
|
||||||
|
|
||||||
|
ТелоЗапроса = Запрос.ПолучитьТелоКакПоток();
|
||||||
|
ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", "", Ложь);
|
||||||
|
|
||||||
|
ЗаписатьПараметрыМультипарт(ЗаписьТекста, Boundary, Параметры);
|
||||||
|
ЗаписатьФайлыМультипарт(ЗаписьТекста, Boundary, ТипКонтента, Файлы);
|
||||||
|
|
||||||
|
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + "--" + РазделительСтрок);
|
||||||
|
ЗаписьТекста.Закрыть();
|
||||||
|
|
||||||
|
Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
|
||||||
|
ЭтоПереадрисация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка;
|
||||||
|
|
||||||
|
Если ЭтоПереадрисация Тогда
|
||||||
|
Ответ = ВыполнитьЗапросМультипарт(Ответ.Заголовки["Location"]
|
||||||
|
, Вид
|
||||||
|
, Параметры
|
||||||
|
, Файлы
|
||||||
|
, ТипКонтента
|
||||||
|
, ДопЗаголовки);
|
||||||
|
Иначе
|
||||||
|
ОбработатьОтвет(Ответ);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция СоздатьЗапрос(Знач Адрес, Знач ДопЗаголовки = "", Знач ТипДанных = "")
|
||||||
|
|
||||||
Заголовки = Новый Соответствие;
|
Заголовки = Новый Соответствие;
|
||||||
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
|
Заголовки.Вставить("Accept-Encoding", "gzip");
|
||||||
Заголовки.Вставить("Accept-Encoding", GZip);
|
Заголовки.Вставить("Accept" , "*/*");
|
||||||
Заголовки.Вставить("Accept", "*/*");
|
Заголовки.Вставить("Connection" , "keep-alive");
|
||||||
Заголовки.Вставить("Connection", "keep-alive");
|
|
||||||
|
Если ЗначениеЗаполнено(ТипДанных) Тогда
|
||||||
|
Заголовки.Вставить("Content-Type", ТипДанных);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
Если ТипЗнч(ДопЗаголовки) = Тип("Соответствие") Тогда
|
Если ТипЗнч(ДопЗаголовки) = Тип("Соответствие") Тогда
|
||||||
|
|
||||||
Для Каждого Заголовок Из ДопЗаголовки Цикл
|
Для Каждого Заголовок Из ДопЗаголовки Цикл
|
||||||
Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение);
|
Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение);
|
||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
|
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
|
НовыйЗапрос = Новый HTTPЗапрос(Адрес, Заголовки);
|
||||||
|
|
||||||
Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
|
Возврат НовыйЗапрос;
|
||||||
НовыйЗапрос = Новый HTTPЗапрос(СтруктураURL["Адрес"], Заголовки);
|
|
||||||
ТелоЗапроса = НовыйЗапрос.ПолучитьТелоКакПоток();
|
КонецФункции
|
||||||
ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", "", Ложь);
|
|
||||||
|
|
||||||
|
Функция СоздатьСоединение(Знач Сервер)
|
||||||
|
Возврат Новый HTTPСоединение(Сервер, 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Процедура ОбработатьОтвет(Ответ)
|
||||||
|
|
||||||
|
GZip = "gzip";
|
||||||
|
НужнаРаспаковка =
|
||||||
|
Ответ.Заголовки.Получить("Content-Encoding") = GZip
|
||||||
|
Или Ответ.Заголовки.Получить("content-encoding") = GZip;
|
||||||
|
|
||||||
|
Если НужнаРаспаковка Тогда
|
||||||
|
Ответ = РаспаковатьОтвет(Ответ);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Ответ = ?(ТипЗнч(Ответ) = Тип("HTTPОтвет"), Ответ.ПолучитьТелоКакДвоичныеДанные(), Ответ);
|
||||||
|
|
||||||
|
Если ТипЗнч(Ответ) = Тип("ДвоичныеДанные") Тогда
|
||||||
|
|
||||||
|
Попытка
|
||||||
|
Ответ = JsonВСтруктуру(Ответ);
|
||||||
|
Исключение
|
||||||
|
Ответ = ПолучитьСтрокуИзДвоичныхДанных(Ответ);
|
||||||
|
КонецПопытки;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура УстановитьТелоЗапроса(Запрос, Знач Параметры, Знач JSON)
|
||||||
|
|
||||||
|
Если JSON Тогда
|
||||||
|
Данные = JSONСтрокой(Параметры);
|
||||||
|
Иначе
|
||||||
|
СтрокаПараметров = ПараметрыЗапросаВСтроку(Параметры);
|
||||||
|
Данные = Прав(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Запрос.УстановитьТелоИзСтроки(Данные);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ЗаписатьПараметрыМультипарт(ЗаписьТекста, Знач Boundary, Знач Параметры)
|
||||||
|
|
||||||
РазделительСтрок = Символы.ВК + Символы.ПС;
|
РазделительСтрок = Символы.ВК + Символы.ПС;
|
||||||
|
|
||||||
Для Каждого Параметр Из Параметры Цикл
|
Для Каждого Параметр Из Параметры Цикл
|
||||||
|
|
||||||
Если Параметр.Значение = Неопределено
|
Если Параметр.Значение = Неопределено
|
||||||
Или Параметр.Значение = NULL Тогда
|
Или Параметр.Значение = NULL Тогда
|
||||||
Продолжить;
|
Продолжить;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + РазделительСтрок);
|
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + РазделительСтрок);
|
||||||
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""" + Параметр.Ключ + """");
|
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""" + Параметр.Ключ + """");
|
||||||
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
|
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
|
||||||
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
|
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
|
||||||
|
|
||||||
Если ТипЗнч(Параметр.Значение) = Тип("Строка")
|
Если ТипЗнч(Параметр.Значение) = Тип("Строка")
|
||||||
Или ТипЗнч(Параметр.Значение) = Тип("Число") Тогда
|
Или ТипЗнч(Параметр.Значение) = Тип("Число") Тогда
|
||||||
|
|
||||||
@ -366,28 +400,37 @@
|
|||||||
ИначеЕсли ТипЗнч(Параметр.Значение) = Тип("Булево") Тогда
|
ИначеЕсли ТипЗнч(Параметр.Значение) = Тип("Булево") Тогда
|
||||||
|
|
||||||
ЗаписьТекста.ЗаписатьСтроку(?(Параметр.Значение, "true", "false"));
|
ЗаписьТекста.ЗаписатьСтроку(?(Параметр.Значение, "true", "false"));
|
||||||
|
|
||||||
Иначе
|
Иначе
|
||||||
|
|
||||||
ЗаписьТекста.Записать(Параметр.Значение);
|
ЗаписьТекста.Записать(Параметр.Значение);
|
||||||
|
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
|
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
|
||||||
|
|
||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
Счетчик = 0;
|
Процедура ЗаписатьФайлыМультипарт(ЗаписьТекста, Знач Boundary, Знач ТипКонтента, Знач Файлы)
|
||||||
|
|
||||||
|
РазделительСтрок = Символы.ВК + Символы.ПС;
|
||||||
|
ЗаменаТочки = "___";
|
||||||
|
|
||||||
Для Каждого Файл Из Файлы Цикл
|
Для Каждого Файл Из Файлы Цикл
|
||||||
|
|
||||||
ПутьФайл = СтрЗаменить(Файл.Ключ, ЗаменаТочки, ".");
|
ПутьФайл = СтрЗаменить(Файл.Ключ, ЗаменаТочки, ".");
|
||||||
|
|
||||||
Если ТипКонтента = "image/jpeg" Тогда
|
Если ТипКонтента = "image/jpeg" Тогда
|
||||||
ИмяФайлаОтправки = "photo";
|
ИмяФайлаОтправки = "photo";
|
||||||
Иначе
|
Иначе
|
||||||
ИмяФайлаОтправки = СтрЗаменить(Файл.Ключ, ЗаменаТочки, ".");
|
ИмяФайлаОтправки = СтрЗаменить(Файл.Ключ, ЗаменаТочки, ".");
|
||||||
ИмяФайлаОтправки = Лев(ИмяФайлаОтправки, СтрНайти(ИмяФайлаОтправки, ".") - 1);
|
ИмяФайлаОтправки = Лев(ИмяФайлаОтправки, СтрНайти(ИмяФайлаОтправки, ".") - 1);
|
||||||
ИмяФайлаОтправки = ?(ЗначениеЗаполнено(ИмяФайлаОтправки), ИмяФайлаОтправки, СтрЗаменить(Файл.Ключ,
|
ИмяФайлаОтправки = ?(ЗначениеЗаполнено(ИмяФайлаОтправки), ИмяФайлаОтправки, СтрЗаменить(Файл.Ключ,
|
||||||
ЗаменаТочки, "."));
|
ЗаменаТочки, "."));
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + РазделительСтрок);
|
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + РазделительСтрок);
|
||||||
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name="""
|
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name="""
|
||||||
+ ИмяФайлаОтправки
|
+ ИмяФайлаОтправки
|
||||||
@ -400,32 +443,10 @@
|
|||||||
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
|
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
|
||||||
ЗаписьТекста.Записать(Файл.Значение);
|
ЗаписьТекста.Записать(Файл.Значение);
|
||||||
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
|
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
|
||||||
|
|
||||||
Счетчик = Счетчик + 1;
|
|
||||||
|
|
||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
|
|
||||||
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + "--" + РазделительСтрок);
|
КонецПроцедуры
|
||||||
|
|
||||||
ЗаписьТекста.Закрыть();
|
|
||||||
|
|
||||||
Ответ = Соединение.ВызватьHTTPМетод(Вид, НовыйЗапрос);
|
|
||||||
|
|
||||||
НужнаРаспаковка = Ответ.Заголовки.Получить("Content-Encoding") = GZip Или Ответ.Заголовки.Получить(
|
|
||||||
"content-encoding") = GZip;
|
|
||||||
|
|
||||||
Если НужнаРаспаковка Тогда
|
|
||||||
Ответ = РаспаковатьОтвет(Ответ);
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
Возврат ?(ТипЗнч(Ответ) = Тип("ДвоичныеДанные")
|
|
||||||
, JsonВСтруктуру(Ответ)
|
|
||||||
, JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные()));
|
|
||||||
|
|
||||||
КонецФункции
|
|
||||||
|
|
||||||
// BSLLS:Typo-on
|
|
||||||
// BSLLS:CognitiveComplexity-on
|
|
||||||
|
|
||||||
#Область GZip
|
#Область GZip
|
||||||
|
|
||||||
|
@ -1240,6 +1240,7 @@
|
|||||||
.ИмеетТип("Массив").Заполнено();
|
.ИмеетТип("Массив").Заполнено();
|
||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|
||||||
#Область YandexDisk
|
#Область YandexDisk
|
||||||
@ -1637,6 +1638,7 @@
|
|||||||
Календарь = ПолучитьПараметр("Google_Календарь");
|
Календарь = ПолучитьПараметр("Google_Календарь");
|
||||||
Наименование = "Новое событие";
|
Наименование = "Новое событие";
|
||||||
Описание = "Описание тестового события";
|
Описание = "Описание тестового события";
|
||||||
|
ОписаниеИзм = "Описание тестового события (изм.)";
|
||||||
ТипСоответствие = Тип("Соответствие");
|
ТипСоответствие = Тип("Соответствие");
|
||||||
ТипСтрока = Тип("Строка");
|
ТипСтрока = Тип("Строка");
|
||||||
Summary = "summary";
|
Summary = "summary";
|
||||||
@ -1667,14 +1669,32 @@
|
|||||||
.Свойство("description").Равно(Описание)
|
.Свойство("description").Равно(Описание)
|
||||||
.Свойство("id").ИмеетТип(ТипСтрока).Заполнено();
|
.Свойство("id").ИмеетТип(ТипСтрока).Заполнено();
|
||||||
|
|
||||||
|
СоответствиеСобытия.Вставить("Описание", ОписаниеИзм);
|
||||||
|
Результат = OPI_GoogleCalendar.ИзменитьСобытие(Токен, Календарь, СоответствиеСобытия, Событие);
|
||||||
|
|
||||||
|
ЮТест.ОжидаетЧто(Результат)
|
||||||
|
.ИмеетТип(ТипСоответствие)
|
||||||
|
.Свойство(Summary).Равно(Наименование)
|
||||||
|
.Свойство("description").Равно(ОписаниеИзм)
|
||||||
|
.Свойство("id").ИмеетТип(ТипСтрока).Заполнено();
|
||||||
|
|
||||||
|
|
||||||
Результат = OPI_GoogleCalendar.ПолучитьСобытие(Токен, Календарь, Событие);
|
Результат = OPI_GoogleCalendar.ПолучитьСобытие(Токен, Календарь, Событие);
|
||||||
|
|
||||||
ЮТест.ОжидаетЧто(Результат)
|
ЮТест.ОжидаетЧто(Результат)
|
||||||
.ИмеетТип(ТипСоответствие)
|
.ИмеетТип(ТипСоответствие)
|
||||||
.Свойство(Summary).Равно(Наименование)
|
.Свойство(Summary).Равно(Наименование)
|
||||||
.Свойство("description").Равно(Описание)
|
.Свойство("description").Равно(ОписаниеИзм)
|
||||||
.Свойство("id").ИмеетТип(ТипСтрока).Заполнено();
|
.Свойство("id").ИмеетТип(ТипСтрока).Заполнено();
|
||||||
|
|
||||||
|
Результат = OPI_GoogleCalendar.ПереместитьСобытие(Токен, Календарь, Календарь, Событие);
|
||||||
|
|
||||||
|
ЮТест.ОжидаетЧто(Результат)
|
||||||
|
.ИмеетТип(ТипСоответствие)
|
||||||
|
.Свойство(Summary).Равно(Наименование)
|
||||||
|
.Свойство("description").Равно(ОписаниеИзм)
|
||||||
|
.Свойство("id").ИмеетТип(ТипСтрока).Заполнено();
|
||||||
|
|
||||||
Результат = OPI_GoogleCalendar.УдалитьСобытие(Токен, Календарь, Событие);
|
Результат = OPI_GoogleCalendar.УдалитьСобытие(Токен, Календарь, Событие);
|
||||||
|
|
||||||
ЮТест.ОжидаетЧто(Результат).НеЗаполнено();
|
ЮТест.ОжидаетЧто(Результат).НеЗаполнено();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user