mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-03-17 21:08:03 +02:00
Таблуяция модулей
This commit is contained in:
parent
6dcac77ab7
commit
2b054b762a
@ -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";
|
||||
Иначе
|
||||
ВызватьИсключение "Некорректный вид отправки";
|
||||
КонецЕсли;
|
||||
|
@ -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
|
||||
|
||||
Возврат Буфер;
|
||||
Возврат Буфер;
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user