diff --git a/OInt/core/Modules/OPI_GoogleDrive.os b/OInt/core/Modules/OPI_GoogleDrive.os index e79aa54620..ac8a2dc77d 100644 --- a/OInt/core/Modules/OPI_GoogleDrive.os +++ b/OInt/core/Modules/OPI_GoogleDrive.os @@ -467,7 +467,7 @@ Если ЗначениеЗаполнено(Файл) Тогда - Файл = OPI_Инструменты.ПолучитьДвоичныеДанные(Файл); + Файл = OPI_Инструменты.ПолучитьДвоичныеДанные(Файл); СоответствиеФайла.Вставить(Файл, MIME); КонецЕсли; diff --git a/OInt/core/Modules/OPI_Notion.os b/OInt/core/Modules/OPI_Notion.os index 961fa30692..20be4dddb5 100644 --- a/OInt/core/Modules/OPI_Notion.os +++ b/OInt/core/Modules/OPI_Notion.os @@ -304,9 +304,8 @@ Параметры.Вставить("after", ВставитьПосле); КонецЕсли; - Ответ = OPI_Инструменты.Patch("https://api.notion.com/v1/blocks/" + Родитель + "/children" - , Параметры - , Заголовки); + URL = "https://api.notion.com/v1/blocks/" + Родитель + "/children"; + Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки); Возврат Ответ; @@ -451,6 +450,7 @@ ПреобразоватьИД(Родитель); ПолеИдентификатора = ?(РодительБаза, "database_id", "page_id"); + СтруктураРодителя = Новый Структура(); СтруктураРодителя.Вставить("type" , ПолеИдентификатора); СтруктураРодителя.Вставить(ПолеИдентификатора, Родитель); @@ -469,7 +469,7 @@ СтруктураТекста.Вставить("content", Заголовок); СтруктураТекста.Вставить("link" , Неопределено); - + СтруктураДанных.Вставить("text", СтруктураТекста); СтруктураДанных.Вставить("type", "text"); @@ -606,6 +606,7 @@ Если Не Блок.Получить(Поле) = Неопределено Тогда Блок.Удалить(Поле); КонецЕсли; + КонецЦикла; КонецПроцедуры diff --git a/OInt/core/Modules/OPI_Telegram.os b/OInt/core/Modules/OPI_Telegram.os index 8a043690f6..b60dec63dd 100644 --- a/OInt/core/Modules/OPI_Telegram.os +++ b/OInt/core/Modules/OPI_Telegram.os @@ -43,9 +43,9 @@ Функция ПолучитьИнформациюБота(Знач Токен) Экспорт URL = "api.telegram.org/bot" + Токен + "/getMe"; - Ответ = OPI_Инструменты.Get(URL); + Ответ = OPI_Инструменты.Get(URL); - Возврат Ответ; + Возврат Ответ; КонецФункции @@ -59,8 +59,8 @@ Функция ПолучитьОбновления(Знач Токен) Экспорт URL = "api.telegram.org/bot" + Токен + "/getUpdates"; - Ответ = OPI_Инструменты.Get(URL); - Возврат Ответ; + Ответ = OPI_Инструменты.Get(URL); + Возврат Ответ; КонецФункции @@ -74,13 +74,13 @@ // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram Функция УстановитьWebhook(Знач Токен, Знач URL) Экспорт - Параметры_ = Новый Структура; - Параметры_.Вставить("url", URL); + Параметры_ = Новый Структура; + Параметры_.Вставить("url", URL); URL = "api.telegram.org/bot" + Токен + "/setWebHook"; - Ответ = OPI_Инструменты.Get(URL, Параметры_); + Ответ = OPI_Инструменты.Get(URL, Параметры_); - Возврат Ответ; + Возврат Ответ; КонецФункции @@ -94,8 +94,8 @@ Функция УдалитьWebhook(Знач Токен) Экспорт URL = "api.telegram.org/bot" + Токен + "/deleteWebHook"; - Ответ = OPI_Инструменты.Get(URL); - Возврат Ответ; + Ответ = OPI_Инструменты.Get(URL); + Возврат Ответ; КонецФункции @@ -115,19 +115,19 @@ // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram Функция ОтправитьТекстовоеСообщение(Знач Токен, Знач IDЧата, Знач Текст, Знач Клавиатура = "") Экспорт - OPI_Инструменты.ЗаменитьСпецСимволы(Текст); + OPI_Инструменты.ЗаменитьСпецСимволы(Текст); - Параметры_ = Новый Структура; - Параметры_.Вставить("parse_mode" , "Markdown"); - Параметры_.Вставить("text" , Текст); - Параметры_.Вставить("reply_markup", Клавиатура); + Параметры_ = Новый Структура; + Параметры_.Вставить("parse_mode" , "Markdown"); + Параметры_.Вставить("text" , Текст); + Параметры_.Вставить("reply_markup", Клавиатура); ДобавитьИдентификаторЧата(IDЧата, Параметры_); URL = "api.telegram.org/bot" + Токен + "/sendMessage"; - Ответ = OPI_Инструменты.Get(URL, Параметры_); + Ответ = OPI_Инструменты.Get(URL, Параметры_); - Возврат Ответ; + Возврат Ответ; КонецФункции @@ -144,7 +144,7 @@ // Строка, Произвольный, HTTPОтвет - Ответ сервера Telegram Функция ОтправитьКартинку(Знач Токен, Знач IDЧата, Знач Текст, Знач Картинка, Знач Клавиатура = "") Экспорт - Возврат ОтправитьФайл(Токен, IDЧата, Текст, Картинка, "photo", Клавиатура); + Возврат ОтправитьФайл(Токен, IDЧата, Текст, Картинка, "photo", Клавиатура); КонецФункции @@ -161,7 +161,7 @@ // Строка, Произвольный, HTTPОтвет - Ответ сервера Telegram Функция ОтправитьВидео(Знач Токен, Знач IDЧата, Знач Текст, Знач Видео, Знач Клавиатура = "") Экспорт - Возврат ОтправитьФайл(Токен, IDЧата, Текст, Видео, "video", Клавиатура); + Возврат ОтправитьФайл(Токен, IDЧата, Текст, Видео, "video", Клавиатура); КонецФункции @@ -178,7 +178,7 @@ // Строка, Произвольный, HTTPОтвет - Ответ сервера Telegram Функция ОтправитьАудио(Знач Токен, Знач IDЧата, Знач Текст, Знач Аудио, Знач Клавиатура = "") Экспорт - Возврат ОтправитьФайл(Токен, IDЧата, Текст, Аудио, "audio", Клавиатура); + Возврат ОтправитьФайл(Токен, IDЧата, Текст, Аудио, "audio", Клавиатура); КонецФункции @@ -195,7 +195,7 @@ // Строка, Произвольный, HTTPОтвет - Ответ сервера Telegram Функция ОтправитьДокумент(Знач Токен, Знач IDЧата, Знач Текст, Знач Документ, Знач Клавиатура = "") Экспорт - Возврат ОтправитьФайл(Токен, IDЧата, Текст, Документ, "document", Клавиатура); + Возврат ОтправитьФайл(Токен, IDЧата, Текст, Документ, "document", Клавиатура); КонецФункции @@ -212,7 +212,7 @@ // Строка, Произвольный, HTTPОтвет - Ответ сервера Telegram Функция ОтправитьГифку(Знач Токен, Знач IDЧата, Знач Текст, Знач Гифка, Знач Клавиатура = "") Экспорт - Возврат ОтправитьФайл(Токен, IDЧата, Текст, Гифка, "animation", Клавиатура); + Возврат ОтправитьФайл(Токен, IDЧата, Текст, Гифка, "animation", Клавиатура); КонецФункции @@ -236,26 +236,26 @@ // Типы: audio, document, photo, video // Нельзя замешивать разные типы! - OPI_Инструменты.ЗаменитьСпецсимволы(Текст); + OPI_Инструменты.ЗаменитьСпецсимволы(Текст); URL = "api.telegram.org/bot" + Токен + "/sendMediaGroup"; - IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); + IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); СтруктураФайлов = Новый Структура; Медиа = Новый Массив; - Параметры_ = Новый Структура; - Параметры_.Вставить("parse_mode" , "Markdown"); - Параметры_.Вставить("caption" , Текст); - Параметры_.Вставить("reply_markup", Клавиатура); + Параметры_ = Новый Структура; + Параметры_.Вставить("parse_mode" , "Markdown"); + Параметры_.Вставить("caption" , Текст); + Параметры_.Вставить("reply_markup", Клавиатура); ДобавитьИдентификаторЧата(IDЧата, Параметры_); СформироватьМассивМедиа(СоответствиеФайлов, Текст, СтруктураФайлов, Медиа); - Параметры_.Вставить("media", Медиа); + Параметры_.Вставить("media", Медиа); - Ответ = OPI_Инструменты.PostMultipart(URL, Параметры_, СтруктураФайлов, "mixed"); + Ответ = OPI_Инструменты.PostMultipart(URL, Параметры_, СтруктураФайлов, "mixed"); - Возврат Ответ; + Возврат Ответ; КонецФункции @@ -272,20 +272,20 @@ // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram Функция ОтправитьМестоположение(Знач Токен, Знач IDЧата, Знач Широта, Знач Долгота, Знач Клавиатура = "") Экспорт - IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); + IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); URL = "api.telegram.org/bot" + Токен + "/sendLocation"; - Параметры_ = Новый Структура; - Параметры_.Вставить("parse_mode" , "Markdown"); - Параметры_.Вставить("latitude" , OPI_Инструменты.ЧислоВСтроку(Широта)); - Параметры_.Вставить("longitude" , OPI_Инструменты.ЧислоВСтроку(Долгота)); - Параметры_.Вставить("reply_markup", Клавиатура); + Параметры_ = Новый Структура; + Параметры_.Вставить("parse_mode" , "Markdown"); + Параметры_.Вставить("latitude" , OPI_Инструменты.ЧислоВСтроку(Широта)); + Параметры_.Вставить("longitude" , OPI_Инструменты.ЧислоВСтроку(Долгота)); + Параметры_.Вставить("reply_markup", Клавиатура); ДобавитьИдентификаторЧата(IDЧата, Параметры_); - Ответ = OPI_Инструменты.Get(URL, Параметры_); + Ответ = OPI_Инструменты.Get(URL, Параметры_); - Возврат Ответ; + Возврат Ответ; КонецФункции @@ -303,21 +303,21 @@ // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram Функция ОтправитьКонтакт(Знач Токен, Знач IDЧата, Знач Имя, Знач Фамилия, Знач Телефон, Знач Клавиатура = "") Экспорт - IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); + IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); URL = "api.telegram.org/bot" + Токен + "/sendContact"; - Параметры_ = Новый Структура; - Параметры_.Вставить("parse_mode" , "Markdown"); - Параметры_.Вставить("first_name" , Имя); - Параметры_.Вставить("last_name" , Фамилия); - Параметры_.Вставить("phone_number", Строка(Телефон)); - Параметры_.Вставить("reply_markup", Клавиатура); + Параметры_ = Новый Структура; + Параметры_.Вставить("parse_mode" , "Markdown"); + Параметры_.Вставить("first_name" , Имя); + Параметры_.Вставить("last_name" , Фамилия); + Параметры_.Вставить("phone_number", Строка(Телефон)); + Параметры_.Вставить("reply_markup", Клавиатура); ДобавитьИдентификаторЧата(IDЧата, Параметры_); - Ответ = OPI_Инструменты.Get(URL, Параметры_); + Ответ = OPI_Инструменты.Get(URL, Параметры_); - Возврат Ответ; + Возврат Ответ; КонецФункции @@ -334,24 +334,24 @@ // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram Функция ОтправитьОпрос(Знач Токен, Знач IDЧата, Знач Вопрос, Знач МассивОтветов, Знач Анонимный = Истина) Экспорт - IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); - Ответы = OPI_Инструменты.JSONСтрокой(МассивОтветов); + IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); + Ответы = OPI_Инструменты.JSONСтрокой(МассивОтветов); URL = "api.telegram.org/bot" + Токен + "/sendPoll"; - Параметры_ = Новый Структура; - Параметры_.Вставить("parse_mode", "Markdown"); - Параметры_.Вставить("question" , Вопрос); - Параметры_.Вставить("options" , Ответы); + Параметры_ = Новый Структура; + Параметры_.Вставить("parse_mode", "Markdown"); + Параметры_.Вставить("question" , Вопрос); + Параметры_.Вставить("options" , Ответы); - Если Не Анонимный Тогда - Параметры_.Вставить("is_anonymous", Ложь); + Если Не Анонимный Тогда + Параметры_.Вставить("is_anonymous", Ложь); КонецЕсли; ДобавитьИдентификаторЧата(IDЧата, Параметры_); - Ответ = OPI_Инструменты.Get(URL, Параметры_); + Ответ = OPI_Инструменты.Get(URL, Параметры_); - Возврат Ответ; + Возврат Ответ; КонецФункции @@ -368,19 +368,19 @@ Функция ПереслатьСообщение(Знач Токен, Знач IDОригинала, Знач ОткудаID, Знач КудаID) Экспорт URL = "api.telegram.org/bot" + Токен + "/forwardMessage"; - IDОригинала = OPI_Инструменты.ЧислоВСтроку(IDОригинала); - ОткудаID = OPI_Инструменты.ЧислоВСтроку(ОткудаID); - КудаID = OPI_Инструменты.ЧислоВСтроку(КудаID); + IDОригинала = OPI_Инструменты.ЧислоВСтроку(IDОригинала); + ОткудаID = OPI_Инструменты.ЧислоВСтроку(ОткудаID); + КудаID = OPI_Инструменты.ЧислоВСтроку(КудаID); - Параметры_ = Новый Структура; - Параметры_.Вставить("from_chat_id", ОткудаID); - Параметры_.Вставить("message_id" , IDОригинала); + Параметры_ = Новый Структура; + Параметры_.Вставить("from_chat_id", ОткудаID); + Параметры_.Вставить("message_id" , IDОригинала); ДобавитьИдентификаторЧата(КудаID, Параметры_); - Ответ = OPI_Инструменты.Get(URL, Параметры_); + Ответ = OPI_Инструменты.Get(URL, Параметры_); - Возврат Ответ; + Возврат Ответ; КонецФункции @@ -400,17 +400,17 @@ Функция Бан(Знач Токен, Знач IDЧата, Знач IDПользователя) Экспорт URL = "api.telegram.org/bot" + Токен + "/banChatMember"; - IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); - IDПользователя = OPI_Инструменты.ЧислоВСтроку(IDПользователя); + IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); + IDПользователя = OPI_Инструменты.ЧислоВСтроку(IDПользователя); - Параметры_ = Новый Структура; - Параметры_.Вставить("parse_mode", "Markdown"); - Параметры_.Вставить("chat_id" , IDЧата); - Параметры_.Вставить("user_id" , IDПользователя); + Параметры_ = Новый Структура; + Параметры_.Вставить("parse_mode", "Markdown"); + Параметры_.Вставить("chat_id" , IDЧата); + Параметры_.Вставить("user_id" , IDПользователя); - Ответ = OPI_Инструменты.Get(URL, Параметры_); + Ответ = OPI_Инструменты.Get(URL, Параметры_); - Возврат Ответ; + Возврат Ответ; КонецФункции @@ -426,18 +426,18 @@ Функция Разбан(Знач Токен, Знач IDЧата, Знач IDПользователя) Экспорт URL = "api.telegram.org/bot" + Токен + "/unbanChatMember"; - IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); - IDПользователя = OPI_Инструменты.ЧислоВСтроку(IDПользователя); + IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); + IDПользователя = OPI_Инструменты.ЧислоВСтроку(IDПользователя); - Параметры_ = Новый Структура; - Параметры_.Вставить("parse_mode" , "Markdown"); - Параметры_.Вставить("chat_id" , IDЧата); - Параметры_.Вставить("user_id" , IDПользователя); - Параметры_.Вставить("only_if_banned", Ложь); + Параметры_ = Новый Структура; + Параметры_.Вставить("parse_mode" , "Markdown"); + Параметры_.Вставить("chat_id" , IDЧата); + Параметры_.Вставить("user_id" , IDПользователя); + Параметры_.Вставить("only_if_banned", Ложь); - Ответ = OPI_Инструменты.Get(URL, Параметры_); + Ответ = OPI_Инструменты.Get(URL, Параметры_); - Возврат Ответ; + Возврат Ответ; КонецФункции @@ -459,23 +459,23 @@ , Знач ЛимитПользователей = 0) Экспорт URL = "api.telegram.org/bot" + Токен + "/createChatInviteLink"; - IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); + IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); - Параметры_ = Новый Структура; - Параметры_.Вставить("parse_mode", "Markdown"); - Параметры_.Вставить("chat_id" , IDЧата); - Параметры_.Вставить("name" , Заголовок); + Параметры_ = Новый Структура; + Параметры_.Вставить("parse_mode", "Markdown"); + Параметры_.Вставить("chat_id" , IDЧата); + Параметры_.Вставить("name" , Заголовок); Если ЗначениеЗаполнено(ДатаИстечения) Тогда ДатаИстечения = OPI_Инструменты.UNIXTime(ДатаИстечения); - Параметры_.Вставить("expire_date", ДатаИстечения); - КонецЕсли; + Параметры_.Вставить("expire_date", ДатаИстечения); + КонецЕсли; - Параметры_.Вставить("member_limit", ЛимитПользователей); + Параметры_.Вставить("member_limit", ЛимитПользователей); - Ответ = OPI_Инструменты.Get(URL, Параметры_); + Ответ = OPI_Инструменты.Get(URL, Параметры_); - Возврат Ответ; + Возврат Ответ; КонецФункции @@ -491,18 +491,18 @@ Функция ЗакрепитьСообщение(Знач Токен, Знач IDЧата, Знач IDСообщения) Экспорт URL = "api.telegram.org/bot" + Токен + "/pinChatMessage"; - IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); - IDСообщения = OPI_Инструменты.ЧислоВСтроку(IDСообщения); + IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); + IDСообщения = OPI_Инструменты.ЧислоВСтроку(IDСообщения); - Параметры_ = Новый Структура; - Параметры_.Вставить("parse_mode" , "Markdown"); - Параметры_.Вставить("chat_id" , IDЧата); - Параметры_.Вставить("message_id" , IDСообщения); - Параметры_.Вставить("disable_notification", Истина); + Параметры_ = Новый Структура; + Параметры_.Вставить("parse_mode" , "Markdown"); + Параметры_.Вставить("chat_id" , IDЧата); + Параметры_.Вставить("message_id" , IDСообщения); + Параметры_.Вставить("disable_notification", Истина); - Ответ = OPI_Инструменты.Get(URL, Параметры_); + Ответ = OPI_Инструменты.Get(URL, Параметры_); - Возврат Ответ; + Возврат Ответ; КонецФункции @@ -518,17 +518,17 @@ Функция ОткрепитьСообщение(Знач Токен, Знач IDЧата, Знач IDСообщения) Экспорт URL = "api.telegram.org/bot" + Токен + "/unpinChatMessage"; - IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); - IDСообщения = OPI_Инструменты.ЧислоВСтроку(IDСообщения); + IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); + IDСообщения = OPI_Инструменты.ЧислоВСтроку(IDСообщения); - Параметры_ = Новый Структура; - Параметры_.Вставить("parse_mode", "Markdown"); - Параметры_.Вставить("chat_id" , IDЧата); - Параметры_.Вставить("message_id", IDСообщения); + Параметры_ = Новый Структура; + Параметры_.Вставить("parse_mode", "Markdown"); + Параметры_.Вставить("chat_id" , IDЧата); + Параметры_.Вставить("message_id", IDСообщения); - Ответ = OPI_Инструменты.Get(URL, Параметры_); + Ответ = OPI_Инструменты.Get(URL, Параметры_); - Возврат Ответ; + Возврат Ответ; КонецФункции @@ -543,15 +543,15 @@ Функция ПолучитьЧислоУчастников(Знач Токен, Знач IDЧата) Экспорт URL = "api.telegram.org/bot" + Токен + "/getChatMemberCount"; - IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); + IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); - Параметры_ = Новый Структура; - Параметры_.Вставить("parse_mode", "Markdown"); - Параметры_.Вставить("chat_id" , IDЧата); + Параметры_ = Новый Структура; + Параметры_.Вставить("parse_mode", "Markdown"); + Параметры_.Вставить("chat_id" , IDЧата); - Ответ = OPI_Инструменты.Get(URL, Параметры_); + Ответ = OPI_Инструменты.Get(URL, Параметры_); - Возврат Ответ; + Возврат Ответ; КонецФункции @@ -569,55 +569,55 @@ // Соответствие из Строка - Обработанные данные с признаком достоверности Функция ОбработатьДанныеTMA(Знач СтрокаДанных, Знач Токен) Экспорт - СтрокаДанных = РаскодироватьСтроку(СтрокаДанных, СпособКодированияСтроки.КодировкаURL); - СтруктураДанных = OPI_Инструменты.ПараметрыЗапросаВСоответствие(СтрокаДанных); - Ключ = "WebAppData"; - Хэш = ""; + СтрокаДанных = РаскодироватьСтроку(СтрокаДанных, СпособКодированияСтроки.КодировкаURL); + СтруктураДанных = OPI_Инструменты.ПараметрыЗапросаВСоответствие(СтрокаДанных); + Ключ = "WebAppData"; + Хэш = ""; - Результат = OPI_Криптография.HMACSHA256(ПолучитьДвоичныеДанныеИзСтроки(Ключ), ПолучитьДвоичныеДанныеИзСтроки(Токен)); + Результат = OPI_Криптография.HMACSHA256(ПолучитьДвоичныеДанныеИзСтроки(Ключ), ПолучитьДвоичныеДанныеИзСтроки(Токен)); - ТЗнач = Новый ТаблицаЗначений; - ТЗнач.Колонки.Добавить("Ключ"); - ТЗнач.Колонки.Добавить("Значение"); + ТЗнач = Новый ТаблицаЗначений; + ТЗнач.Колонки.Добавить("Ключ"); + ТЗнач.Колонки.Добавить("Значение"); - Для Каждого Данные Из СтруктураДанных Цикл + Для Каждого Данные Из СтруктураДанных Цикл - НоваяСтрока = ТЗнач.Добавить(); - НоваяСтрока.Ключ = Данные.Ключ; - НоваяСтрока.Значение = Данные.Значение; + НоваяСтрока = ТЗнач.Добавить(); + НоваяСтрока.Ключ = Данные.Ключ; + НоваяСтрока.Значение = Данные.Значение; - КонецЦикла; + КонецЦикла; - ТЗнач.Сортировать("Ключ"); + ТЗнач.Сортировать("Ключ"); - СоответствиеВозврата = Новый Соответствие; - DCS = ""; + СоответствиеВозврата = Новый Соответствие; + DCS = ""; - Для Каждого СтрокаТЗ Из ТЗнач Цикл + Для Каждого СтрокаТЗ Из ТЗнач Цикл - Если СтрокаТЗ.Ключ <> "hash" Тогда - DCS = DCS + СтрокаТЗ.Ключ + "=" + СтрокаТЗ.Значение + Символы.ПС; - СоответствиеВозврата.Вставить(СтрокаТЗ.Ключ, СтрокаТЗ.Значение); - Иначе - Хэш = СтрокаТЗ.Значение; - КонецЕсли; + Если СтрокаТЗ.Ключ <> "hash" Тогда + DCS = DCS + СтрокаТЗ.Ключ + "=" + СтрокаТЗ.Значение + Символы.ПС; + СоответствиеВозврата.Вставить(СтрокаТЗ.Ключ, СтрокаТЗ.Значение); + Иначе + Хэш = СтрокаТЗ.Значение; + КонецЕсли; - КонецЦикла; + КонецЦикла; - DCS = Лев(DCS, СтрДлина(DCS) - 1); - Подпись = OPI_Криптография.HMACSHA256(Результат, ПолучитьДвоичныеДанныеИзСтроки(DCS)); + DCS = Лев(DCS, СтрДлина(DCS) - 1); + Подпись = OPI_Криптография.HMACSHA256(Результат, ПолучитьДвоичныеДанныеИзСтроки(DCS)); - Финал = ПолучитьHexСтрокуИзДвоичныхДанных(Подпись); + Финал = ПолучитьHexСтрокуИзДвоичныхДанных(Подпись); - Если Финал = вРег(Хэш) Тогда - Ответ = Истина; - Иначе - Ответ = Ложь; - КонецЕсли; + Если Финал = вРег(Хэш) Тогда + Ответ = Истина; + Иначе + Ответ = Ложь; + КонецЕсли; - СоответствиеВозврата.Вставить("passed", Ответ); + СоответствиеВозврата.Вставить("passed", Ответ); - Возврат СоответствиеВозврата; + Возврат СоответствиеВозврата; КонецФункции @@ -815,25 +815,25 @@ , Знач ПодСообщением = Ложь , Знач ОднаПодОдной = Истина) Экспорт - Если ОднаПодОдной Тогда + Если ОднаПодОдной Тогда Строки = СоздатьВысокуюКлавиатуру(МассивКнопок); - Иначе + Иначе Строки = СоздатьДлиннуюКлваиатуру(МассивКнопок); - КонецЕсли; + КонецЕсли; - Если ПодСообщением Тогда - СтруктураПараметра = Новый Структура("inline_keyboard,rows", Строки, 1); - Иначе - СтруктураПараметра = Новый Структура("keyboard,resize_keyboard", Строки, Истина); - КонецЕсли; + Если ПодСообщением Тогда + СтруктураПараметра = Новый Структура("inline_keyboard,rows", Строки, 1); + Иначе + СтруктураПараметра = Новый Структура("keyboard,resize_keyboard", Строки, Истина); + КонецЕсли; - ЗаписьJSON = Новый ЗаписьJSON; - ПЗJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, , , ЭкранированиеСимволовJSON.СимволыВнеASCII); - ЗаписьJSON.УстановитьСтроку(ПЗJSON); + ЗаписьJSON = Новый ЗаписьJSON; + ПЗJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, , , ЭкранированиеСимволовJSON.СимволыВнеASCII); + ЗаписьJSON.УстановитьСтроку(ПЗJSON); - ЗаписатьJSON(ЗаписьJSON, СтруктураПараметра); + ЗаписатьJSON(ЗаписьJSON, СтруктураПараметра); - Возврат ЗаписьJSON.Закрыть(); + Возврат ЗаписьJSON.Закрыть(); КонецФункции @@ -846,34 +846,34 @@ Функция ОтправитьФайл(Знач Токен, Знач IDЧата, Знач Текст, Знач Файл, Знач Вид, Знач Клавиатура) IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); - Расширение = ""; + Расширение = ""; Метод = ""; ОпределитьМетодОтправки(Вид, Метод, Расширение); - OPI_Инструменты.ЗаменитьСпецсимволы(Текст); + OPI_Инструменты.ЗаменитьСпецсимволы(Текст); - Если Не ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда - ТекущийФайл = Новый Файл(Файл); - Расширение = ?(Вид = "document" Или Вид = "animation", ТекущийФайл.Расширение, ""); - Файл = OPI_Инструменты.ПолучитьДвоичныеДанные(Файл); - КонецЕсли; + Если Не ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда + ТекущийФайл = Новый Файл(Файл); + Расширение = ?(Вид = "document" Или Вид = "animation", ТекущийФайл.Расширение, ""); + Файл = OPI_Инструменты.ПолучитьДвоичныеДанные(Файл); + КонецЕсли; - Расширение = СтрЗаменить(Расширение, ".", "___"); + Расширение = СтрЗаменить(Расширение, ".", "___"); - Параметры_ = Новый Структура; - Параметры_.Вставить("parse_mode" , "Markdown"); - Параметры_.Вставить("caption" , Текст); - Параметры_.Вставить("reply_markup", Клавиатура); + Параметры_ = Новый Структура; + Параметры_.Вставить("parse_mode" , "Markdown"); + Параметры_.Вставить("caption" , Текст); + Параметры_.Вставить("reply_markup", Клавиатура); ДобавитьИдентификаторЧата(IDЧата, Параметры_); - СтруктураФайлов = Новый Структура; - СтруктураФайлов.Вставить(Вид + Расширение, Файл); + СтруктураФайлов = Новый Структура; + СтруктураФайлов.Вставить(Вид + Расширение, Файл); URL = "api.telegram.org/bot" + Токен + Метод; - Ответ = OPI_Инструменты.PostMultipart(URL, Параметры_, СтруктураФайлов, "mixed"); + Ответ = OPI_Инструменты.PostMultipart(URL, Параметры_, СтруктураФайлов, "mixed"); - Возврат Ответ; + Возврат Ответ; КонецФункции @@ -1003,7 +1003,7 @@ Процедура СформироватьМассивМедиа(Знач СоответствиеФайлов, Знач Текст, СтруктураФайлов, Медиа) - Счетчик = 0; + Счетчик = 0; Для Каждого ТекущийФайл Из СоответствиеФайлов Цикл @@ -1069,7 +1069,7 @@ Метод = "/sendDocument"; ИначеЕсли Вид = "animation" Тогда Метод = "/sendAnimation"; - Расширение = ".gif"; + Расширение = ".gif"; Иначе ВызватьИсключение "Некорректный вид отправки"; КонецЕсли; diff --git a/OInt/core/Modules/OPI_Twitter.os b/OInt/core/Modules/OPI_Twitter.os index a455f8b817..2976c9f703 100644 --- a/OInt/core/Modules/OPI_Twitter.os +++ b/OInt/core/Modules/OPI_Twitter.os @@ -337,7 +337,7 @@ СоответствиеMIME.Вставить("tweet_video", "video/mp4"); СоответствиеMIME.Вставить("tweet_gif" , "image/gif"); - Файл = OPI_Инструменты.ПолучитьДвоичныеДанные(Файл); + Файл = OPI_Инструменты.ПолучитьДвоичныеДанные(Файл); Параметры_ = ПолучитьСтандартныеПараметры(Параметры); URL = "https://upload.twitter.com/1.1/media/upload.json"; Размер = Файл.Размер(); diff --git a/OInt/core/Modules/OPI_VK.os b/OInt/core/Modules/OPI_VK.os index 98016662f4..337c28f251 100644 --- a/OInt/core/Modules/OPI_VK.os +++ b/OInt/core/Modules/OPI_VK.os @@ -160,10 +160,10 @@ Если Не Картинка = "" Тогда Если ТипЗнч(Картинка) = Тип("Строка") Тогда - Путь = Картинка; - Картинка = OPI_Инструменты.ПолучитьДвоичныеДанные(Картинка); + Путь = Картинка; + Картинка = OPI_Инструменты.ПолучитьДвоичныеДанные(Картинка); Иначе - Путь = ("image.jpeg"); + Путь = ("image.jpeg"); КонецЕсли; Файлы = Новый Соответствие; @@ -171,16 +171,16 @@ Ответ = OPI_Инструменты.PostMultipart(URL, Параметры_, Файлы); - Параметры_.Вставить(Hash , Ответ[Hash]); - Параметры_.Вставить(Photo , Ответ[Photo]); + Параметры_.Вставить(Hash , Ответ[Hash]); + Параметры_.Вставить(Photo, Ответ[Photo]); - Ответ = OPI_Инструменты.Get("api.vk.com/method/polls.savePhoto", Параметры_); - IDФото = Ответ.Получить(Response)["id"]; + Ответ = OPI_Инструменты.Get("api.vk.com/method/polls.savePhoto", Параметры_); + IDФото = Ответ.Получить(Response)["id"]; КонецЕсли; - Параметры_.Вставить("is_anonymous" , 1); - Параметры_.Вставить("is_multiple" , 0); + Параметры_.Вставить("is_anonymous", 1); + Параметры_.Вставить("is_multiple" , 0); Ответы = "["; Первый = Истина; @@ -199,12 +199,12 @@ Ответы = Ответы + "]"; - Параметры_.Вставить("add_answers" , Ответы); - Параметры_.Вставить("photo_id" , OPI_Инструменты.ЧислоВСтроку(IDФото)); - Параметры_.Вставить("question" , Вопрос); + Параметры_.Вставить("add_answers", Ответы); + Параметры_.Вставить("photo_id" , OPI_Инструменты.ЧислоВСтроку(IDФото)); + Параметры_.Вставить("question" , Вопрос); - Опрос = OPI_Инструменты.Get("api.vk.com/method/polls.create", Параметры_); - ОпросСоответствие = Опрос.Получить(Response); + Опрос = OPI_Инструменты.Get("api.vk.com/method/polls.create", Параметры_); + ОпросСоответствие = Опрос.Получить(Response); ОпросID = "poll" + OPI_Инструменты.ЧислоВСтроку(ОпросСоответствие.Получить("owner_id")) @@ -230,13 +230,13 @@ // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК Функция СоздатьАльбом(Знач Наименование, Знач Описание = "", Знач Параметры = "") Экспорт - Параметры_ = ПолучитьСтандартныеПараметры(Параметры); + Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("title" , Наименование); Параметры_.Вставить("description" , Описание); Параметры_.Вставить("upload_by_admins_only", 1); - Ответ = OPI_Инструменты.Get("api.vk.com/method/photos.createAlbum", Параметры_); + Ответ = OPI_Инструменты.Get("api.vk.com/method/photos.createAlbum", Параметры_); Возврат Ответ; @@ -273,9 +273,9 @@ Функция СоздатьИсторию(Знач Картинка, Знач URL = "", Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); - Параметры_.Вставить("link_text" , "more"); - Параметры_.Вставить("link_url" , URL); - Параметры_.Вставить("add_to_news" , "1"); + Параметры_.Вставить("link_text" , "more"); + Параметры_.Вставить("link_url" , URL); + Параметры_.Вставить("add_to_news", "1"); Ответ = ЗагрузитьФотоНаСервер(Картинка, Параметры_, "История"); Возврат Ответ; @@ -296,8 +296,8 @@ Параметры_ = ПолучитьСтандартныеПараметры(Параметры); - Параметры_.Вставить("album_id" , OPI_Инструменты.ЧислоВСтроку(IDАльбома)); - Параметры_.Вставить("caption" , Описание); + Параметры_.Вставить("album_id", OPI_Инструменты.ЧислоВСтроку(IDАльбома)); + Параметры_.Вставить("caption" , Описание); Возврат ЗагрузитьФотоНаСервер(Картинка, Параметры_, "Альбом"); @@ -338,8 +338,8 @@ Функция СоздатьОбсуждение(Знач Наименование, Знач ТекстПервогоСообщения, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); - Параметры_.Вставить("title" , Наименование); - Параметры_.Вставить("text" , ТекстПервогоСообщения); + Параметры_.Вставить("title", Наименование); + Параметры_.Вставить("text" , ТекстПервогоСообщения); Ответ = OPI_Инструменты.Get("api.vk.com/method/board.addTopic", Параметры_); @@ -399,8 +399,8 @@ Функция НаписатьВОбсуждение(Знач IDОбсуждения, Знач Текст, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); - Параметры_.Вставить("topic_id" , OPI_Инструменты.ЧислоВСтроку(IDОбсуждения)); - Параметры_.Вставить("message" , Текст); + Параметры_.Вставить("topic_id", OPI_Инструменты.ЧислоВСтроку(IDОбсуждения)); + Параметры_.Вставить("message" , Текст); Ответ = OPI_Инструменты.Get("api.vk.com/method/board.createComment", Параметры_); @@ -577,14 +577,14 @@ Параметры_ = ПолучитьСтандартныеПараметры(Параметры); - ДатаНачала = Формат(ДатаНачала - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0"); - ДатаОкончания = Формат(ДатаОкончания - дата(1970, 1, 1, 1, 0, 0), "ЧГ=0"); + ДатаНачала = Формат(ДатаНачала - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0"); + ДатаОкончания = Формат(ДатаОкончания - дата(1970, 1, 1, 1, 0, 0), "ЧГ=0"); - Параметры_.Вставить("timestamp_from" , ДатаНачала); - Параметры_.Вставить("timestamp_to" , ДатаОкончания); - Параметры_.Вставить("stats_groups" , "visitors, reach, activity"); + Параметры_.Вставить("timestamp_from", ДатаНачала); + Параметры_.Вставить("timestamp_to" , ДатаОкончания); + Параметры_.Вставить("stats_groups" , "visitors, reach, activity"); - Ответ = OPI_Инструменты.Get("api.vk.com/method/stats.get", Параметры_); + Ответ = OPI_Инструменты.Get("api.vk.com/method/stats.get", Параметры_); Возврат Ответ; @@ -631,8 +631,8 @@ СтрокаНомеров = СтрСоединить(МассивНабора, ","); Параметры_.Вставить("post_ids", СтрокаНомеров); - Статистика = OPI_Инструменты.Get("api.vk.com/method/stats.getPostReach", Параметры_); - МассивСтатистики = Статистика[Response]; + Статистика = OPI_Инструменты.Get("api.vk.com/method/stats.getPostReach", Параметры_); + МассивСтатистики = Статистика[Response]; Для Каждого ЭлементСтатистики Из МассивСтатистики Цикл МассивОтветов.Добавить(ЭлементСтатистики); @@ -758,8 +758,9 @@ Параметры_.Вставить("account_id", OPI_Инструменты.ЧислоВСтроку(IDКабинета)); - МассивСтруктур = Новый Массив; - СтруктураКампании = Новый Структура; + МассивСтруктур = Новый Массив; + СтруктураКампании = Новый Структура; + СтруктураКампании.Вставить("ad_id" , OPI_Инструменты.ЧислоВСтроку(IDОбъявления)); СтруктураКампании.Вставить("status" , 0); @@ -1460,8 +1461,8 @@ Файлы.Вставить(КлючКартинка, ЗначениеКартинка); - Ответ = OPI_Инструменты.Get(Загрузка, Параметры); - URL = Ответ[Response]["upload_url"]; + Ответ = OPI_Инструменты.Get(Загрузка, Параметры); + URL = Ответ[Response]["upload_url"]; Параметры.Вставить("upload_url", URL); Ответ = OPI_Инструменты.PostMultipart(URL, Параметры, Файлы); @@ -1635,9 +1636,9 @@ СерверФото = OPI_Инструменты.ЧислоВСтроку(Ответ[Serv]); - Параметры.Вставить(Hash , Ответ[Hash]); - Параметры.Вставить(Фото , Ответ[Фото]); - Параметры.Вставить(Serv , СерверФото); + Параметры.Вставить(Hash, Ответ[Hash]); + Параметры.Вставить(Фото, Ответ[Фото]); + Параметры.Вставить(Serv, СерверФото); Идентификатор = Ответ.Получить(Aid); Идентификатор = OPI_Инструменты.ЧислоВСтроку(Идентификатор); diff --git a/OInt/core/Modules/OPI_Viber.os b/OInt/core/Modules/OPI_Viber.os index fb2b6c2b82..4e63e97c6e 100644 --- a/OInt/core/Modules/OPI_Viber.os +++ b/OInt/core/Modules/OPI_Viber.os @@ -64,9 +64,8 @@ // ДвоичныеДанные, Неопределено, Произвольный - Получить информацию о канале Функция ПолучитьИнформациюОКанале(Знач Токен) Экспорт - Возврат OPI_Инструменты.Get("https://chatapi.viber.com/pa/get_account_info" - , - , ТокенВЗаголовки(Токен)); + URL = "https://chatapi.viber.com/pa/get_account_info"; + Возврат OPI_Инструменты.Get(URL, , ТокенВЗаголовки(Токен)); КонецФункции @@ -80,12 +79,12 @@ // Произвольный, HTTPОтвет - Ответ сервера Viber Функция ПолучитьДанныеПользователя(Знач Токен, Знач IDПользователя) Экспорт + URL = "https://chatapi.viber.com/pa/get_user_details"; + СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("id", IDПользователя); - Ответ = OPI_Инструменты.Post("https://chatapi.viber.com/pa/get_user_details" - , СтруктураПараметров - , ТокенВЗаголовки(Токен)); + Ответ = OPI_Инструменты.Post(URL, СтруктураПараметров, ТокенВЗаголовки(Токен)); Попытка Возврат OPI_Инструменты.JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные()); @@ -105,6 +104,8 @@ // Произвольный, HTTPОтвет - Ответ сервера Viber Функция ПолучитьОнлайнПользователей(Знач Токен, Знач IDПользователей) Экспорт + URL = "https://chatapi.viber.com/pa/get_online"; + Если Не ТипЗнч(IDПользователей) = Тип("Массив") Тогда ОдиночныйID = IDПользователей; @@ -116,9 +117,7 @@ СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("ids", IDПользователей); - Ответ = OPI_Инструменты.Post("https://chatapi.viber.com/pa/get_online" - , СтруктураПараметров - , ТокенВЗаголовки(Токен)); + Ответ = OPI_Инструменты.Post(URL, СтруктураПараметров, ТокенВЗаголовки(Токен)); Попытка Возврат OPI_Инструменты.JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные()); diff --git a/OInt/core/Modules/OPI_YandexDisk.os b/OInt/core/Modules/OPI_YandexDisk.os index 318e3049f8..d3812cd8cc 100644 --- a/OInt/core/Modules/OPI_YandexDisk.os +++ b/OInt/core/Modules/OPI_YandexDisk.os @@ -44,12 +44,12 @@ // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Строка, Произвольный - Ответ сервера Yandex Функция ПолучитьИнформациюОДиске(Знач Токен) Экспорт - - Заголовки = ЗаголовокАвторизации(Токен); - Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk", , Заголовки); - - Возврат Ответ; - + + Заголовки = ЗаголовокАвторизации(Токен); + Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk", , Заголовки); + + Возврат Ответ; + КонецФункции // Создать папку. @@ -61,21 +61,21 @@ // Возвращаемое значение: // Строка, Произвольный, ДвоичныеДанные, HTTPОтвет, Неопределено - Ответ сервера Yandex Функция СоздатьПапку(Знач Токен, Знач Путь) Экспорт - - Заголовки = ЗаголовокАвторизации(Токен); - URL = "https://cloud-api.yandex.net/v1/disk/resources"; - Href = "href"; - - Параметры = Новый Структура; - Параметры.Вставить("path", Путь); - - Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); - Ответ = OPI_Инструменты.Put(URL + Параметры, , Заголовки, Ложь); + + Заголовки = ЗаголовокАвторизации(Токен); + URL = "https://cloud-api.yandex.net/v1/disk/resources"; + Href = "href"; + + Параметры = Новый Структура; + Параметры.Вставить("path", Путь); + + Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); + Ответ = OPI_Инструменты.Put(URL + Параметры, , Заголовки, Ложь); URLОтвета = Ответ[Href]; Ответ = OPI_Инструменты.Get(URLОтвета, , Заголовки); - Возврат Ответ; + Возврат Ответ; КонецФункции @@ -88,14 +88,14 @@ // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Строка, Произвольный - Ответ сервера Yandex Функция ПолучитьОбъект(Знач Токен, Знач Путь) Экспорт - - Заголовки = ЗаголовокАвторизации(Токен); - Параметры = Новый Структура; - Параметры.Вставить("path", Путь); - - Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources", Параметры, Заголовки); - - Возврат Ответ; + + Заголовки = ЗаголовокАвторизации(Токен); + Параметры = Новый Структура; + Параметры.Вставить("path", Путь); + + Ответ = OPI_Инструменты.Get("https://cloud-api.yandex.net/v1/disk/resources", Параметры, Заголовки); + + Возврат Ответ; КонецФункции @@ -109,16 +109,16 @@ // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Строка, Произвольный - Ответ сервера Yandex Функция УдалитьОбъект(Знач Токен, Знач Путь, Знач ВКорзину = Истина) Экспорт - - Заголовки = ЗаголовокАвторизации(Токен); - - Параметры = Новый Структура; - Параметры.Вставить("path" , Путь); - Параметры.Вставить("permanently", Не ВКорзину); - - Ответ = OPI_Инструменты.Delete("https://cloud-api.yandex.net/v1/disk/resources", Параметры, Заголовки); - - Возврат Ответ; + + Заголовки = ЗаголовокАвторизации(Токен); + + Параметры = Новый Структура; + Параметры.Вставить("path" , Путь); + Параметры.Вставить("permanently", Не ВКорзину); + + Ответ = OPI_Инструменты.Delete("https://cloud-api.yandex.net/v1/disk/resources", Параметры, Заголовки); + + Возврат Ответ; КонецФункции @@ -297,8 +297,8 @@ URL = "https://cloud-api.yandex.net/v1/disk/resources/upload"; Параметры = Новый Структура; - Параметры.Вставить("url" , КодироватьСтроку(Адрес, СпособКодированияСтроки.URLВКодировкеURL)); - Параметры.Вставить("path" , Путь); + Параметры.Вставить("url" , КодироватьСтроку(Адрес, СпособКодированияСтроки.URLВКодировкеURL)); + Параметры.Вставить("path", Путь); Параметры = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры); Ответ = OPI_Инструменты.Post(URL + Параметры, , Заголовки, Ложь); @@ -467,12 +467,12 @@ #Область СлужебныеПроцедурыИФункции Функция ЗаголовокАвторизации(Знач Токен) - - Заголовки = Новый Соответствие; - Заголовки.Вставить("Authorization", "OAuth " + Токен); - - Возврат Заголовки; - + + Заголовки = Новый Соответствие; + Заголовки.Вставить("Authorization", "OAuth " + Токен); + + Возврат Заголовки; + КонецФункции Функция ПереключениеОбщегоДоступа(Знач Токен, Знач Путь, Знач ОбщийДоступ) diff --git a/OInt/core/Modules/OPI_YandexID.os b/OInt/core/Modules/OPI_YandexID.os index 8bf74f647b..ecd2906351 100644 --- a/OInt/core/Modules/OPI_YandexID.os +++ b/OInt/core/Modules/OPI_YandexID.os @@ -43,7 +43,7 @@ Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/device/code", Параметры, , Ложь); Возврат Ответ; - + КонецФункции // Преобразовать код в токен. @@ -56,17 +56,17 @@ // Возвращаемое значение: // Строка, Произвольный, Неопределено, ДвоичныеДанные, HTTPОтвет - Преобразовать код в токен Функция ПреобразоватьКодВТокен(Знач ClientId, Знач ClientSecret, Знач КодУстройства) Экспорт - - Параметры = Новый Структура; - Параметры.Вставить("grant_type" , "device_code"); - Параметры.Вставить("code" , КодУстройства); - Параметры.Вставить("client_id" , ClientId); - Параметры.Вставить("client_secret" , ClientSecret); - - Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь); - - Возврат Ответ; - + + Параметры = Новый Структура; + Параметры.Вставить("grant_type" , "device_code"); + Параметры.Вставить("code" , КодУстройства); + Параметры.Вставить("client_id" , ClientId); + Параметры.Вставить("client_secret" , ClientSecret); + + Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь); + + Возврат Ответ; + КонецФункции // Обновить токен. diff --git a/OInt/tests/Modules/internal/OPI_Тесты.os b/OInt/tests/Modules/internal/OPI_Тесты.os index 3a415ca0ea..ca70d806a0 100644 --- a/OInt/tests/Modules/internal/OPI_Тесты.os +++ b/OInt/tests/Modules/internal/OPI_Тесты.os @@ -65,9 +65,7 @@ OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьИнформациюБота"); - OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено(); - OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина); - OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["username"]).Заполнено(); + Проверка_ТелеграмИнформацияБота(Результат); OPI_Инструменты.Пауза(5); @@ -82,9 +80,7 @@ OPI_Telegram.УдалитьWebhook(Токен); - OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие") .Заполнено(); - OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина); - OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]).ИмеетТип("Массив"); + Проверка_ТелеграмМассив(Результат); OPI_Инструменты.Пауза(5); @@ -98,10 +94,7 @@ OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьWebhook"); - OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено(); - OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина); - OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]).Равно(Истина); - OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["description"]).Равно("Webhook was set"); + Проверка_ТелеграмУстановкаВебхук(Результат); OPI_Инструменты.Пауза(5); @@ -114,10 +107,7 @@ OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьWebhook"); - OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено(); - OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина); - OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]).Равно(Истина); - OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["description"]).Равно("Webhook was deleted"); + Проверка_ТелеграмУдалениеВебхук(Результат); OPI_Инструменты.Пауза(5); @@ -2635,6 +2625,40 @@ КонецПроцедуры +Процедура Проверка_ТелеграмИнформацияБота(Знач Результат) + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено(); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]["username"]).Заполнено(); + +КонецПроцедуры + +Процедура Проверка_ТелеграмМассив(Результат) + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие") .Заполнено(); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]).ИмеетТип("Массив"); + +КонецПроцедуры + +Процедура Проверка_ТелеграмУстановкаВебхук(Знач Результат) + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено(); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]).Равно(Истина); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["description"]).Равно("Webhook was set"); + +КонецПроцедуры + +Процедура Проверка_ТелеграмУдалениеВебхук(Знач Результат) + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено(); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["result"]).Равно(Истина); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["description"]).Равно("Webhook was deleted"); + +КонецПроцедуры + Процедура Проверка_ВКИстина(Знач Результат) OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено(); diff --git a/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os b/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os index 30b0fd76ec..27ad07a702 100644 --- a/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os +++ b/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os @@ -41,8 +41,8 @@ Функция ОжидаетЧто(Значение) Экспорт Попытка - - Модуль = ПолучитьОбщийМодуль("ЮТест"); + + Модуль = ПолучитьОбщийМодуль("ЮТест"); Ожидаем = ТипЗнч(Модуль) = Тип("ОбщийМодуль"); Возврат Модуль.ОжидаетЧто(Значение); @@ -54,8 +54,8 @@ Функция СформироватьТестыЯкс() Экспорт - Модуль = ПолучитьОбщийМодуль("ЮТТесты"); - МассивРазделов = ПолучитьМассивРазделовТестирования(); + Модуль = ПолучитьОбщийМодуль("ЮТТесты"); + МассивРазделов = ПолучитьМассивРазделовТестирования(); ТаблицаТестов = ПолучитьТаблицуТестов(); Для Каждого Раздел Из МассивРазделов Цикл @@ -96,7 +96,7 @@ КонецФункции Функция ПолучитьДвоичные(Параметр) Экспорт - + Путь = ПутьКФайлуДанных(); ПараметрЛокальный = Параметр + "Local"; ЗначениеОсновной = ПолучитьЗначениеИзФайла(Параметр , Путь); @@ -177,10 +177,10 @@ #Область СлужебныеПроцедурыИФункции Функция ПолучитьЗначениеИзФайла(Параметр, Путь) - + Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь); Возврат ?(Значения.Свойство(Параметр), Значения[Параметр], ""); - + КонецФункции Функция ПутьКФайлуДанных() @@ -230,8 +230,8 @@ ТаблицаТестов.Колонки.Добавить("Метод"); ТаблицаТестов.Колонки.Добавить("Синоним"); ТаблицаТестов.Колонки.Добавить("Раздел"); - - НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьИнформациюБота" , "Получить информацию бота" , Телеграм); + + НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьИнформациюБота" , "Получить информацию бота" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьОбновления" , "Получить обновления" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_УстановитьWebhook" , "Установить Webhook" , Телеграм); НовыйТест(ТаблицаТестов, "Телеграм_УдалитьWebhook" , "Удалить Webhook" , Телеграм); @@ -323,10 +323,10 @@ КонецФункции Функция ПолучитьОбщийМодуль(Знач Имя) - - Модуль = Вычислить(Имя); - - Возврат Модуль; + + Модуль = Вычислить(Имя); + + Возврат Модуль; КонецФункции Процедура НовыйТест(ТаблицаЗначений, Знач Метод, Знач Синоним, Знач Раздел) @@ -339,7 +339,7 @@ КонецПроцедуры Процедура ЗаписатьПараметрВФайл(Знач Параметр, Знач Значение, Знач Путь) - + Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь); Значения.Вставить(Параметр, Значение); diff --git a/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os b/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os index 6266389fdc..eef5eb542b 100644 --- a/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os +++ b/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os @@ -49,15 +49,15 @@ #Область ЗапросыСТелом Функция Post(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "", Знач JSON = Истина) Экспорт - Возврат ВыполнитьЗапросСТелом(URL, "POST", Параметры, ДопЗаголовки, JSON); + Возврат ВыполнитьЗапросСТелом(URL, "POST", Параметры, ДопЗаголовки, JSON); КонецФункции Функция Patch(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "", Знач JSON = Истина) Экспорт - Возврат ВыполнитьЗапросСТелом(URL, "PATCH", Параметры, ДопЗаголовки, JSON); + Возврат ВыполнитьЗапросСТелом(URL, "PATCH", Параметры, ДопЗаголовки, JSON); КонецФункции Функция Put(Знач URL, Знач Параметры = "", Знач ДопЗаголовки = "", Знач JSON = Истина) Экспорт - Возврат ВыполнитьЗапросСТелом(URL, "PUT", Параметры, ДопЗаголовки, JSON); + Возврат ВыполнитьЗапросСТелом(URL, "PUT", Параметры, ДопЗаголовки, JSON); КонецФункции #КонецОбласти @@ -96,21 +96,21 @@ Функция ПараметрыЗапросаВСоответствие(Знач СтрокаПараметров) Экспорт - СоответствиеВозврата = Новый Соответствие; - КоличествоЧастей = 2; - МассивПараметров = СтрРазделить(СтрокаПараметров, "&", Ложь); + СоответствиеВозврата = Новый Соответствие; + КоличествоЧастей = 2; + МассивПараметров = СтрРазделить(СтрокаПараметров, "&", Ложь); - Для Каждого Параметр Из МассивПараметров Цикл + Для Каждого Параметр Из МассивПараметров Цикл - МассивКлючЗначение = СтрРазделить(Параметр, "="); + МассивКлючЗначение = СтрРазделить(Параметр, "="); - Если МассивКлючЗначение.Количество() = КоличествоЧастей Тогда - СоответствиеВозврата.Вставить(МассивКлючЗначение[0], МассивКлючЗначение[1]); - КонецЕсли; + Если МассивКлючЗначение.Количество() = КоличествоЧастей Тогда + СоответствиеВозврата.Вставить(МассивКлючЗначение[0], МассивКлючЗначение[1]); + КонецЕсли; - КонецЦикла; + КонецЦикла; - Возврат СоответствиеВозврата; + Возврат СоответствиеВозврата; КонецФункции @@ -119,22 +119,22 @@ КонецФункции Функция UNIXTime(Знач Дата) Экспорт - Возврат Формат(Дата - Дата(1970, 1, 1, 1, 0, 0), "ЧЦ=10; ЧДЦ=0; ЧГ=0"); + Возврат Формат(Дата - Дата(1970, 1, 1, 1, 0, 0), "ЧЦ=10; ЧДЦ=0; ЧГ=0"); КонецФункции Процедура ЗаменитьСпецСимволы(Текст) Экспорт - МассивСимволов = Новый Соответствие; - МассивСимволов.Вставить("<", "<"); - МассивСимволов.Вставить(">", ">"); - МассивСимволов.Вставить("&", "&"); - МассивСимволов.Вставить("_", " "); - МассивСимволов.Вставить("[", "("); - МассивСимволов.Вставить("]", ")"); + МассивСимволов = Новый Соответствие; + МассивСимволов.Вставить("<", "<"); + МассивСимволов.Вставить(">", ">"); + МассивСимволов.Вставить("&", "&"); + МассивСимволов.Вставить("_", " "); + МассивСимволов.Вставить("[", "("); + МассивСимволов.Вставить("]", ")"); - Для Каждого СимволМассива Из МассивСимволов Цикл - Текст = СтрЗаменить(Текст, СимволМассива.Ключ, СимволМассива.Значение); - КонецЦикла; + Для Каждого СимволМассива Из МассивСимволов Цикл + Текст = СтрЗаменить(Текст, СимволМассива.Ключ, СимволМассива.Значение); + КонецЦикла; КонецПроцедуры @@ -178,32 +178,32 @@ Функция ПараметрыЗапросаВСтроку(Знач Параметры) Экспорт - Если Параметры.Количество() = 0 Тогда - Возврат ""; - КонецЕсли; + Если Параметры.Количество() = 0 Тогда + Возврат ""; + КонецЕсли; - СтрокаПараметров = "?"; + СтрокаПараметров = "?"; - Для Каждого Параметр Из Параметры Цикл - СтрокаПараметров = СтрокаПараметров + Для Каждого Параметр Из Параметры Цикл + СтрокаПараметров = СтрокаПараметров + Параметр.Ключ + "=" + КодироватьСтроку(Параметр.Значение, - СпособКодированияСтроки.КодировкаURL) + СпособКодированияСтроки.КодировкаURL) + "&"; - КонецЦикла; + КонецЦикла; - СтрокаПараметров = Лев(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1); + СтрокаПараметров = Лев(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1); - Возврат СтрокаПараметров; + Возврат СтрокаПараметров; КонецФункции Функция РазбитьURL(Знач URL) Экспорт - URL = СтрЗаменить(URL, "https://", ""); - URL = СтрЗаменить(URL, "http://", ""); - URL = СтрЗаменить(URL, ":443", ""); + URL = СтрЗаменить(URL, "https://", ""); + URL = СтрЗаменить(URL, "http://", ""); + URL = СтрЗаменить(URL, ":443", ""); Адрес = Прав(URL, СтрДлина(URL) - СтрНайти(URL, "/", НаправлениеПоиска.СНачала) + 1); Сервер = Лев(URL, СтрНайти(URL, "/", НаправлениеПоиска.СНачала) - 1); @@ -214,45 +214,45 @@ Сервер = "https://" + Сервер; КонецПопытки; - СтруктураВозврата = Новый Структура; - СтруктураВозврата.Вставить("Сервер", Сервер); - СтруктураВозврата.Вставить("Адрес" , Адрес); + СтруктураВозврата = Новый Структура; + СтруктураВозврата.Вставить("Сервер", Сервер); + СтруктураВозврата.Вставить("Адрес" , Адрес); - Возврат СтруктураВозврата; + Возврат СтруктураВозврата; КонецФункции Функция JsonВСтруктуру(Знач Текст) Экспорт - Если Не ЗначениеЗаполнено(Текст) Тогда - Возврат ""; - КонецЕсли; + Если Не ЗначениеЗаполнено(Текст) Тогда + Возврат ""; + КонецЕсли; - ЧтениеJSON = Новый ЧтениеJSON; - ЧтениеJSON.УстановитьСтроку(ПолучитьСтрокуИзДвоичныхДанных(Текст)); + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.УстановитьСтроку(ПолучитьСтрокуИзДвоичныхДанных(Текст)); - Данные = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO); - ЧтениеJSON.Закрыть(); + Данные = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO); + ЧтениеJSON.Закрыть(); - Возврат Данные; + Возврат Данные; КонецФункции Функция JSONСтрокой(Знач Данные) Экспорт - ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Windows, " ", Истина, ЭкранированиеСимволовJSON.Нет, - Ложь, Ложь, Ложь, Ложь); + ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Windows, " ", Истина, ЭкранированиеСимволовJSON.Нет, + Ложь, Ложь, Ложь, Ложь); - ЗаписьJSON = Новый ЗаписьJSON; - ЗаписьJSON.УстановитьСтроку(ПараметрыJSON); + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.УстановитьСтроку(ПараметрыJSON); - ЗаписатьJSON(ЗаписьJSON, Данные); - Возврат ЗаписьJSON.Закрыть(); + ЗаписатьJSON(ЗаписьJSON, Данные); + Возврат ЗаписьJSON.Закрыть(); КонецФункции Функция ЧислоВСтроку(Знач Число) Экспорт - Возврат СтрЗаменить(Строка(Число), Символы.НПП, ""); + Возврат СтрЗаменить(Строка(Число), Символы.НПП, ""); КонецФункции Функция ПрочитатьJSONФайл(Знач Путь) Экспорт @@ -268,37 +268,37 @@ КонецФункции Функция ПолучитьДвоичныеДанные(Знач Значение) Экспорт - - Попытка - - Если ТипЗнч(Значение) <> Тип("ДвоичныеДанные") Тогда - - Файл = Новый Файл(Значение); - - Если Файл.Существует() Тогда - Возврат Новый ДвоичныеДанные(Значение); - Иначе - - ИВФ = ПолучитьИмяВременногоФайла(); - КопироватьФайл(Значение, ИВФ); - Двоичные = Новый ДвоичныеДанные(ИВФ); - - УдалитьФайлы(ИВФ); - - Возврат Двоичные; - - КонецЕсли; - - Иначе - - Возврат Значение; - - КонецЕсли; - - Исключение - ВызватьИсключение "Ошибка получения данных файла из параметра"; - КонецПопытки - + + Попытка + + Если ТипЗнч(Значение) <> Тип("ДвоичныеДанные") Тогда + + Файл = Новый Файл(Значение); + + Если Файл.Существует() Тогда + Возврат Новый ДвоичныеДанные(Значение); + Иначе + + ИВФ = ПолучитьИмяВременногоФайла(); + КопироватьФайл(Значение, ИВФ); + Двоичные = Новый ДвоичныеДанные(ИВФ); + + УдалитьФайлы(ИВФ); + + Возврат Двоичные; + + КонецЕсли; + + Иначе + + Возврат Значение; + + КонецЕсли; + + Исключение + ВызватьИсключение "Ошибка получения данных файла из параметра"; + КонецПопытки + КонецФункции #КонецОбласти @@ -718,175 +718,175 @@ Функция РаспаковатьОтвет(Ответ) - Попытка - Возврат ПрочитатьGZip(Ответ.ПолучитьТелоКакДвоичныеДанные()); - Исключение - Возврат Ответ; - КонецПопытки; + Попытка + Возврат ПрочитатьGZip(Ответ.ПолучитьТелоКакДвоичныеДанные()); + Исключение + Возврат Ответ; + КонецПопытки; КонецФункции Функция ПрочитатьGZip(СжатыеДанные) Экспорт - РазмерПрефиксаGZip = 10; - РазмерПостфиксаGZip = 8; - - РазмерДД = ZipРазмерDD(); - РазмерСДХ = ZipРазмерCDH(); - РазмерЕСД = ZipРазмерEOCD(); - РазмерЛФХ = ZipРазмерLFH(); + РазмерПрефиксаGZip = 10; + РазмерПостфиксаGZip = 8; + + РазмерДД = ZipРазмерDD(); + РазмерСДХ = ZipРазмерCDH(); + РазмерЕСД = ZipРазмерEOCD(); + РазмерЛФХ = ZipРазмерLFH(); - ЧтениеДанных = Новый ЧтениеДанных(СжатыеДанные); - ЧтениеДанных.Пропустить(РазмерПрефиксаGZip); - РазмерСжатыхДанных = ЧтениеДанных.ИсходныйПоток().Размер() - РазмерПрефиксаGZip - РазмерПостфиксаGZip; + ЧтениеДанных = Новый ЧтениеДанных(СжатыеДанные); + ЧтениеДанных.Пропустить(РазмерПрефиксаGZip); + РазмерСжатыхДанных = ЧтениеДанных.ИсходныйПоток().Размер() - РазмерПрефиксаGZip - РазмерПостфиксаGZip; - ПотокZip = Новый ПотокВПамяти(РазмерЛФХ - + РазмерСжатыхДанных - + РазмерДД - + РазмерСДХ - + РазмерЕСД); - - ЗаписьДанных = Новый ЗаписьДанных(ПотокZip); - ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipLFH()); - ЧтениеДанных.КопироватьВ(ЗаписьДанных, РазмерСжатыхДанных); + ПотокZip = Новый ПотокВПамяти(РазмерЛФХ + + РазмерСжатыхДанных + + РазмерДД + + РазмерСДХ + + РазмерЕСД); + + ЗаписьДанных = Новый ЗаписьДанных(ПотокZip); + ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipLFH()); + ЧтениеДанных.КопироватьВ(ЗаписьДанных, РазмерСжатыхДанных); - ЗаписьДанных.Закрыть(); - ЗаписьДанных = Новый ЗаписьДанных(ПотокZip); + ЗаписьДанных.Закрыть(); + ЗаписьДанных = Новый ЗаписьДанных(ПотокZip); - CRC32 = ЧтениеДанных.ПрочитатьЦелое32(); - РазмерНесжатыхДанных = ЧтениеДанных.ПрочитатьЦелое32(); - ЧтениеДанных.Закрыть(); + CRC32 = ЧтениеДанных.ПрочитатьЦелое32(); + РазмерНесжатыхДанных = ЧтениеДанных.ПрочитатьЦелое32(); + ЧтениеДанных.Закрыть(); - ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipDD(CRC32, РазмерСжатыхДанных, РазмерНесжатыхДанных)); - ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipCDH(CRC32, РазмерСжатыхДанных, РазмерНесжатыхДанных)); - ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipEOCD(РазмерСжатыхДанных)); - ЗаписьДанных.Закрыть(); + ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipDD(CRC32, РазмерСжатыхДанных, РазмерНесжатыхДанных)); + ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipCDH(CRC32, РазмерСжатыхДанных, РазмерНесжатыхДанных)); + ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipEOCD(РазмерСжатыхДанных)); + ЗаписьДанных.Закрыть(); - Возврат ПрочитатьZip(ПотокZip); + Возврат ПрочитатьZip(ПотокZip); КонецФункции Функция ПрочитатьZip(СжатыеДанные, ТекстОшибки = Неопределено) - Каталог = ПолучитьИмяВременногоФайла(); - ЧтениеZip = Новый ЧтениеZipФайла(СжатыеДанные); - ИмяФайла = ЧтениеZip.Элементы[0].Имя; - Попытка - ЧтениеZip.Извлечь(ЧтениеZip.Элементы[0], Каталог, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); - Исключение + Каталог = ПолучитьИмяВременногоФайла(); + ЧтениеZip = Новый ЧтениеZipФайла(СжатыеДанные); + ИмяФайла = ЧтениеZip.Элементы[0].Имя; + Попытка + ЧтениеZip.Извлечь(ЧтениеZip.Элементы[0], Каталог, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); + Исключение // Игнорируем проверку целостности архива, просто читаем результат - ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; - ЧтениеZip.Закрыть(); + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + ЧтениеZip.Закрыть(); - Результат = Новый ДвоичныеДанные(Каталог + ПолучитьРазделительПути() + ИмяФайла); - УдалитьФайлы(Каталог); + Результат = Новый ДвоичныеДанные(Каталог + ПолучитьРазделительПути() + ИмяФайла); + УдалитьФайлы(Каталог); - Возврат Результат; + Возврат Результат; КонецФункции Функция ZipРазмерLFH() - Возврат 34; + Возврат 34; КонецФункции Функция ZipРазмерDD() - Возврат 16; + Возврат 16; КонецФункции Функция ZipРазмерCDH() - Возврат 50; + Возврат 50; КонецФункции Функция ZipРазмерEOCD() - Возврат 22; + Возврат 22; КонецФункции Функция ZipLFH() // Local file header - Буфер = Новый БуферДвоичныхДанных(ZipРазмерLFH()); - Буфер.ЗаписатьЦелое32(0, 67324752); // signature 0x04034b50 - Буфер.ЗаписатьЦелое16(4, 20); // version - Буфер.ЗаписатьЦелое16(6, 10); // bit flags - Буфер.ЗаписатьЦелое16(8, 8); // compression method - Буфер.ЗаписатьЦелое16(10, 0); // time - Буфер.ЗаписатьЦелое16(12, 0); // date - Буфер.ЗаписатьЦелое32(14, 0); // crc-32 - Буфер.ЗаписатьЦелое32(18, 0); // compressed size - Буфер.ЗаписатьЦелое32(22, 0); // uncompressed size - Буфер.ЗаписатьЦелое16(26, 4); // filename legth - "data" - Буфер.ЗаписатьЦелое16(28, 0); // extra field length - Буфер.Записать(30, ПолучитьБуферДвоичныхДанныхИзСтроки("data", "ascii", Ложь)); + Буфер = Новый БуферДвоичныхДанных(ZipРазмерLFH()); + Буфер.ЗаписатьЦелое32(0, 67324752); // signature 0x04034b50 + Буфер.ЗаписатьЦелое16(4, 20); // version + Буфер.ЗаписатьЦелое16(6, 10); // bit flags + Буфер.ЗаписатьЦелое16(8, 8); // compression method + Буфер.ЗаписатьЦелое16(10, 0); // time + Буфер.ЗаписатьЦелое16(12, 0); // date + Буфер.ЗаписатьЦелое32(14, 0); // crc-32 + Буфер.ЗаписатьЦелое32(18, 0); // compressed size + Буфер.ЗаписатьЦелое32(22, 0); // uncompressed size + Буфер.ЗаписатьЦелое16(26, 4); // filename legth - "data" + Буфер.ЗаписатьЦелое16(28, 0); // extra field length + Буфер.Записать(30, ПолучитьБуферДвоичныхДанныхИзСтроки("data", "ascii", Ложь)); - Возврат Буфер; + Возврат Буфер; КонецФункции Функция ZipDD(CRC32, РазмерСжатыхДанных, РазмерНесжатыхДанных) // Data descriptor - Буфер = Новый БуферДвоичныхДанных(ZipРазмерDD()); - Буфер.ЗаписатьЦелое32(0, 134695760); - Буфер.ЗаписатьЦелое32(4, CRC32); - Буфер.ЗаписатьЦелое32(8, РазмерСжатыхДанных); - Буфер.ЗаписатьЦелое32(12, РазмерНесжатыхДанных); + Буфер = Новый БуферДвоичныхДанных(ZipРазмерDD()); + Буфер.ЗаписатьЦелое32(0, 134695760); + Буфер.ЗаписатьЦелое32(4, CRC32); + Буфер.ЗаписатьЦелое32(8, РазмерСжатыхДанных); + Буфер.ЗаписатьЦелое32(12, РазмерНесжатыхДанных); - Возврат Буфер; + Возврат Буфер; КонецФункции Функция ZipCDH(CRC32, РазмерСжатыхДанных, РазмерНесжатыхДанных) // Central directory header - Буфер = Новый БуферДвоичныхДанных(ZipРазмерCDH()); - Буфер.ЗаписатьЦелое32(0, 33639248); // signature 0x02014b50 - Буфер.ЗаписатьЦелое16(4, 798); // version made by - Буфер.ЗаписатьЦелое16(6, 20); // version needed to extract - Буфер.ЗаписатьЦелое16(8, 10); // bit flags - Буфер.ЗаписатьЦелое16(10, 8); // compression method - Буфер.ЗаписатьЦелое16(12, 0); // time - Буфер.ЗаписатьЦелое16(14, 0); // date - Буфер.ЗаписатьЦелое32(16, CRC32); // crc-32 - Буфер.ЗаписатьЦелое32(20, РазмерСжатыхДанных); // compressed size - Буфер.ЗаписатьЦелое32(24, РазмерНесжатыхДанных); // uncompressed size - Буфер.ЗаписатьЦелое16(28, 4); // file name length - Буфер.ЗаписатьЦелое16(30, 0); // extra field length - Буфер.ЗаписатьЦелое16(32, 0); // file comment length - Буфер.ЗаписатьЦелое16(34, 0); // disk number start - Буфер.ЗаписатьЦелое16(36, 0); // internal file attributes - Буфер.ЗаписатьЦелое32(38, 2176057344); // external file attributes - Буфер.ЗаписатьЦелое32(42, 0); // relative offset of local header - Буфер.Записать(46, ПолучитьБуферДвоичныхДанныхИзСтроки("data", "ascii", Ложь)); + Буфер = Новый БуферДвоичныхДанных(ZipРазмерCDH()); + Буфер.ЗаписатьЦелое32(0, 33639248); // signature 0x02014b50 + Буфер.ЗаписатьЦелое16(4, 798); // version made by + Буфер.ЗаписатьЦелое16(6, 20); // version needed to extract + Буфер.ЗаписатьЦелое16(8, 10); // bit flags + Буфер.ЗаписатьЦелое16(10, 8); // compression method + Буфер.ЗаписатьЦелое16(12, 0); // time + Буфер.ЗаписатьЦелое16(14, 0); // date + Буфер.ЗаписатьЦелое32(16, CRC32); // crc-32 + Буфер.ЗаписатьЦелое32(20, РазмерСжатыхДанных); // compressed size + Буфер.ЗаписатьЦелое32(24, РазмерНесжатыхДанных); // uncompressed size + Буфер.ЗаписатьЦелое16(28, 4); // file name length + Буфер.ЗаписатьЦелое16(30, 0); // extra field length + Буфер.ЗаписатьЦелое16(32, 0); // file comment length + Буфер.ЗаписатьЦелое16(34, 0); // disk number start + Буфер.ЗаписатьЦелое16(36, 0); // internal file attributes + Буфер.ЗаписатьЦелое32(38, 2176057344); // external file attributes + Буфер.ЗаписатьЦелое32(42, 0); // relative offset of local header + Буфер.Записать(46, ПолучитьБуферДвоичныхДанныхИзСтроки("data", "ascii", Ложь)); - Возврат Буфер; + Возврат Буфер; КонецФункции Функция ZipEOCD(РазмерСжатыхДанных) // End of central directory - РазмерCDH = 50; - Буфер = Новый БуферДвоичныхДанных(ZipРазмерEOCD()); - Буфер.ЗаписатьЦелое32(0, 101010256); // signature 0x06054b50 - Буфер.ЗаписатьЦелое16(4, 0); // number of this disk - Буфер.ЗаписатьЦелое16(6, 0); // number of the disk with the start of the central directory - Буфер.ЗаписатьЦелое16(8, 1); // total number of entries in the central directory on this disk - Буфер.ЗаписатьЦелое16(10, 1); // total number of entries in the central directory - Буфер.ЗаписатьЦелое32(12, РазмерCDH); // size of the central directory + РазмерCDH = 50; + Буфер = Новый БуферДвоичныхДанных(ZipРазмерEOCD()); + Буфер.ЗаписатьЦелое32(0, 101010256); // signature 0x06054b50 + Буфер.ЗаписатьЦелое16(4, 0); // number of this disk + Буфер.ЗаписатьЦелое16(6, 0); // number of the disk with the start of the central directory + Буфер.ЗаписатьЦелое16(8, 1); // total number of entries in the central directory on this disk + Буфер.ЗаписатьЦелое16(10, 1); // total number of entries in the central directory + Буфер.ЗаписатьЦелое32(12, РазмерCDH); // size of the central directory // offset of start of central directory with respect to the starting disk number - Буфер.ЗаписатьЦелое32(16, ZipРазмерLFH() + РазмерСжатыхДанных + ZipРазмерDD()); - Буфер.ЗаписатьЦелое16(20, 0); // the starting disk number + Буфер.ЗаписатьЦелое32(16, ZipРазмерLFH() + РазмерСжатыхДанных + ZipРазмерDD()); + Буфер.ЗаписатьЦелое16(20, 0); // the starting disk number - Возврат Буфер; + Возврат Буфер; КонецФункции