1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-08-13 20:05:19 +02:00

Форматирование и деффекты SC

This commit is contained in:
Anton
2024-01-20 14:39:18 +03:00
parent 7d6bcaa8b2
commit f7cc8d4e53
5 changed files with 962 additions and 934 deletions

View File

@@ -92,10 +92,11 @@
Функция ОбновитьТокен(Знач Параметры = "") Экспорт Функция ОбновитьТокен(Знач Параметры = "") Экспорт
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Refresh = "refresh_token";
ПараметрыЗапроса = Новый Структура; ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("refresh_token", Параметры_["refresh_token"]); ПараметрыЗапроса.Вставить(Refresh , Параметры_[Refresh]);
ПараметрыЗапроса.Вставить("grant_type" , "refresh_token"); ПараметрыЗапроса.Вставить("grant_type" , Refresh);
ПараметрыЗапроса.Вставить("client_id" , Параметры_["client_id"]); ПараметрыЗапроса.Вставить("client_id" , Параметры_["client_id"]);
Ответ = OPI_Инструменты.Post("https://api.twitter.com/2/oauth2/token" Ответ = OPI_Инструменты.Post("https://api.twitter.com/2/oauth2/token"
@@ -143,6 +144,7 @@
// Возвращаемое значение: // Возвращаемое значение:
// Строка, Произвольный, Неопределено, ДвоичныеДанные, HTTPОтвет - Создать произвольный твит // Строка, Произвольный, Неопределено, ДвоичныеДанные, HTTPОтвет - Создать произвольный твит
//@skip-check method-too-many-params //@skip-check method-too-many-params
// BSLLS:NumberOfOptionalParams-off
Функция СоздатьПроизвольныйТвит(Знач Текст = "" Функция СоздатьПроизвольныйТвит(Знач Текст = ""
, Знач МассивМедиа = "" , Знач МассивМедиа = ""
, Знач МассивВариантовОпроса = "" , Знач МассивВариантовОпроса = ""
@@ -151,8 +153,9 @@
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
URL = "https://api.twitter.com/2/tweets"; URL = "https://api.twitter.com/2/tweets";
Массив = "Массив";
Если Не ТипЗнч(МассивМедиа) = Тип("Массив") Тогда Если Не ТипЗнч(МассивМедиа) = Тип(Массив) Тогда
МассивМедиа_ = Новый Массив; МассивМедиа_ = Новый Массив;
Если ЗначениеЗаполнено(МассивМедиа) Тогда Если ЗначениеЗаполнено(МассивМедиа) Тогда
@@ -168,7 +171,7 @@
Поля.Вставить("text", Текст); Поля.Вставить("text", Текст);
КонецЕсли; КонецЕсли;
Если ТипЗнч(МассивВариантовОпроса) = Тип("Массив") И ЗначениеЗаполнено(ДлительностьОпроса) Тогда Если ТипЗнч(МассивВариантовОпроса) = Тип(Массив) И ЗначениеЗаполнено(ДлительностьОпроса) Тогда
ДлительностьОпроса = Число(ДлительностьОпроса); ДлительностьОпроса = Число(ДлительностьОпроса);
@@ -178,7 +181,7 @@
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Если ТипЗнч(МассивМедиа) = Тип("Массив") Тогда Если ТипЗнч(МассивМедиа) = Тип(Массив) Тогда
Если МассивМедиа.Количество() > 0 Тогда Если МассивМедиа.Количество() > 0 Тогда
Поля.Вставить("media", Новый Структура("media_ids", МассивМедиа)); Поля.Вставить("media", Новый Структура("media_ids", МассивМедиа));
КонецЕсли; КонецЕсли;
@@ -190,6 +193,7 @@
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// BSLLS:NumberOfOptionalParams-on
// Создать текстовый твит. // Создать текстовый твит.
// //
@@ -287,7 +291,6 @@
МассивФайлов = МассивФайлов_; МассивФайлов = МассивФайлов_;
КонецЕсли; КонецЕсли;
Для Каждого ФайлОтправки Из МассивФайлов Цикл Для Каждого ФайлОтправки Из МассивФайлов Цикл
Если Не ТипЗнч(ФайлОтправки) = Тип("ДвоичныеДанные") Тогда Если Не ТипЗнч(ФайлОтправки) = Тип("ДвоичныеДанные") Тогда
@@ -313,6 +316,11 @@
Функция ЗагрузитьМедиафайл(Знач Файл, Знач Тип, Знач Параметры) Функция ЗагрузитьМедиафайл(Знач Файл, Знач Тип, Знач Параметры)
Command = "command";
ВидЗапроса = "POST";
Единица = 1024;
Количество = 4;
СоответствиеMIME = Новый Соответствие; СоответствиеMIME = Новый Соответствие;
СоответствиеMIME.Вставить("tweet_image", "image/jpeg"); СоответствиеMIME.Вставить("tweet_image", "image/jpeg");
СоответствиеMIME.Вставить("tweet_video", "video/mp4"); СоответствиеMIME.Вставить("tweet_video", "video/mp4");
@@ -332,22 +340,22 @@
Поля.Вставить("media_data" , Base64Строка(Файл)); Поля.Вставить("media_data" , Base64Строка(Файл));
Поля.Вставить("media_category", Тип); Поля.Вставить("media_category", Тип);
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, "POST", URL); Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, ВидЗапроса, URL);
Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь); Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
Иначе Иначе
ЧтениеДанных = Новый ЧтениеДанных(Файл); ЧтениеДанных = Новый ЧтениеДанных(Файл);
МассивЧтения = ЧтениеДанных.РазделитьНаЧастиПо(4*1024*1024); МассивЧтения = ЧтениеДанных.РазделитьНаЧастиПо(Количество * Единица * Единица);
Поля = Новый Структура; Поля = Новый Структура;
Поля.Вставить("command" , "INIT"); Поля.Вставить(Command , "INIT");
Поля.Вставить("total_bytes" , OPI_Инструменты.ЧислоВСтроку(Размер)); Поля.Вставить("total_bytes" , OPI_Инструменты.ЧислоВСтроку(Размер));
Поля.Вставить("media_type" , СоответствиеMIME.Получить(Тип)); Поля.Вставить("media_type" , СоответствиеMIME.Получить(Тип));
Поля.Вставить("media_category" , Тип); Поля.Вставить("media_category" , Тип);
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, "POST", URL); Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, ВидЗапроса, URL);
ОтветИнициализации = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь); ОтветИнициализации = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
KeyИнициализации = ОтветИнициализации["media_key"]; KeyИнициализации = ОтветИнициализации["media_key"];
@@ -359,12 +367,12 @@
ДвоичныеЧасти = Часть.ПолучитьДвоичныеДанные(); ДвоичныеЧасти = Часть.ПолучитьДвоичныеДанные();
Поля = Новый Структура; Поля = Новый Структура;
Поля.Вставить("command" , "APPEND"); Поля.Вставить(Command , "APPEND");
Поля.Вставить("media_key" , KeyИнициализации); Поля.Вставить("media_key" , KeyИнициализации);
Поля.Вставить("segment_index" , OPI_Инструменты.ЧислоВСтроку(Счетчик)); Поля.Вставить("segment_index" , OPI_Инструменты.ЧислоВСтроку(Счетчик));
Поля.Вставить("media" , ДвоичныеЧасти); Поля.Вставить("media" , ДвоичныеЧасти);
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Новый Структура, "POST", URL); Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Новый Структура, ВидЗапроса, URL);
OPI_Инструменты.PostMultipart(URL, Поля, , , Авторизация); OPI_Инструменты.PostMultipart(URL, Поля, , , Авторизация);
@@ -372,16 +380,16 @@
КонецЦикла; КонецЦикла;
Поля = Новый Структура; Поля = Новый Структура;
Поля.Вставить("command" , "FINALIZE"); Поля.Вставить(Command , "FINALIZE");
Поля.Вставить("media_id", IDИнициализации); Поля.Вставить("media_id", IDИнициализации);
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, "POST", URL); Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, ВидЗапроса, URL);
Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь); Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
СтатусОбработки = Ответ["processing_info"]["state"]; СтатусОбработки = Ответ["processing_info"]["state"];
Поля = Новый Структура; Поля = Новый Структура;
Поля.Вставить("command" , "STATUS"); Поля.Вставить(Command , "STATUS");
Поля.Вставить("media_id", IDИнициализации); Поля.Вставить("media_id", IDИнициализации);
Пока Строка(СтатусОбработки) = "pending" Или Строка(СтатусОбработки) = "in_progress" Цикл Пока Строка(СтатусОбработки) = "pending" Или Строка(СтатусОбработки) = "in_progress" Цикл
@@ -419,29 +427,27 @@
// https://developer.twitter.com/en/portal/dashboard и выбор конкретного проекта из списка (значек c ключем) // https://developer.twitter.com/en/portal/dashboard и выбор конкретного проекта из списка (значек c ключем)
Параметры_ = Новый Соответствие; Параметры_ = Новый Соответствие;
Разрешения = "tweet.read tweet.write tweet.moderate.write users.read " Разрешения = "tweet.read tweet.write tweet.moderate.write users.read "
+ "follows.read follows.write offline.access space.read mute.read " + "follows.read follows.write offline.access space.read mute.read "
+ "mute.write like.read like.write list.read list.write block.read " + "mute.write like.read like.write list.read list.write block.read "
+ "block.write bookmark.read bookmark.write"; + "block.write bookmark.read bookmark.write";
// Данные для API v2 // Данные для API v2
// redirect_uri - URL вашего http-сервиса (или другого обработчика запросов) для авторизации // redirect_uri - URL вашего http-сервиса (или другого обработчика запросов) для авторизации
// scope - набор разрешений для получаемого ключа. Может быть любой, но offline.access обязателен // scope - набор разрешений для получаемого ключа. Может быть любой, но offline.access обязателен
// client_id - Из OAuth 2.0 Client ID and Client Secret страницы настроек Twitter Developer // client_id - Из OAuth 2.0 Client ID and Client Secret страницы настроек Twitter Developer
// client_secret - Из OAuth 2.0 Client ID and Client Secret страницы настроек Twitter Developer // client_secret - Из OAuth 2.0 Client ID and Client Secret страницы настроек Twitter Developer
//access_token - ПолучитьСсылкуАвторизации() -> Браузер -> http-запрос с code придет на адрес redirect_uri -> ПолучитьТокен(code) // access_token - ПолучитьСсылкуАвторизации() -> Браузер -> code придет на redirect_uri -> ПолучитьТокен(code)
//refresh_token - Приходит вместе с access_token и используется для его обновления (время жизни access_token - 2 часа). // refresh_token - Приходит вместе с access_token и используется для его обновления (время жизни access_token - 2 ч)
// Обновление происходит методом ОбновитьТокен с новыми access_token и refresh_token. При следующем обновлении // Обновление происходит методом ОбновитьТокен с новыми access_token и refresh_token.
// нужно использовать уже новый refresh_token, так что захардкодить не получится (access_token тоже не получится) // При следующем обновлении нужно использовать уже новый refresh_token, так что захардкодить
// не получится (access_token тоже не получится)
// |--> ОбновитьТокен() ->|access_token --> Используется в т-нии 2-х часов для запросов // |--> ОбновитьТокен() ->|access_token --> Используется в т-нии 2-х часов для запросов
// | |refresh_token --| // | |refresh_token --|
// |--------[через 2 ч.]-------------------| // |--------[через 2 ч.]-------------------|
// Данные для API v1.1 // Данные для API v1.1
// oauth_token - из Authentication Tokens -> Access Token and Secret страницы настроек Twitter Developer // oauth_token - из Authentication Tokens -> Access Token and Secret страницы настроек Twitter Developer
@@ -479,6 +485,8 @@
ВерсияАпи = "1.0"; ВерсияАпи = "1.0";
СтрокаСигнатуры = ""; СтрокаСигнатуры = "";
Подпись = ""; Подпись = "";
OCK = "oauth_consumer_key";
OTK = "oauth_token";
ТекущаяДатаUNIX = OPI_Инструменты.UNIXTime(ТекущаяДатаСеанса()); ТекущаяДатаUNIX = OPI_Инструменты.UNIXTime(ТекущаяДатаСеанса());
ТекущаяДатаUNIX = OPI_Инструменты.ЧислоВСтроку(ТекущаяДатаUNIX); ТекущаяДатаUNIX = OPI_Инструменты.ЧислоВСтроку(ТекущаяДатаUNIX);
ТаблицаПараметров = Новый ТаблицаЗначений; ТаблицаПараметров = Новый ТаблицаЗначений;
@@ -494,12 +502,12 @@
КонецЦикла; КонецЦикла;
НоваяСтрока = ТаблицаПараметров.Добавить(); НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Ключ = "oauth_consumer_key"; НоваяСтрока.Ключ = OCK;
НоваяСтрока.Значение = Параметры["oauth_consumer_key"]; НоваяСтрока.Значение = Параметры[OCK];
НоваяСтрока = ТаблицаПараметров.Добавить(); НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Ключ = "oauth_token"; НоваяСтрока.Ключ = OTK;
НоваяСтрока.Значение = Параметры["oauth_token"]; НоваяСтрока.Значение = Параметры[OTK];
НоваяСтрока = ТаблицаПараметров.Добавить(); НоваяСтрока = ТаблицаПараметров.Добавить();
НоваяСтрока.Ключ = "oauth_version"; НоваяСтрока.Ключ = "oauth_version";
@@ -547,7 +555,6 @@
+ "&" + "&"
+ КодироватьСтроку(Параметры["oauth_token_secret"], СпособКодированияСтроки.КодировкаURL); + КодироватьСтроку(Параметры["oauth_token_secret"], СпособКодированияСтроки.КодировкаURL);
Сигнатура = OPI_Криптография.HMAC(ПолучитьДвоичныеДанныеИзСтроки(Подпись) Сигнатура = OPI_Криптография.HMAC(ПолучитьДвоичныеДанныеИзСтроки(Подпись)
, ПолучитьДвоичныеДанныеИзСтроки(СтрокаСигнатуры) , ПолучитьДвоичныеДанныеИзСтроки(СтрокаСигнатуры)
, ХешФункция.SHA1 , ХешФункция.SHA1
@@ -555,14 +562,15 @@
Сигнатура = КодироватьСтроку(Base64Строка(Сигнатура), СпособКодированияСтроки.КодировкаURL); Сигнатура = КодироватьСтроку(Base64Строка(Сигнатура), СпособКодированияСтроки.КодировкаURL);
Разделитель = """,";
ЗаголовокАвторизации = ЗаголовокАвторизации ЗаголовокАвторизации = ЗаголовокАвторизации
+ "OAuth " + "OAuth "
+ "oauth_consumer_key=""" + Параметры["oauth_consumer_key"] + """," + "oauth_consumer_key=""" + Параметры[OCK] + Разделитель
+ "oauth_token=""" + Параметры["oauth_token"] + """," + "oauth_token=""" + Параметры[OTK] + Разделитель
+ "oauth_signature_method=""" + МетодХэширования + """," + "oauth_signature_method=""" + МетодХэширования + Разделитель
+ "oauth_timestamp=""" + ТекущаяДатаUNIX + """," + "oauth_timestamp=""" + ТекущаяДатаUNIX + Разделитель
+ "oauth_nonce=""" + ТекущаяДатаUNIX + """," + "oauth_nonce=""" + ТекущаяДатаUNIX + Разделитель
+ "oauth_version=""" + ВерсияАпи + """," + "oauth_version=""" + ВерсияАпи + Разделитель
+ "oauth_signature=""" + Сигнатура; + "oauth_signature=""" + Сигнатура;
СоответствиеЗаголовка = Новый Соответствие; СоответствиеЗаголовка = Новый Соответствие;
@@ -572,6 +580,7 @@
КонецФункции КонецФункции
// BSLLS:LatinAndCyrillicSymbolInWord-off
Функция СоздатьЗаголовокАвторизацииV2(Знач Параметры) Функция СоздатьЗаголовокАвторизацииV2(Знач Параметры)
СоответствиеВозврата = Новый Соответствие; СоответствиеВозврата = Новый Соответствие;
@@ -580,5 +589,6 @@
Возврат СоответствиеВозврата; Возврат СоответствиеВозврата;
КонецФункции КонецФункции
// BSLLS:LatinAndCyrillicSymbolInWord-on
#КонецОбласти #КонецОбласти

View File

@@ -68,6 +68,9 @@
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
СтрокаВложений = ""; СтрокаВложений = "";
Hash = "hash";
Photo = "photo";
Serv = "server";
Для Каждого КартинкаПоста Из МассивКартинок Цикл Для Каждого КартинкаПоста Из МассивКартинок Цикл
@@ -83,7 +86,6 @@
ЗначениеКартинка = КартинкаПоста; ЗначениеКартинка = КартинкаПоста;
КонецЕсли; КонецЕсли;
Файлы.Вставить(КлючКартинка, ЗначениеКартинка); Файлы.Вставить(КлючКартинка, ЗначениеКартинка);
Ответ = OPI_Инструменты.Get("api.vk.com/method/photos.getWallUploadServer", Параметры_); Ответ = OPI_Инструменты.Get("api.vk.com/method/photos.getWallUploadServer", Параметры_);
@@ -92,20 +94,20 @@
Параметры_.Вставить("upload_url", URL); Параметры_.Вставить("upload_url", URL);
Ответ = OPI_Инструменты.PostMultipart(URL, Параметры_, Файлы); Ответ = OPI_Инструменты.PostMultipart(URL, Параметры_, Файлы);
СерверФото = OPI_Инструменты.ЧислоВСтроку(Ответ["server"]); СерверФото = OPI_Инструменты.ЧислоВСтроку(Ответ[Serv]);
Параметры_.Вставить("hash" , Ответ["hash"]); Параметры_.Вставить(Hash , Ответ[Hash]);
Параметры_.Вставить("photo" , Ответ["photo"]); Параметры_.Вставить(Photo , Ответ[Photo]);
Параметры_.Вставить("server" , СерверФото); Параметры_.Вставить(Serv , СерверФото);
Ответ = OPI_Инструменты.Get("api.vk.com/method/photos.saveWallPhoto", Параметры_); Ответ = OPI_Инструменты.Get("api.vk.com/method/photos.saveWallPhoto", Параметры_);
ОтветСоответствие = Ответ.Получить("response")[0]; ОтветСоответствие = Ответ.Получить("response")[0];
Параметры_.Удалить("hash"); Параметры_.Удалить(Hash);
Параметры_.Удалить("photo"); Параметры_.Удалить(Photo);
Параметры_.Удалить("server"); Параметры_.Удалить(Serv);
ФотоID = "photo" ФотоID = Photo
+ OPI_Инструменты.ЧислоВСтроку(ОтветСоответствие.Получить("owner_id")) + OPI_Инструменты.ЧислоВСтроку(ОтветСоответствие.Получить("owner_id"))
+ "_" + "_"
+ OPI_Инструменты.ЧислоВСтроку(ОтветСоответствие.Получить("id")); + OPI_Инструменты.ЧислоВСтроку(ОтветСоответствие.Получить("id"));
@@ -160,7 +162,8 @@
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Ответ = OPI_Инструменты.Get("api.vk.com/method/polls.getPhotoUploadServer", Параметры_); Ответ = OPI_Инструменты.Get("api.vk.com/method/polls.getPhotoUploadServer", Параметры_);
URL = Ответ["response"]["upload_url"]; Response = "response";
URL = Ответ[Response]["upload_url"];
IDФото = ""; IDФото = "";
Параметры_.Вставить("upload_url", URL); Параметры_.Вставить("upload_url", URL);
@@ -185,7 +188,7 @@
Параметры_.Вставить("photo" , Ответ["photo"]); Параметры_.Вставить("photo" , Ответ["photo"]);
Ответ = OPI_Инструменты.Get("api.vk.com/method/polls.savePhoto", Параметры_); Ответ = OPI_Инструменты.Get("api.vk.com/method/polls.savePhoto", Параметры_);
IDФото = Ответ.Получить("response")["id"]; IDФото = Ответ.Получить(Response)["id"];
КонецЕсли; КонецЕсли;
@@ -198,7 +201,7 @@
Для Каждого Ответ Из МассивОтветов Цикл Для Каждого Ответ Из МассивОтветов Цикл
Если Первый Тогда Если Первый Тогда
Первый = Ложь Первый = Ложь;
Иначе Иначе
Ответы = Ответы + ", "; Ответы = Ответы + ", ";
КонецЕсли; КонецЕсли;
@@ -214,14 +217,13 @@
Параметры_.Вставить("question" , Вопрос); Параметры_.Вставить("question" , Вопрос);
Опрос = OPI_Инструменты.Get("api.vk.com/method/polls.create", Параметры_); Опрос = OPI_Инструменты.Get("api.vk.com/method/polls.create", Параметры_);
ОпросСоответствие = Опрос.Получить("response"); ОпросСоответствие = Опрос.Получить(Response);
ОпросID = "poll" ОпросID = "poll"
+ OPI_Инструменты.ЧислоВСтроку(ОпросСоответствие.Получить("owner_id")) + OPI_Инструменты.ЧислоВСтроку(ОпросСоответствие.Получить("owner_id"))
+ "_" + "_"
+ OPI_Инструменты.ЧислоВСтроку(ОпросСоответствие.Получить("id")); + OPI_Инструменты.ЧислоВСтроку(ОпросСоответствие.Получить("id"));
Параметры_.Вставить("attachments", ОпросID); Параметры_.Вставить("attachments", ОпросID);
Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.post", Параметры_); Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.post", Параметры_);
@@ -283,7 +285,6 @@
Путь = ПолучитьИмяВременногоФайла("jpeg"); Путь = ПолучитьИмяВременногоФайла("jpeg");
КонецЕсли; КонецЕсли;
Файлы = Новый Соответствие; Файлы = Новый Соответствие;
Файлы.Вставить(Путь, Картинка); Файлы.Вставить(Путь, Картинка);
@@ -325,7 +326,6 @@
Путь = ПолучитьИмяВременногоФайла("jpeg"); Путь = ПолучитьИмяВременногоФайла("jpeg");
КонецЕсли; КонецЕсли;
Файлы = Новый Соответствие; Файлы = Новый Соответствие;
Файлы.Вставить(Путь, Картинка); Файлы.Вставить(Путь, Картинка);
@@ -464,9 +464,10 @@
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
IDСтены = ?(ЗначениеЗаполнено(IDСтены), IDСтены, Параметры_["owner_id"]); IDСтены = ?(ЗначениеЗаполнено(IDСтены), IDСтены, Параметры_["owner_id"]);
ОбъектВК = "wall" + OPI_Инструменты.ЧислоВСтроку(IDСтены) + "_" + OPI_Инструменты.ЧислоВСтроку(IDПоста);
Параметры_.Вставить("type" , "post"); Параметры_.Вставить("type" , "post");
Параметры_.Вставить("object" , "wall" + OPI_Инструменты.ЧислоВСтроку(IDСтены) + "_" + OPI_Инструменты.ЧислоВСтроку(IDПоста)); Параметры_.Вставить("object" , ОбъектВК);
Параметры_.Вставить("item_id" , OPI_Инструменты.ЧислоВСтроку(IDПоста)); Параметры_.Вставить("item_id" , OPI_Инструменты.ЧислоВСтроку(IDПоста));
Параметры_.Вставить("owner_id" , OPI_Инструменты.ЧислоВСтроку(IDСтены)); Параметры_.Вставить("owner_id" , OPI_Инструменты.ЧислоВСтроку(IDСтены));
Параметры_.Вставить("from_group" , 0); Параметры_.Вставить("from_group" , 0);
@@ -489,6 +490,7 @@
// Возвращаемое значение: // Возвращаемое значение:
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК
//@skip-check method-too-many-params //@skip-check method-too-many-params
// BSLLS:NumberOfOptionalParams-off
Функция СделатьРепост(Знач IDПоста Функция СделатьРепост(Знач IDПоста
, Знач IDСтены = "" , Знач IDСтены = ""
, Знач ЦелеваяСтена = "" , Знач ЦелеваяСтена = ""
@@ -514,6 +516,7 @@
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// BSLLS:NumberOfOptionalParams-on
// Написать сообщение. // Написать сообщение.
// //
@@ -631,22 +634,23 @@
// Получить статистику постов. // Получить статистику постов.
// //
// Параметры: // Параметры:
// МассивIDПостов - Массив из Строка,Число - Массив ID постов // МассивИДПостов - Массив из Строка,Число - Массив ID постов
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры
// //
// Возвращаемое значение: // Возвращаемое значение:
// Массив из Произвольный - Массив данных статистики по постам // Массив из Произвольный - Массив данных статистики по постам
Функция ПолучитьСтатистикуПостов(Знач МассивIDПостов, Знач Параметры = "") Экспорт Функция ПолучитьСтатистикуПостов(Знач МассивИДПостов, Знач Параметры = "") Экспорт
Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
МассивОтветов = Новый Массив; МассивОтветов = Новый Массив;
МассивНабора = Новый Массив; МассивНабора = Новый Массив;
МаксимумПостов = 30;
Для Каждого Пост Из МассивIDПостов Цикл Для Каждого Пост Из МассивИДПостов Цикл
МассивНабора.Добавить(OPI_Инструменты.ЧислоВСтроку(Пост)); МассивНабора.Добавить(OPI_Инструменты.ЧислоВСтроку(Пост));
Если МассивНабора.Количество() = 30 Тогда Если МассивНабора.Количество() = МаксимумПостов Тогда
СтрокаНомеров = СтрСоединить(МассивНабора, ","); СтрокаНомеров = СтрСоединить(МассивНабора, ",");
Параметры_.Вставить("post_ids", СтрокаНомеров); Параметры_.Вставить("post_ids", СтрокаНомеров);
@@ -658,7 +662,8 @@
МассивОтветов.Добавить(ЭлементСтатистики); МассивОтветов.Добавить(ЭлементСтатистики);
КонецЦикла; КонецЦикла;
МассивНабора = Новый Массив МассивНабора = Новый Массив;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
@@ -696,14 +701,16 @@
Параметры_.Вставить("account_id", OPI_Инструменты.ЧислоВСтроку(IDКабинета)); Параметры_.Вставить("account_id", OPI_Инструменты.ЧислоВСтроку(IDКабинета));
МассивСтруктур = Новый Массив; МассивСтруктур = Новый Массив;
ДатаСтарт = Формат(ТекущаяДатаСеанса() - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0");
ДатаСтоп = Формат(ДобавитьМесяц(ТекущаяДатаСеанса(), 24) - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0");
СтруктураКампании = Новый Структура; СтруктураКампании = Новый Структура;
СтруктураКампании.Вставить("type" , "promoted_posts"); СтруктураКампании.Вставить("type" , "promoted_posts");
СтруктураКампании.Вставить("name" , Наименование); СтруктураКампании.Вставить("name" , Наименование);
СтруктураКампании.Вставить("day_limit" , 0); СтруктураКампании.Вставить("day_limit" , 0);
СтруктураКампании.Вставить("all_limit" , 0); СтруктураКампании.Вставить("all_limit" , 0);
СтруктураКампании.Вставить("start_time" , Формат(ТекущаяДатаСеанса() - Дата(1970,1,1,1,0,0), "ЧГ=0")); СтруктураКампании.Вставить("start_time" , ДатаСтарт);
СтруктураКампании.Вставить("stop_time" , Формат(ДобавитьМесяц(ТекущаяДатаСеанса(), 24) - Дата(1970,1,1,1,0,0), "ЧГ=0")); СтруктураКампании.Вставить("stop_time" , ДатаСтоп);
СтруктураКампании.Вставить("status" , 1); СтруктураКампании.Вставить("status" , 1);
МассивСтруктур.Добавить(СтруктураКампании); МассивСтруктур.Добавить(СтруктураКампании);

View File

@@ -21,6 +21,7 @@
// SOFTWARE. // SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
#Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейс
#Область НастройкиИИнформация #Область НастройкиИИнформация
@@ -136,7 +137,11 @@
// //
// Возвращаемое значение: // Возвращаемое значение:
// Произвольный, HTTPОтвет - Ответ сервера Viber // Произвольный, HTTPОтвет - Ответ сервера Viber
Функция ОтправитьТекстовоеСообщение(Знач Токен, Знач Текст, Знач IDПользователя, Знач ОтправкаВКанал, Знач Клавиатура = "") Экспорт Функция ОтправитьТекстовоеСообщение(Знач Токен
, Знач Текст
, Знач IDПользователя
, Знач ОтправкаВКанал
, Знач Клавиатура = "") Экспорт
Возврат ОтправитьСообщение(Токен, "text", IDПользователя, ОтправкаВКанал, , Текст, Клавиатура); Возврат ОтправитьСообщение(Токен, "text", IDПользователя, ОтправкаВКанал, , Текст, Клавиатура);
@@ -171,7 +176,12 @@
// //
// Возвращаемое значение: // Возвращаемое значение:
// Произвольный, HTTPОтвет - Ответ сервера Viber // Произвольный, HTTPОтвет - Ответ сервера Viber
Функция ОтправитьФайл(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал, Знач Расширение, Знач Размер = "") Экспорт Функция ОтправитьФайл(Знач Токен
, Знач URL
, Знач IDПользователя
, Знач ОтправкаВКанал
, Знач Расширение
, Знач Размер = "") Экспорт
Если Не ЗначениеЗаполнено(Размер) Тогда Если Не ЗначениеЗаполнено(Размер) Тогда
@@ -207,7 +217,11 @@
// //
// Возвращаемое значение: // Возвращаемое значение:
// Произвольный, HTTPОтвет - Ответ сервера Viber // Произвольный, HTTPОтвет - Ответ сервера Viber
Функция ОтправитьКонтакт(Знач Токен, Знач ИмяКонтакта, Знач НомерТелефона, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт Функция ОтправитьКонтакт(Знач Токен
, Знач ИмяКонтакта
, Знач НомерТелефона
, Знач IDПользователя
, Знач ОтправкаВКанал) Экспорт
СтруктураКонтакта = Новый Структура; СтруктураКонтакта = Новый Структура;
СтруктураКонтакта.Вставить("name", ИмяКонтакта); СтруктураКонтакта.Вставить("name", ИмяКонтакта);

View File

@@ -20,6 +20,7 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations
#Область СлужебныйПрограммныйИнтерфейс #Область СлужебныйПрограммныйИнтерфейс
#Область HTTPМетоды #Область HTTPМетоды
@@ -41,7 +42,7 @@
КонецЕсли; КонецЕсли;
СтруктураURL = РазбитьURL(URL); СтруктураURL = РазбитьURL(URL);
Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL()); Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос(СтруктураURL["Адрес"] + ПараметрыЗапросаВСтроку(Параметры), Заголовки); Запрос = Новый HTTPЗапрос(СтруктураURL["Адрес"] + ПараметрыЗапросаВСтроку(Параметры), Заголовки);
Ответ = Соединение.Получить(Запрос); Ответ = Соединение.Получить(Запрос);
@@ -57,11 +58,8 @@
// BSLLS:CognitiveComplexity-off // BSLLS:CognitiveComplexity-off
Функция PostMultipart(Знач URL Функция PostMultipart(Знач URL, Знач Параметры, Знач Файлы = "", Знач ТипКонтента = "image/jpeg",
, Знач Параметры Знач ДопЗаголовки = "") Экспорт
, Знач Файлы = ""
, Знач ТипКонтента = "image/jpeg"
, Знач ДопЗаголовки = "") Экспорт
Если Не ЗначениеЗаполнено(Параметры) Тогда Если Не ЗначениеЗаполнено(Параметры) Тогда
Параметры = Новый Структура; Параметры = Новый Структура;
@@ -71,12 +69,14 @@
Файлы = Новый Соответствие; Файлы = Новый Соответствие;
КонецЕсли; КонецЕсли;
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", ""); ЗаменаТочки = "___";
GZip = "gzip";
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
СтруктураURL = РазбитьURL(URL); СтруктураURL = РазбитьURL(URL);
Заголовки = Новый Соответствие(); Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary); Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
Заголовки.Вставить("Accept-Encoding" , "gzip"); Заголовки.Вставить("Accept-Encoding", GZip);
Заголовки.Вставить("Accept", "*/*"); Заголовки.Вставить("Accept", "*/*");
Заголовки.Вставить("Connection", "keep-alive"); Заголовки.Вставить("Connection", "keep-alive");
@@ -88,7 +88,7 @@
КонецЕсли; КонецЕсли;
Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL()); Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
НовыйЗапрос = Новый HTTPЗапрос(СтруктураURL["Адрес"], Заголовки); НовыйЗапрос = Новый HTTPЗапрос(СтруктураURL["Адрес"], Заголовки);
ТелоЗапроса = НовыйЗапрос.ПолучитьТелоКакПоток(); ТелоЗапроса = НовыйЗапрос.ПолучитьТелоКакПоток();
ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", "", Ложь); ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", "", Ложь);
@@ -115,21 +115,19 @@
Счетчик = 0; Счетчик = 0;
Для Каждого Файл Из Файлы Цикл Для Каждого Файл Из Файлы Цикл
ПутьФайл = СтрЗаменить(Файл.Ключ, ЗаменаТочки, ".");
Если ТипКонтента = "image/jpeg" Тогда Если ТипКонтента = "image/jpeg" Тогда
ИмяФайлаОтправки = "photo"; ИмяФайлаОтправки = "photo";
Иначе Иначе
ИмяФайлаОтправки = СтрЗаменить(Файл.Ключ, "___", "."); ИмяФайлаОтправки = СтрЗаменить(Файл.Ключ, ЗаменаТочки, ".");
ИмяФайлаОтправки = Лев(ИмяФайлаОтправки, СтрНайти(ИмяФайлаОтправки, ".") - 1); ИмяФайлаОтправки = Лев(ИмяФайлаОтправки, СтрНайти(ИмяФайлаОтправки, ".") - 1);
ИмяФайлаОтправки = ?(ЗначениеЗаполнено(ИмяФайлаОтправки) ИмяФайлаОтправки = ?(ЗначениеЗаполнено(ИмяФайлаОтправки), ИмяФайлаОтправки, СтрЗаменить(Файл.Ключ,
, ИмяФайлаОтправки ЗаменаТочки, "."));
, СтрЗаменить(Файл.Ключ, "___", "."));
КонецЕсли; КонецЕсли;
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + РазделительСтрок); ЗаписьТекста.ЗаписатьСтроку("--" + boundary + РазделительСтрок);
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""" ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""" + ИмяФайлаОтправки + """; filename=""" + ПутьФайл
+ ИмяФайлаОтправки
+"""; filename="""
+ СтрЗаменить(Файл.Ключ, "___", ".")
+ """"); + """");
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок); ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
ЗаписьТекста.ЗаписатьСтроку("Content-Type: " + ТипКонтента); ЗаписьТекста.ЗаписатьСтроку("Content-Type: " + ТипКонтента);
@@ -148,16 +146,15 @@
Ответ = Соединение.ВызватьHTTPМетод("POST", НовыйЗапрос); Ответ = Соединение.ВызватьHTTPМетод("POST", НовыйЗапрос);
НужнаРаспаковка = Ответ.Заголовки.Получить("Content-Encoding") = "gzip" Или НужнаРаспаковка = Ответ.Заголовки.Получить("Content-Encoding") = GZip Или Ответ.Заголовки.Получить(
Ответ.Заголовки.Получить("content-encoding") = "gzip"; "content-encoding") = GZip;
Если НужнаРаспаковка Тогда Если НужнаРаспаковка Тогда
Ответ = РаспаковатьОтвет(Ответ); Ответ = РаспаковатьОтвет(Ответ);
КонецЕсли; КонецЕсли;
Возврат ?(ТипЗнч(Ответ) = Тип("ДвоичныеДанные") Возврат ?(ТипЗнч(Ответ) = Тип("ДвоичныеДанные"), JsonВСтруктуру(Ответ), JsonВСтруктуру(
, JsonВСтруктуру(Ответ) Ответ.ПолучитьТелоКакДвоичныеДанные()));
, JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные()));
КонецФункции КонецФункции
@@ -169,12 +166,13 @@
Параметры = Новый Структура; Параметры = Новый Структура;
КонецЕсли; КонецЕсли;
GZip = "gzip";
ТипДанных = ?(JSON, "application/json", "application/x-www-form-urlencoded"); ТипДанных = ?(JSON, "application/json", "application/x-www-form-urlencoded");
СтруктураURL = РазбитьURL(URL); СтруктураURL = РазбитьURL(URL);
Заголовки = Новый Соответствие(); Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", ТипДанных); Заголовки.Вставить("Content-Type", ТипДанных);
Заголовки.Вставить("Accept-Encoding" , "gzip"); Заголовки.Вставить("Accept-Encoding", GZip);
Заголовки.Вставить("Accept", "*/*"); Заголовки.Вставить("Accept", "*/*");
Заголовки.Вставить("Connection", "keep-alive"); Заголовки.Вставить("Connection", "keep-alive");
@@ -186,7 +184,7 @@
КонецЕсли; КонецЕсли;
Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL()); Соединение = Новый HTTPСоединение(СтруктураURL["Сервер"], 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
НовыйЗапрос = Новый HTTPЗапрос(СтруктураURL["Адрес"], Заголовки); НовыйЗапрос = Новый HTTPЗапрос(СтруктураURL["Адрес"], Заголовки);
Если JSON Тогда Если JSON Тогда
@@ -200,8 +198,8 @@
Ответ = Соединение.ВызватьHTTPМетод("POST", НовыйЗапрос); Ответ = Соединение.ВызватьHTTPМетод("POST", НовыйЗапрос);
НужнаРаспаковка = Ответ.Заголовки.Получить("Content-Encoding") = "gzip" Или НужнаРаспаковка = Ответ.Заголовки.Получить("Content-Encoding") = GZip Или Ответ.Заголовки.Получить(
Ответ.Заголовки.Получить("content-encoding") = "gzip"; "content-encoding") = GZip;
Если НужнаРаспаковка Тогда Если НужнаРаспаковка Тогда
Ответ = РаспаковатьОтвет(Ответ); Ответ = РаспаковатьОтвет(Ответ);
@@ -212,7 +210,7 @@
Если ТипЗнч(Ответ) = Тип("ДвоичныеДанные") Тогда Если ТипЗнч(Ответ) = Тип("ДвоичныеДанные") Тогда
Попытка Попытка
Ответ = JsonВСтруктуру(Ответ) Ответ = JsonВСтруктуру(Ответ);
Исключение Исключение
Ответ = ПолучитьСтрокуИзДвоичныхДанных(Ответ); Ответ = ПолучитьСтрокуИзДвоичныхДанных(Ответ);
КонецПопытки; КонецПопытки;
@@ -233,10 +231,8 @@
МассивКлючЗначение = СтрРазделить(Параметр, "="); МассивКлючЗначение = СтрРазделить(Параметр, "=");
Если МассивКлючЗначение.Количество() = КоличествоЧастей Тогда Если МассивКлючЗначение.Количество() = КоличествоЧастей Тогда
СоответствиеВозврата.Вставить(МассивКлючЗначение[0] СоответствиеВозврата.Вставить(МассивКлючЗначение[0], МассивКлючЗначение[1]);
, МассивКлючЗначение[1]);
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
@@ -278,7 +274,8 @@
СтрокаПараметров = "?"; СтрокаПараметров = "?";
Для Каждого Параметр Из Параметры Цикл Для Каждого Параметр Из Параметры Цикл
СтрокаПараметров = СтрокаПараметров + Параметр.Ключ + "=" + КодироватьСтроку(Параметр.Значение, СпособКодированияСтроки.КодировкаURL) + "&"; СтрокаПараметров = СтрокаПараметров + Параметр.Ключ + "=" + КодироватьСтроку(Параметр.Значение,
СпособКодированияСтроки.КодировкаURL) + "&";
КонецЦикла; КонецЦикла;
СтрокаПараметров = Лев(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1); СтрокаПараметров = Лев(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1);
@@ -319,7 +316,9 @@
Функция JSONСтрокой(Знач Данные) Экспорт Функция JSONСтрокой(Знач Данные) Экспорт
ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Windows, " " , Истина, ЭкранированиеСимволовJSON.Нет, Ложь, Ложь, Ложь, Ложь); ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Windows, " ", Истина, ЭкранированиеСимволовJSON.Нет,
Ложь, Ложь, Ложь, Ложь);
ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ПроверятьСтруктуру = Истина; ЗаписьJSON.ПроверятьСтруктуру = Истина;
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON); ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
@@ -336,7 +335,7 @@
Процедура ВыполнитьСкрипт(Знач Текст) Экспорт Процедура ВыполнитьСкрипт(Знач Текст) Экспорт
ИмяСкрипта = ПолучитьИмяВременногоФайла(".ps1"); ИмяСкрипта = ПолучитьИмяВременногоФайла(".ps1");
ТекстСкрипта = Новый ТекстовыйДокумент(); ТекстСкрипта = Новый ТекстовыйДокумент;
ТекстСкрипта.УстановитьТекст(Текст); ТекстСкрипта.УстановитьТекст(Текст);
@@ -349,15 +348,6 @@
КонецПроцедуры КонецПроцедуры
Функция РазмерДанныхB64(Знач Base64Строка) Экспорт
РазмерДанных = СтрДлина(Base64Строка)
- ?(Прав(Base64Строка, 1) = "=", 1, 0)
- ?(Прав(Base64Строка, 2) = "==", 1, 0);
Возврат Цел(РазмерДанных / 4 * 3);
Конецфункции
#КонецОбласти #КонецОбласти
#КонецОбласти #КонецОбласти
@@ -392,6 +382,8 @@
// //
// Требования: платформа 1С версии 8.3.10 и выше // Требования: платформа 1С версии 8.3.10 и выше
// BSLLS:LatinAndCyrillicSymbolInWord-off
Функция РаспаковатьОтвет(Ответ) Функция РаспаковатьОтвет(Ответ)
Попытка Попытка
@@ -411,7 +403,8 @@
ЧтениеДанных.Пропустить(РазмерПрефиксаGZip); ЧтениеДанных.Пропустить(РазмерПрефиксаGZip);
РазмерСжатыхДанных = ЧтениеДанных.ИсходныйПоток().Размер() - РазмерПрефиксаGZip - РазмерПостфиксаGZip; РазмерСжатыхДанных = ЧтениеДанных.ИсходныйПоток().Размер() - РазмерПрефиксаGZip - РазмерПостфиксаGZip;
ПотокZip = Новый ПотокВПамяти(ZipРазмерLFH() + РазмерСжатыхДанных + ZipРазмерDD() + ZipРазмерCDH() + ZipРазмерEOCD()); ПотокZip = Новый ПотокВПамяти(ZipРазмерLFH() + РазмерСжатыхДанных + ZipРазмерDD() + ZipРазмерCDH()
+ ZipРазмерEOCD());
ЗаписьДанных = Новый ЗаписьДанных(ПотокZip); ЗаписьДанных = Новый ЗаписьДанных(ПотокZip);
ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipLFH()); ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipLFH());
ЧтениеДанных.КопироватьВ(ЗаписьДанных, РазмерСжатыхДанных); ЧтениеДанных.КопироватьВ(ЗаписьДанных, РазмерСжатыхДанных);
@@ -556,6 +549,8 @@
КонецФункции КонецФункции
// BSLLS:LatinAndCyrillicSymbolInWord-on
#КонецОбласти #КонецОбласти
#КонецОбласти #КонецОбласти

View File

@@ -27,13 +27,15 @@
Функция HMAC(Знач Ключ, Знач Данные, Тип, РазмерБлока) Экспорт Функция HMAC(Знач Ключ, Знач Данные, Тип, РазмерБлока) Экспорт
Дважды = 2;
Если Ключ.Размер() > РазмерБлока Тогда Если Ключ.Размер() > РазмерБлока Тогда
Ключ = Хеш(Ключ, Тип); Ключ = Хеш(Ключ, Тип);
КонецЕсли; КонецЕсли;
Если Ключ.Размер() <= РазмерБлока Тогда Если Ключ.Размер() <= РазмерБлока Тогда
Ключ = ПолучитьHexСтрокуИзДвоичныхДанных(Ключ); Ключ = ПолучитьHexСтрокуИзДвоичныхДанных(Ключ);
Ключ = Лев(Ключ + ПовторитьСтроку("00", РазмерБлока), РазмерБлока * 2); Ключ = Лев(Ключ + ПовторитьСтроку("00", РазмерБлока), РазмерБлока * Дважды);
КонецЕсли; КонецЕсли;
Ключ = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзHexСтроки(Ключ)); Ключ = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзHexСтроки(Ключ));