// MIT License // Copyright (c) 2023 Anton Tsitavets // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. // https://github.com/Bayselonarrend/OpenIntegrations // Если в не знаете с чего начать, то стоит найти метод ПолучитьСтандартныеПараметры() // и почитать комментарии // BSLLS:NumberOfOptionalParams-off // BSLLS:LatinAndCyrillicSymbolInWord-off // BSLLS:IncorrectLineBreak-off // Раскомментировать, если выполняется OneScript #Использовать "../../tools" #Область ПрограммныйИнтерфейс #Область ПолучениеТокена // Получение ссылки для интерактивного получения токена (access_token), который необходим // для дальнейших действий // // Параметры: // app_id - Строка,Число - app_id из настроек приложения // // Возвращаемое значение: // Строка - URL, по которому необходимо перейти в браузере Функция СоздатьСсылкуПолученияТокена(Знач App_id) Экспорт // access_token нужно будет забрать из параметра в строке адреса браузера Возврат "https://oauth.vk.com/authorize?client_id=" + OPI_Инструменты.ЧислоВСтроку(App_id) + "&scope=offline,wall,groups,photos,stats,stories,ads,market" + "&v=5.131&response_type=token&redirect_uri=https://api.vk.com/blank.html"; КонецФункции #КонецОбласти #Область РаботаСГруппой // Создать пост. // // Параметры: // Текст - Строка - Текст // МассивКартинок - Массив из Строка,ДвоичныеДанные - Массив картинок // Рекламный - Булево - Признак "Это реклама" // СсылкаПодЗаписью - Строка - Ссылка под записью, если нужна // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК Функция СоздатьПост(Знач Текст , Знач МассивКартинок , Знач Рекламный = Ложь , Знач СсылкаПодЗаписью = "" , Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); СтрокаВложений = ""; Если Не ТипЗнч(МассивКартинок) = Тип("Массив") Тогда ОднаКартинка = МассивКартинок; МассивКартинок = Новый Массив; МассивКартинок.Добавить(ОднаКартинка); КонецЕсли; Для Каждого КартинкаПоста Из МассивКартинок Цикл Ответ = ЗагрузитьФотоНаСервер(КартинкаПоста, Параметры_); ОтветСоответствие = Ответ.Получить("response")[0]; ФотоID = "photo" + OPI_Инструменты.ЧислоВСтроку(ОтветСоответствие.Получить("owner_id")) + "_" + OPI_Инструменты.ЧислоВСтроку(ОтветСоответствие.Получить("id")); СтрокаВложений = СтрокаВложений + ФотоID + ","; КонецЦикла; СтрокаВложений = СтрокаВложений + СсылкаПодЗаписью; Параметры_.Вставить("message" , Текст); Параметры_.Вставить("attachments" , СтрокаВложений); Параметры_.Вставить("mark_as_ads" , ?(Рекламный, 1, 0)); Параметры_.Вставить("close_comments" , ?(Рекламный, 1, 0)); Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.post", Параметры_); Возврат Ответ; КонецФункции // Удалить пост. // // Параметры: // IDПоста - Строка,Число - ID поста // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК Функция УдалитьПост(Знач IDПоста, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("post_id", OPI_Инструменты.ЧислоВСтроку(IDПоста)); Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.delete", Параметры_); Возврат Ответ; КонецФункции // Создать опрос. // // Параметры: // Вопрос - Строка - Вопрос опроса // МассивОтветов - Массив из Строка - Массив вариантов ответа // Картинка - Строка,ДвоичныеДанные - Картинка опроса // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК Функция СоздатьОпрос(Знач Вопрос, Знач МассивОтветов, Знач Картинка = "", Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Ответ = OPI_Инструменты.Get("api.vk.com/method/polls.getPhotoUploadServer", Параметры_); Response = "response"; Hash = "hash"; Photo = "photo"; URL = Ответ[Response]["upload_url"]; IDФото = ""; Параметры_.Вставить("upload_url", URL); Если Не Картинка = "" Тогда Если ТипЗнч(Картинка) = Тип("Строка") Тогда Путь = Картинка; Картинка = Новый ДвоичныеДанные(Картинка); Иначе //@skip-check missing-temporary-file-deletion // BSLLS:MissingTemporaryFileDeletion-off Путь = ПолучитьИмяВременногоФайла("jpeg"); КонецЕсли; Файлы = Новый Соответствие; Файлы.Вставить(Путь, Картинка); Ответ = OPI_Инструменты.PostMultipart(URL, Параметры_, Файлы); Параметры_.Вставить(Hash , Ответ[Hash]); Параметры_.Вставить(Photo , Ответ[Photo]); Ответ = OPI_Инструменты.Get("api.vk.com/method/polls.savePhoto", Параметры_); IDФото = Ответ.Получить(Response)["id"]; КонецЕсли; Параметры_.Вставить("is_anonymous" , 1); Параметры_.Вставить("is_multiple" , 0); Ответы = "["; Первый = Истина; Для Каждого Ответ Из МассивОтветов Цикл Если Первый Тогда Первый = Ложь; Иначе Ответы = Ответы + ", "; КонецЕсли; Ответы = Ответы + """" + Ответ + """"; КонецЦикла; Ответы = Ответы + "]"; Параметры_.Вставить("add_answers" , Ответы); Параметры_.Вставить("photo_id" , OPI_Инструменты.ЧислоВСтроку(IDФото)); Параметры_.Вставить("question" , Вопрос); Опрос = OPI_Инструменты.Get("api.vk.com/method/polls.create", Параметры_); ОпросСоответствие = Опрос.Получить(Response); ОпросID = "poll" + OPI_Инструменты.ЧислоВСтроку(ОпросСоответствие.Получить("owner_id")) + "_" + OPI_Инструменты.ЧислоВСтроку(ОпросСоответствие.Получить("id")); Параметры_.Вставить("attachments", ОпросID); Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.post", Параметры_); Возврат Ответ; КонецФункции // Создать альбом. // // Параметры: // Наименование - Строка - Наименование альбома // Описание - Строка - Описание альбома // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК Функция СоздатьАльбом(Знач Наименование, Знач Описание = "", Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("title" , Наименование); Параметры_.Вставить("description" , Описание); Параметры_.Вставить("upload_by_admins_only", 1); Ответ = OPI_Инструменты.Get("api.vk.com/method/photos.createAlbum", Параметры_); Возврат Ответ; КонецФункции // Удалить альбом. // // Параметры: // IDАльбома - Строка,Число - ID альбома // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК Функция УдалитьАльбом(Знач IDАльбома, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("album_id", OPI_Инструменты.ЧислоВСтроку(IDАльбома)); Ответ = OPI_Инструменты.Get("api.vk.com/method/photos.deleteAlbum", Параметры_); Возврат Ответ; КонецФункции // Создать историю. // // Параметры: // Картинка - Строка,ДвоичныеДанные - Фон истории // URL - Строка - URL для кнопки под историей // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК Функция СоздатьИсторию(Знач Картинка, Знач URL = "", Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("link_text" , "more"); Параметры_.Вставить("link_url" , URL); Параметры_.Вставить("add_to_news" , "1"); Ответ = ЗагрузитьФотоНаСервер(Картинка, Параметры_, "История"); Возврат Ответ; КонецФункции // Сохранить картинку в альбом. // // Параметры: // IDАльбома - Строка,Число - ID альбома // Картинка - ДвоичныеДанные,Строка - Двоичные данные или путь к картинке // Описание - Строка - Описание картинки // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК Функция СохранитьКартинкуВАльбом(Знач IDАльбома, Знач Картинка, Знач Описание = "", Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("album_id" , OPI_Инструменты.ЧислоВСтроку(IDАльбома)); Параметры_.Вставить("caption" , Описание); Возврат ЗагрузитьФотоНаСервер(Картинка, Параметры_, "Альбом"); КонецФункции // Удалить картинку. // // Параметры: // IDКартинки - Строка,Число - ID картинки // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК Функция УдалитьКартинку(Знач IDКартинки, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("photo_id", OPI_Инструменты.ЧислоВСтроку(IDКартинки)); Ответ = OPI_Инструменты.Get("api.vk.com/method/photos.delete", Параметры_); Возврат Ответ; КонецФункции #КонецОбласти #Область РаботаСОбсуждениями // Создать обсуждение. // // Параметры: // Наименование - Строка - Наименование обсуждения // ТекстПервогоСообщения - Строка - Текст первого сообщения // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК Функция СоздатьОбсуждение(Знач Наименование, Знач ТекстПервогоСообщения, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("title" , Наименование); Параметры_.Вставить("text" , ТекстПервогоСообщения); Ответ = OPI_Инструменты.Get("api.vk.com/method/board.addTopic", Параметры_); Возврат Ответ; КонецФункции // Закрыть обсуждение. // // Параметры: // IDОбсуждения - Строка,Число - ID обсуждения // УдалитьПолностью - Булево - Удалить полностью или закрыть (сделать неактивным) // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Закрыть обсуждение Функция ЗакрытьОбсуждение(Знач IDОбсуждения, Знач УдалитьПолностью = Ложь, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("topic_id", OPI_Инструменты.ЧислоВСтроку(IDОбсуждения)); Метод = ?(УдалитьПолностью, "deleteTopic", "closeTopic"); Ответ = OPI_Инструменты.Get("api.vk.com/method/board." + Метод, Параметры_); Возврат Ответ; КонецФункции // Открыть обсуждение. // // Параметры: // IDОбсуждения - Строка,Число - ID обсуждения // Параметры - Структура из Строка - См. ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК Функция ОткрытьОбсуждение(Знач IDОбсуждения, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("topic_id", OPI_Инструменты.ЧислоВСтроку(IDОбсуждения)); Ответ = OPI_Инструменты.Get("api.vk.com/method/board.openTopic", Параметры_); Возврат Ответ; КонецФункции // Написать в обсуждение. // // Параметры: // IDОбсуждения - Строка,Число - ID обсуждения // Текст - Строка - Текст сообщения // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК Функция НаписатьВОбсуждение(Знач IDОбсуждения, Знач Текст, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("topic_id" , OPI_Инструменты.ЧислоВСтроку(IDОбсуждения)); Параметры_.Вставить("message" , Текст); Ответ = OPI_Инструменты.Get("api.vk.com/method/board.createComment", Параметры_); Возврат Ответ; КонецФункции #КонецОбласти #Область ИнтерактивныеДействия // Поставить лайк. // // Параметры: // IDПоста - Строка,Число - ID поста // IDСтены - Строка,Число - ID стены расположения поста // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК Функция ПоставитьЛайк(Знач IDПоста, Знач IDСтены = "", Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); IDСтены = ?(ЗначениеЗаполнено(IDСтены), IDСтены, Параметры_["owner_id"]); ОбъектВК = "wall" + OPI_Инструменты.ЧислоВСтроку(IDСтены) + "_" + OPI_Инструменты.ЧислоВСтроку(IDПоста); Параметры_.Вставить("type" , "post"); Параметры_.Вставить("object" , ОбъектВК); Параметры_.Вставить("item_id" , OPI_Инструменты.ЧислоВСтроку(IDПоста)); Параметры_.Вставить("owner_id" , OPI_Инструменты.ЧислоВСтроку(IDСтены)); Параметры_.Вставить("from_group" , 0); Ответ = OPI_Инструменты.Get("api.vk.com/method/likes.add", Параметры_); Возврат Ответ; КонецФункции // Сделать репост. // // Параметры: // IDПоста - Строка,Число - ID поста // IDСтены - Строка,Число - ID стены расположения поста // ЦелеваяСтена - Строка,Число - ID целевой стены/группы // Рекламный - Булево - Признак рекламного поста // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК //@skip-check method-too-many-params // BSLLS:NumberOfOptionalParams-off Функция СделатьРепост(Знач IDПоста , Знач IDСтены = "" , Знач ЦелеваяСтена = "" , Знач Рекламный = Ложь , Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Источник = ?(ЗначениеЗаполнено(IDСтены) , OPI_Инструменты.ЧислоВСтроку(IDСтены) , OPI_Инструменты.ЧислоВСтроку(Параметры_["owner_id"])); Приемник = ?(ЗначениеЗаполнено(ЦелеваяСтена) , СтрЗаменить(OPI_Инструменты.ЧислоВСтроку(ЦелеваяСтена), "-", "") , OPI_Инструменты.ЧислоВСтроку(Параметры_["group_id"])); Параметры_.Вставить("object" , "wall" + Источник + "_" + OPI_Инструменты.ЧислоВСтроку(IDПоста)); Параметры_.Вставить("group_id" , Приемник); Параметры_.Вставить("mark_as_ads" , ?(Рекламный, 1, 0)); Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.repost", Параметры_); Возврат Ответ; КонецФункции // BSLLS:NumberOfOptionalParams-on // Написать сообщение. // // Параметры: // Текст - Строка - Текст сообщения // IDПользователя - Строка - ID пользователя-адресата // Communitytoken - Строка - Токен бота чата сообщества, котрый можно получить в настройках // Клавиатура - Строка - JSON клавиатуры. См.СформироватьКлавиатуру // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК Функция НаписатьСообщение(Знач Текст , Знач IDПользователя , Знач Communitytoken , Знач Клавиатура = "" , Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("access_token", Communitytoken); Параметры_.Вставить("user_id" , OPI_Инструменты.ЧислоВСтроку(IDПользователя)); Параметры_.Вставить("peer_id" , OPI_Инструменты.ЧислоВСтроку(IDПользователя)); Параметры_.Вставить("parse_mode" , "Markdown"); Параметры_.Вставить("random_id" , 0); Параметры_.Вставить("message" , Текст); Если ЗначениеЗаполнено(Клавиатура) Тогда Параметры_.Вставить("keyboard", Клавиатура); КонецЕсли; Ответ = OPI_Инструменты.Get("api.vk.com/method/messages.send", Параметры_); Возврат Ответ; КонецФункции // Написать комментарий. // // Параметры: // IDПоста - Строка,Число - ID целевого поста // IDСтены - Строка,Число - ID стены расположения поста // Текст - Строка - Текст комментария // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция НаписатьКомментарий(Знач IDПоста, Знач IDСтены, Знач Текст, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("owner_id" , OPI_Инструменты.ЧислоВСтроку(IDСтены)); Параметры_.Вставить("from_group" , OPI_Инструменты.ЧислоВСтроку(Параметры_["group_id"])); Параметры_.Вставить("post_id" , OPI_Инструменты.ЧислоВСтроку(IDПоста)); Параметры_.Вставить("message" , Текст); Параметры_.Удалить("group_id"); Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.createComment", Параметры_); Возврат Ответ; КонецФункции // Сократить ссылку. // // Параметры: // URL - Строка - URL для сокращения // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // Строка - Сокращенный URL Функция СократитьСсылку(Знач URL, Знач Параметры = "") Экспорт Response = "response"; Параметры_ = Новый Структура; Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("url", URL); Ответ = OPI_Инструменты.Get("https://api.vk.com/method/utils.getShortLink", Параметры_); Возврат Ответ[Response]["short_url"]; КонецФункции #КонецОбласти #Область Статистика // Получить статистику. // // Параметры: // ДатаНачала - Дата - Дата начала периода // ДатаОкончания - Дата - Дата окончания периода // Параметры - Структура из Строка - Параметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК Функция ПолучитьСтатистику(Знач ДатаНачала, Знач ДатаОкончания, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); ДатаНачала = Формат(ДатаНачала - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0"); ДатаОкончания = Формат(ДатаОкончания - дата(1970, 1, 1, 1, 0, 0), "ЧГ=0"); Параметры_.Вставить("timestamp_from" , ДатаНачала); Параметры_.Вставить("timestamp_to" , ДатаОкончания); Параметры_.Вставить("stats_groups" , "visitors, reach, activity"); Ответ = OPI_Инструменты.Get("api.vk.com/method/stats.get", Параметры_); Возврат Ответ; КонецФункции // Получить статистику постов. // // Параметры: // МассивИДПостов - Массив из Строка,Число - Массив ID постов // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // Массив из Произвольный - Массив данных статистики по постам Функция ПолучитьСтатистикуПостов(Знач МассивИДПостов, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); МассивОтветов = Новый Массив; МассивНабора = Новый Массив; МаксимумПостов = 30; Response = "response"; Для Каждого Пост Из МассивИДПостов Цикл МассивНабора.Добавить(OPI_Инструменты.ЧислоВСтроку(Пост)); Если МассивНабора.Количество() = МаксимумПостов Тогда СтрокаНомеров = СтрСоединить(МассивНабора, ","); Параметры_.Вставить("post_ids", СтрокаНомеров); Статистика = OPI_Инструменты.Get("api.vk.com/method/stats.getPostReach", Параметры_); МассивСтатистики = Статистика[Response]; Для Каждого ЭлементСтатистики Из МассивСтатистики Цикл МассивОтветов.Добавить(ЭлементСтатистики); КонецЦикла; МассивНабора = Новый Массив; КонецЕсли; КонецЦикла; СтрокаНомеров = СтрСоединить(МассивНабора, ","); Параметры_.Вставить("post_ids", СтрокаНомеров); Статистика = OPI_Инструменты.Get("api.vk.com/method/stats.getPostReach", Параметры_); МассивСтатистики = Статистика[Response]; Для Каждого ЭлементСтатистики Из МассивСтатистики Цикл МассивОтветов.Добавить(ЭлементСтатистики); КонецЦикла; Возврат МассивОтветов; КонецФункции #КонецОбласти #Область РаботаСРекламнымКабинетом // Создать рекламную кампанию. // // Параметры: // IDКабинета - Строка,Число - ID рекламного кабинета // Наименование - Строка - Наименование кампании // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция СоздатьРекламнуюКампанию(Знач IDКабинета, Знач Наименование, Знач Параметры = "") Экспорт ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату(); Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("account_id", OPI_Инструменты.ЧислоВСтроку(IDКабинета)); МассивСтруктур = Новый Массив; ДатаСтарт = Формат(ТекущаяДата - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0"); ДатаСтоп = Формат(ДобавитьМесяц(ТекущаяДата, 24) - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0"); СтруктураКампании = Новый Структура; СтруктураКампании.Вставить("type" , "promoted_posts"); СтруктураКампании.Вставить("name" , Наименование); СтруктураКампании.Вставить("day_limit" , 0); СтруктураКампании.Вставить("all_limit" , 0); СтруктураКампании.Вставить("start_time" , ДатаСтарт); СтруктураКампании.Вставить("stop_time" , ДатаСтоп); СтруктураКампании.Вставить("status" , 1); МассивСтруктур.Добавить(СтруктураКампании); JSONДата = OPI_Инструменты.JSONСтрокой(МассивСтруктур); Параметры_.Вставить("data", JSONДата); Ответ = OPI_Инструменты.Get("api.vk.com/method/ads.createCampaigns", Параметры_); Возврат Ответ; КонецФункции // Создать рекламное объявление. // // Параметры: // НомерКампании - Строка,Число - ID рекламной кампании // ДневнойЛимит - Строка,Число - Дневной лимит в рублях // НомерКатегории - Строка,Число - Номер рекламной категории // IDПоста - Строка,Число - ID поста, используемого в качетсве рекламы // IDКабинета - Строка,Число - ID рекламного кабинета // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК Функция СоздатьРекламноеОбъявление(Знач НомерКампании , Знач ДневнойЛимит , Знач НомерКатегории , Знач IDПоста , Знач IDКабинета , Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Линк = "https://vk.com/wall-" + Параметры_["group_id"] + "_" + OPI_Инструменты.ЧислоВСтроку(IDПоста); МассивСтруктур = Новый Массив; СтруктураКампании = Новый Структура; СтруктураКампании.Вставить("campaign_id" , OPI_Инструменты.ЧислоВСтроку(НомерКампании)); СтруктураКампании.Вставить("ad_format" , 9); СтруктураКампании.Вставить("conversion_event_id" , 1); СтруктураКампании.Вставить("autobidding" , 1); СтруктураКампании.Вставить("cost_type" , 3); СтруктураКампании.Вставить("goal_type" , 2); СтруктураКампании.Вставить("ad_platform" , "all"); СтруктураКампании.Вставить("publisher_platforms" , "vk"); СтруктураКампании.Вставить("publisher_platforms_auto" , "1"); СтруктураКампании.Вставить("day_limit" , OPI_Инструменты.ЧислоВСтроку(ДневнойЛимит)); СтруктураКампании.Вставить("all_limit" , "0"); СтруктураКампании.Вставить("category1_id" , OPI_Инструменты.ЧислоВСтроку(НомерКатегории)); СтруктураКампании.Вставить("age_restriction" , 0); СтруктураКампании.Вставить("status" , 1); СтруктураКампании.Вставить("name" , "Объявление"); СтруктураКампании.Вставить("link_url" , Линк); МассивСтруктур.Добавить(СтруктураКампании); JSONДата = OPI_Инструменты.JSONСтрокой(МассивСтруктур); Параметры_.Вставить("data" , JSONДата); Параметры_.Вставить("account_id" , OPI_Инструменты.ЧислоВСтроку(IDКабинета)); Ответ = OPI_Инструменты.Get("api.vk.com/method/ads.createAds", Параметры_); Возврат Ответ; КонецФункции // Приостановить рекламное объявление. // // Параметры: // IDКабинета - Строка,Число - ID рекламного кабинета // IDОбъявления - Строка,Число - ID объявления // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера ВК Функция ПриостановитьРекламноеОбъявление(Знач IDКабинета, Знач IDОбъявления, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("account_id", OPI_Инструменты.ЧислоВСтроку(IDКабинета)); МассивСтруктур = Новый Массив; СтруктураКампании = Новый Структура; СтруктураКампании.Вставить("ad_id" , OPI_Инструменты.ЧислоВСтроку(IDОбъявления)); СтруктураКампании.Вставить("status" , 0); МассивСтруктур.Добавить(СтруктураКампании); JSONДата = OPI_Инструменты.JSONСтрокой(МассивСтруктур); Параметры_.Вставить("data", JSONДата); Ответ = OPI_Инструменты.Get("api.vk.com/method/ads.updateAds", Параметры_); Возврат Ответ; КонецФункции // Получить список рекламных категорий. // // Параметры: // Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // Строка, Произвольный, ДвоичныеДанные, Неопределено - Получить список рекламных категорий Функция ПолучитьСписокРекламныхКатегорий(Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Ответ = OPI_Инструменты.Get("api.vk.com/method/ads.getCategories", Параметры_); Возврат Ответ; КонецФункции #КонецОбласти #Область РаботаСТоварами // Получить список категорий товаров. // // Параметры: // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // Соответствие Из Строка - Ключ - ID, Значение - Имя Функция ПолучитьСписокКатегорийТоваров(Знач Параметры = "") Экспорт Response = "response"; Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getCategories", Параметры_); Количество = Ответ[Response]["count"]; Параметры_.Вставить("count", Количество); Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getCategories", Параметры_); Категории = Ответ[Response]["items"]; СоответствиеКатегорий = Новый Соответствие; Для Каждого Категория Из Категории Цикл СоответствиеКатегорий.Вставить(Категория["id"], Категория["name"]); КонецЦикла; Возврат СоответствиеКатегорий; КонецФункции // Получить список товаров. // // Параметры: // Альбом - Строка,Число - ID альбома, если нужен // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // Соответствие Из КлючИЗначение - Массив соответствий товаров Функция ПолучитьСписокТоваров(Знач Альбом = "", Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("count" , 200); Параметры_.Вставить("extended" , 1); Параметры_.Вставить("with_disabled", 1); Если ЗначениеЗаполнено(Альбом) Тогда Параметры_.Вставить("album_id", OPI_Инструменты.ЧислоВСтроку(Альбом)); КонецЕсли; МассивТоваров = Новый Массив; ПолучитьСписокТоваровРекурсивно(МассивТоваров, Параметры_); Возврат МассивТоваров; КонецФункции // Получить товары по ИД. // // Параметры: // Товары - Строка, Массив Из Строка - ID товара или массив ID товаров // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция ПолучитьТоварыПоИД(Знач Товары, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); СтрокаТоваров = ""; Owner = "owner_id"; Если ТипЗнч(Товары) <> Тип("Массив") Тогда Товар = Товары; Товары = Новый Массив; Товары.Добавить(Товар); КонецЕсли; Для Каждого Товар Из Товары Цикл ТекущийТовар = Параметры[Owner] + "_" + Товар; ТекущийТовар = OPI_Инструменты.ЧислоВСтроку(ТекущийТовар); СтрокаТоваров = СтрокаТоваров + ТекущийТовар + ","; КонецЦикла; СтрокаТоваров = Лев(СтрокаТоваров, СтрДлина(СтрокаТоваров) - 1); Параметры_.Вставить("item_ids", СтрокаТоваров); Параметры_.Вставить("extended", 1); Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getById", Параметры_); Возврат Ответ; КонецФункции // Добавить товар. // // Параметры: // ОписаниеТовара - Соответствие Из КлючИЗначение - См.ПолучитьОписаниеТовара // Подборка - Строка - Подборка // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция ДобавитьТовар(Знач ОписаниеТовара, Знач Подборка = "", Знач Параметры = "") Экспорт Возврат УправлениеТоваром(ОписаниеТовара, , Подборка, Параметры); КонецФункции // Изменить товар. // // Параметры: // Товар - Число,Строка - Идентификатор изменяемого товара // ОписаниеТовара - Соответствие Из КлючИЗначение - См.ПолучитьОписаниеТовара // Подборка - Строка - Идентификатор новой подборки // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция ИзменитьТовар(Знач Товар, Знач ОписаниеТовара, Знач Подборка = "", Знач Параметры = "") Экспорт Возврат УправлениеТоваром(ОписаниеТовара, Товар, Подборка, Параметры); КонецФункции // Удалить товар. // // Параметры: // Товар - Строка,Число - ID товара // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция УдалитьТовар(Знач Товар, Знач Параметры = "") Экспорт Товар = OPI_Инструменты.ЧислоВСтроку(Товар); Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("item_id", Товар); Ответ = OPI_Инструменты.Get("api.vk.com/method/market.delete", Параметры_); Возврат Ответ; КонецФункции // Сгруппировать товары. // // Параметры: // МассивТоваров - Массив Из Строка - Массив ID товаров // СуществующаяГруппа - Строка - ID существующей группы, если необходимо // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция СгруппироватьТовары(Знач МассивТоваров, Знач СуществующаяГруппа = "", Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); МассивТоваров_ = Новый Массив; Для Каждого Товар Из МассивТоваров Цикл МассивТоваров_.Добавить(OPI_Инструменты.ЧислоВСтроку(Товар)); КонецЦикла; Товары = СтрСоединить(МассивТоваров_, ","); Параметры_.Вставить("item_ids", Товары); Если ЗначениеЗаполнено(СуществующаяГруппа) Тогда Параметры_.Вставить("item_group_id", OPI_Инструменты.ЧислоВСтроку(СуществующаяГруппа)); КонецЕсли; Ответ = OPI_Инструменты.Get("api.vk.com/method/market.groupItems", Параметры_); Возврат Ответ; КонецФункции // Получить описание товара. // // Возвращаемое значение: // Соответствие Из КлючИЗначение - Пустое описание товара: // *Имя - Строка - Имя товара // *Описание - Строка - Описание товара // *Категория - Строка - См. ПолучитьСписокКатегорийТоваров // *Цена - Число - Цена товара // *СтараяЦена - Число - Для отображения скидки/изменения цены // *ОсновноеФото - Строка,ДвоичныеДанные - Двоичные данные или путь к фото // *URL - Строка - Ссылка на страницу сайта магазина // *ДополнительныеФото - Массив Из Строка - Двоичные данные или пути к фото // *ЗначенияСвойств - Массив Из Строка - См.ДобавитьВариантСвойстваТовара // *ГлавныйВГруппе - Булево - Главный в группе, если есть в группе // *Ширина - Число - Ширина товара в мм. // *Высота - Число - Высота товара в мм. // *Глубина - Число - Глубина товара в мм. // *Вес - Число - Вес в гр. // *SKU - Строка - SKU // *ДоступныйОстаток - Число - Остаток. -1 - не ограничено Функция ПолучитьОписаниеТовара() Экспорт Товар = Новый Соответствие(); Товар.Вставить("Имя" , "Новый товар"); // Имя товара Товар.Вставить("Описание" , "Описание товара"); // Описание товара Товар.Вставить("Категория" , "20173"); // См ПолучитьСписокКатегорийТоваров() Товар.Вставить("Цена" , 1); // Цена. Товар.Вставить("СтараяЦена" , Неопределено); // Для отражения изменения цены Товар.Вставить("ОсновноеФото" , Неопределено); // ДД или путь к осн. фото Товар.Вставить("URL" , Неопределено); // Ссылка на страницу магазина Товар.Вставить("ДополнительныеФото" , Новый Массив); // Массив путей или ДД для доп. фото Товар.Вставить("ЗначенияСвойств" , Новый Массив); // Значения свойств (варианты). Максимум 2 Товар.Вставить("ГлавныйВГруппе" , Ложь); // Сделать главным в своей группе Товар.Вставить("Ширина" , Неопределено); // В миллиметрах Товар.Вставить("Высота" , Неопределено); // В миллиметрах Товар.Вставить("Глубина" , Неопределено); // В миллиметрах Товар.Вставить("Вес" , Неопределено); // В граммах Товар.Вставить("SKU" , Неопределено); // Артикул Товар.Вставить("ДоступныйОстаток" , 1); Возврат Товар; КонецФункции #КонецОбласти #Область РаботаСПодборкамиТоваров // Получить список подборок. // // Параметры: // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // Соответствие Из КлючИЗначение - Массив соответствий подборок Функция ПолучитьСписокПодборок(Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("count", 100); МассивАльбомов = Новый Массив; ПолучитьСписокАльбомовРекурсивно(МассивАльбомов, Параметры_); Возврат МассивАльбомов; КонецФункции // Получить подборки по ИД. // // Параметры: // Подборки - Строка, Массив Из Строка - ID подборки(-ок) // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция ПолучитьПодборкиПоИД(Знач Подборки, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); СтрокаПодборок = ""; Если ТипЗнч(Подборки) <> Тип("Массив") Тогда Подборка = Подборки; Подборки = Новый Массив; Подборки.Добавить(Подборка); КонецЕсли; Для Каждого Подборка Из Подборки Цикл ТекущаяПодборка = OPI_Инструменты.ЧислоВСтроку(Подборка); СтрокаПодборок = СтрокаПодборок + ТекущаяПодборка + ","; КонецЦикла; СтрокаПодборок = Лев(СтрокаПодборок, СтрДлина(СтрокаПодборок) - 1); Параметры_.Вставить("album_ids", СтрокаПодборок); Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getAlbumById", Параметры_); Возврат Ответ; КонецФункции // Создать подборку товаров. // // Параметры: // Название - Строка - Название подборки // Картинка - Строка,ДвоичныеДанные - Путь или двоичные данные картинки // Основная - Булево - Основная // Скрытая - Булево - Скрытая // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция СоздатьПодборкуТоваров(Знач Название , Знач Картинка , Знач Основная = Ложь , Знач Скрытая = Ложь , Знач Параметры = "") Экспорт Возврат УправлениеПодборкой(Название, Картинка, , Основная, Скрытая, Параметры); КонецФункции // Изменить подборку товаров. // // Параметры: // Название - Строка - Название подборки // Подборка - Строка - ID подборки // Картинка - Строка,ДвоичныеДанные - Новая картинка подборки // Основная - Булево - Основная // Скрытая - Булево - Скрытая // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера //@skip-check method-too-many-params Функция ИзменитьПодборкуТоваров(Знач Название , Знач Подборка , Знач Картинка = "" , Знач Основная = Ложь , Знач Скрытая = Ложь , Знач Параметры = "") Экспорт Возврат УправлениеПодборкой(Название, Картинка, Подборка, Основная, Скрытая, Параметры); КонецФункции // Добавить товар в подборку. // // Параметры: // МассивТовар - Строка, Число - Массив товаров или товар // Подборка - Строка - ID подборки // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция ДобавитьТоварВПодборку(Знач МассивТовар, Знач Подборка, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Подборка = OPI_Инструменты.ЧислоВСтроку(Подборка); МассивТовар_ = Новый Массив; Если Не ТипЗнч(МассивТовар) = Тип("Массив") Тогда Товар = МассивТовар; МассивТовар = Новый Массив; МассивТовар.Добавить(Товар); КонецЕсли; Для Каждого Товар Из МассивТовар Цикл МассивТовар_.Добавить(OPI_Инструменты.ЧислоВСтроку(Товар)); КонецЦикла; СписокТоваров = СтрСоединить(МассивТовар_, ","); Параметры_.Вставить("item_ids" , СписокТоваров); Параметры_.Вставить("album_ids", Подборка); Ответ = OPI_Инструменты.Get("api.vk.com/method/market.addToAlbum", Параметры_); Возврат Ответ; КонецФункции // Удалить товар из подборки. // // Параметры: // Товар - Строка - ID товара // Подборка - Строка - ID подборки // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция УдалитьТоварИзПодборки(Знач Товар, Знач Подборка, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Подборка = OPI_Инструменты.ЧислоВСтроку(Подборка); Параметры_.Вставить("item_id" , OPI_Инструменты.ЧислоВСтроку(Товар)); Параметры_.Вставить("album_ids", Подборка); Ответ = OPI_Инструменты.Get("api.vk.com/method/market.removeFromAlbum", Параметры_); Возврат Ответ; КонецФункции // Удалить подборку. // // Параметры: // Подборка - Строка - ID подборки // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция УдалитьПодборку(Знач Подборка, Знач Параметры = "") Экспорт Подборка = OPI_Инструменты.ЧислоВСтроку(Подборка); Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("album_id", Подборка); Ответ = OPI_Инструменты.Get("api.vk.com/method/market.deleteAlbum", Параметры_); Возврат Ответ; КонецФункции #КонецОбласти #Область РаботаСоСвойствамиТоваров // Получить список свойств. // // Параметры: // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция ПолучитьСписокСвойств(Знач Параметры = "") Экспорт Response = "response"; Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getProperties", Параметры_); Свойства = Ответ[Response]["items"]; Возврат Свойства; КонецФункции // Создать свойство товара. // // Параметры: // Название - Строка - Название свойства // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция СоздатьСвойствоТовара(Знач Название, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("title", Название); Ответ = OPI_Инструменты.Get("api.vk.com/method/market.addProperty", Параметры_); Возврат Ответ; КонецФункции // Изменить свойство товара. // // Параметры: // Название - Строка - Название // Свойство - Строка,Число - ID свойства // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция ИзменитьСвойствоТовара(Знач Название, Знач Свойство, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("title" , Название); Параметры_.Вставить("property_id", OPI_Инструменты.ЧислоВСтроку(Свойство)); Параметры_.Вставить("type" , "text"); Ответ = OPI_Инструменты.Get("api.vk.com/method/market.editProperty", Параметры_); Возврат Ответ; КонецФункции // Удалить свойство товара. // // Параметры: // Свойство - Строка,Число - ID свойства // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция УдалитьСвойствоТовара(Знач Свойство, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("property_id", OPI_Инструменты.ЧислоВСтроку(Свойство)); Ответ = OPI_Инструменты.Get("api.vk.com/method/market.deleteProperty", Параметры_); Возврат Ответ; КонецФункции // Добавить вариант свойства товара. // // Параметры: // Значение - Строка - Значение свойства // Свойство - Строка,Число - ID свойства, куда добавляется вариант // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция ДобавитьВариантСвойстваТовара(Знач Значение, Знач Свойство, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("property_id", OPI_Инструменты.ЧислоВСтроку(Свойство)); Параметры_.Вставить("title" , Значение); Ответ = OPI_Инструменты.Get("api.vk.com/method/market.addPropertyVariant", Параметры_); Возврат Ответ; КонецФункции // Изменить вариант свойства товара. // // Параметры: // Значение - Строка - Новое значение свойства // Свойство - Строка,Число - ID свойства // Вариант - Строка,Число - ID варианта // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция ИзменитьВариантСвойстваТовара(Знач Значение, Знач Свойство, Знач Вариант, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("property_id", OPI_Инструменты.ЧислоВСтроку(Свойство)); Параметры_.Вставить("variant_id" , OPI_Инструменты.ЧислоВСтроку(Вариант)); Параметры_.Вставить("title" , Значение); Ответ = OPI_Инструменты.Get("api.vk.com/method/market.editPropertyVariant", Параметры_); Возврат Ответ; КонецФункции // Удалить вариант свойства товара. // // Параметры: // Вариант - Строка,Число - ID варианта // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Функция УдалитьВариантСвойстваТовара(Знач Вариант, Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("variant_id", OPI_Инструменты.ЧислоВСтроку(Вариант)); Ответ = OPI_Инструменты.Get("api.vk.com/method/market.deletePropertyVariant", Параметры_); Возврат Ответ; КонецФункции #КонецОбласти #Область РаботаСЗаказами // Получить список заказов. // // Параметры: // Параметры - Структура Из Строка - См.ПолучитьСтандартныеПараметры // // Возвращаемое значение: // Соответствие Из КлючИЗначение - Массив соответствий заказов Функция ПолучитьСписокЗаказов(Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("count", 50); МассивЗаказов = Новый Массив; ПолучитьСписокЗаказовРекурсивно(МассивЗаказов, Параметры_); Возврат МассивЗаказов; КонецФункции #КонецОбласти #Область Прочие // Сформировать клавиатуру. // // Параметры: // МассивКнопок - Массив из Строка - Массив заголовков кнопок // // Возвращаемое значение: // Строка - JSON клавиатуры Функция СформироватьКлавиатуру(Знач МассивКнопок) Экспорт Клавиатура = Новый Структура; МассивКлавиатуры = Новый Массив; МассивБлока = Новый Массив; Для Каждого Действие Из МассивКнопок Цикл Кнопка = Новый Структура; Выражение = Новый Структура; Выражение.Вставить("type" , "text"); Выражение.Вставить("label", Действие); Кнопка.Вставить("action", Выражение); МассивБлока.Добавить(Кнопка); КонецЦикла; МассивКлавиатуры.Добавить(МассивБлока); Клавиатура.Вставить("buttons" , МассивКлавиатуры); Клавиатура.Вставить("one_time", Ложь); Возврат OPI_Инструменты.JSONСтрокой(Клавиатура); КонецФункции #КонецОбласти #КонецОбласти #Область СлужебныеПроцедурыИФункции Функция ПолучитьСтандартныеПараметры(Знач Параметры = "") // Здесь собрано определение данных для работы с VK API // Вы можете переопределять их, передавая в качестве параметра // Совпадающие поля будут перезаписаны с приоритетом параметра функции Параметры_ = Новый Структура; // access_token - можно получить в браузере по URL из функции СоздатьСсылкуПолученияТокена() // from_group - действия будут выполняться от лица группы // owner_id - id группы с "-" в начале. Можно найти в настройках группы ВК или в ее URL, если не был // установлен свой // app_id - id приложения, которое необходимо создать в профиле на странице для разработчиков // group_id - owner_id, но без "-" Параметры_.Вставить("access_token" , ""); Параметры_.Вставить("from_group" , "1"); Параметры_.Вставить("owner_id" , ""); Параметры_.Вставить("v" , "5.131"); Параметры_.Вставить("app_id" , ""); Параметры_.Вставить("group_id" , ""); Если ТипЗнч(Параметры) = Тип("Структура") Тогда Для Каждого ПереданныйПараметр Из Параметры Цикл Параметры_.Вставить(ПереданныйПараметр.Ключ, OPI_Инструменты.ЧислоВСтроку(ПереданныйПараметр.Значение)); КонецЦикла; КонецЕсли; Возврат Параметры_; КонецФункции Функция ЗагрузитьФотоНаСервер(Знач Картинка, Параметры, Знач Вид = "Пост") Response = "response"; Файлы = Новый Соответствие; Метод = ОпределитьМетодЗагрузкиИзображений(Вид); URL = "api.vk.com/method/"; Загрузка = URL + Метод["Загрузка"]; Сохранение = URL + Метод["Сохранение"]; Если ТипЗнч(Картинка) = Тип("Строка") Тогда КлючКартинка = СтрЗаменить(Картинка, ".", "___"); ЗначениеКартинка = Новый ДвоичныеДанные(Картинка); Иначе //@skip-check missing-temporary-file-deletion // BSLLS:MissingTemporaryFileDeletion-off КлючКартинка = СтрЗаменить(ПолучитьИмяВременногоФайла("jpeg"), ".", "___"); ЗначениеКартинка = Картинка; КонецЕсли; Файлы.Вставить(КлючКартинка, ЗначениеКартинка); Ответ = OPI_Инструменты.Get(Загрузка, Параметры); URL = Ответ[Response]["upload_url"]; Параметры.Вставить("upload_url", URL); Ответ = OPI_Инструменты.PostMultipart(URL, Параметры, Файлы); ЗаполнитьПараметрыЗагрузкиФото(Метод, Ответ, Параметры); Ответ = OPI_Инструменты.Get(Сохранение, Параметры); Возврат Ответ; КонецФункции Функция ОпределитьМетодЗагрузкиИзображений(Знач Вид) СоответствиеМетодов = Новый Соответствие; Загрузка = "Загрузка"; Сохранение = "Сохранение"; Способ = "Способ"; Фото = "Фото"; Если Вид = "Пост" Тогда СоответствиеМетодов.Вставить(Загрузка , "photos.getWallUploadServer"); СоответствиеМетодов.Вставить(Сохранение, "photos.saveWallPhoto"); СоответствиеМетодов.Вставить(Фото , "photo"); СоответствиеМетодов.Вставить(Способ , 1); ИначеЕсли Вид = "Товар" Тогда СоответствиеМетодов.Вставить(Загрузка , "market.getProductPhotoUploadServer"); СоответствиеМетодов.Вставить(Сохранение, "market.saveProductPhoto"); СоответствиеМетодов.Вставить(Способ , 2); ИначеЕсли Вид = "История" Тогда СоответствиеМетодов.Вставить(Загрузка , "stories.getPhotoUploadServer"); СоответствиеМетодов.Вставить(Сохранение, "stories.save"); СоответствиеМетодов.Вставить(Способ , 3); Иначе СоответствиеМетодов.Вставить(Загрузка , "photos.getUploadServer"); СоответствиеМетодов.Вставить(Сохранение, "photos.save"); СоответствиеМетодов.Вставить(Фото , "photos_list"); СоответствиеМетодов.Вставить(Способ , 1); КонецЕсли; Возврат СоответствиеМетодов; КонецФункции Функция ПолучитьСоответствиеПараметровТовара() Поля = Новый Соответствие(); Поля.Вставить("Имя" , "name"); Поля.Вставить("Описание" , "description"); Поля.Вставить("Категория" , "category_id"); Поля.Вставить("Цена" , "price"); Поля.Вставить("СтараяЦена" , "old_price"); Поля.Вставить("URL" , "url"); Поля.Вставить("ГлавныйВГруппе" , "is_main_variant"); Поля.Вставить("Ширина" , "dimension_width"); Поля.Вставить("Высота" , "dimension_height"); Поля.Вставить("Глубина" , "dimension_length"); Поля.Вставить("Вес" , "weight"); Поля.Вставить("SKU" , "sku"); Поля.Вставить("ДоступныйОстаток" , "stock_amount"); Возврат Поля; КонецФункции Функция УправлениеТоваром(Знач ОписаниеТовара, Знач ИДТовара = "", Знач Подборка = "", Знач Параметры = "") Параметры_ = ПолучитьСтандартныеПараметры(Параметры); Параметры_.Вставить("v", "5.199"); Response = "response"; Подборка = OPI_Инструменты.ЧислоВСтроку(Подборка); ЗаполнитьПоляЗапросаТовара(ОписаниеТовара, Параметры_); Если ЗначениеЗаполнено(ИДТовара) Тогда Параметры_.Вставить("item_id", OPI_Инструменты.ЧислоВСтроку(ИДТовара)); Метод = "edit"; Иначе Метод = "add"; КонецЕсли; Ответ = OPI_Инструменты.Get("api.vk.com/method/market." + Метод, Параметры_); Если Не ЗначениеЗаполнено(ИДТовара) Тогда ИДТовара = Ответ[Response]["market_item_id"]; ИДТовара = OPI_Инструменты.ЧислоВСтроку(ИДТовара); КонецЕсли; Если ЗначениеЗаполнено(Подборка) Тогда ДобавитьТоварВПодборку(ИДТовара, Подборка, Параметры_); КонецЕсли; Возврат Ответ; КонецФункции //@skip-check method-too-many-params Функция УправлениеПодборкой(Знач Название , Знач Картинка = "" , Знач ИДПодборки = "" , Знач Основная = Ложь , Знач Скрытая = Ложь , Знач Параметры = "") Параметры_ = ПолучитьСтандартныеПараметры(Параметры); PhotoID = "photo_id"; Response = "response"; Если ЗначениеЗаполнено(Картинка) Тогда Ответ = ЗагрузитьФотоНаСервер(Картинка, Параметры_, "Товар"); ИДФото = Ответ[Response][PhotoID]; ИДФото = OPI_Инструменты.ЧислоВСтроку(ИДФото); Параметры_.Вставить(PhotoID, ИДФото); Иначе Если ЗначениеЗаполнено(ИДПодборки) Тогда Подборки = ПолучитьПодборкиПоИД(ИДПодборки, Параметры_); Подборки = Подборки[Response]["items"]; Если Не Подборки.Количество() = 0 Тогда ИДФото = Подборки[0]["photo"]["id"]; ИДФото = OPI_Инструменты.ЧислоВСтроку(ИДФото); Параметры_.Вставить(PhotoID, ИДФото); КонецЕсли; КонецЕсли; КонецЕсли; Параметры_.Вставить("title" , Название); Параметры_.Вставить("main_album" , ?(Основная, 1, 0)); Параметры_.Вставить("is_hidden" , ?(Скрытая, 1, 0)); Если ЗначениеЗаполнено(ИДПодборки) Тогда Параметры_.Вставить("album_id", OPI_Инструменты.ЧислоВСтроку(ИДПодборки)); Метод = "editAlbum"; Иначе Метод = "addAlbum"; КонецЕсли; Ответ = OPI_Инструменты.Get("api.vk.com/method/market." + Метод, Параметры_); Возврат Ответ; КонецФункции Процедура ЗаполнитьПараметрыЗагрузкиФото(Знач Метод, Знач Ответ, Параметры) Response = "response"; Способ = Метод["Способ"]; СтандартныйСпособ = 1; НовыйСпособ = 2; Если Способ = СтандартныйСпособ Тогда Hash = "hash"; Serv = "server"; Aid = "aid"; Фото = Метод["Фото"]; СерверФото = OPI_Инструменты.ЧислоВСтроку(Ответ[Serv]); Параметры.Вставить(Hash , Ответ[Hash]); Параметры.Вставить(Фото , Ответ[Фото]); Параметры.Вставить(Serv , СерверФото); Идентификатор = Ответ.Получить(Aid); Идентификатор = OPI_Инструменты.ЧислоВСтроку(Идентификатор); Если ЗначениеЗаполнено(Идентификатор) Тогда Параметры.Вставить(Aid , Идентификатор); КонецЕсли; ИначеЕсли Способ = НовыйСпособ Тогда ОтветСтрокой = OPI_Инструменты.JSONСтрокой(Ответ); Параметры.Вставить("upload_response", ОтветСтрокой); Иначе Параметры.Вставить("upload_results", Ответ[Response]["upload_result"]); КонецЕсли; КонецПроцедуры Процедура ЗаполнитьПоляЗапросаТовара(Знач ОписаниеТовара, Параметры) Response = "response"; ОсновноеФото = ОписаниеТовара["ОсновноеФото"]; ДопФото = ОписаниеТовара["ДополнительныеФото"]; Свойства = ОписаниеТовара["ЗначенияСвойств"]; Если ЗначениеЗаполнено(ОсновноеФото) Тогда Ответ = ЗагрузитьФотоНаСервер(ОсновноеФото, Параметры, "Товар"); ИДФото = Ответ[Response]["photo_id"]; ИДФото = OPI_Инструменты.ЧислоВСтроку(ИДФото); Параметры.Вставить("main_photo_id", ИДФото); КонецЕсли; Если ТипЗнч(Свойства) = Тип("Массив") Тогда Свойства_ = Новый Массив; Для Каждого Свойство Из Свойства Цикл Свойства_.Добавить(OPI_Инструменты.ЧислоВСтроку(Свойство)); КонецЦикла; Свойства = СтрСоединить(Свойства_, ","); КонецЕсли; Если ЗначениеЗаполнено(Свойства) Тогда Параметры.Вставить("variant_ids", OPI_Инструменты.ЧислоВСтроку(Свойства)); КонецЕсли; ДобавитьДополнительныеФотоТовара(ДопФото, Параметры); Для Каждого Поле Из ПолучитьСоответствиеПараметровТовара() Цикл Значение = ОписаниеТовара[Поле.Ключ]; Если Значение <> Неопределено Тогда Параметры.Вставить(Поле.Значение, ОписаниеТовара[Поле.Ключ]); КонецЕсли; КонецЦикла; КонецПроцедуры Процедура ДобавитьДополнительныеФотоТовара(Знач МассивФото, Параметры) Если ТипЗнч(МассивФото) = Тип("Массив") Тогда Если МассивФото.Количество() > 0 Тогда СтрокаФотографий = ""; Response = "response"; Для Каждого Фото Из МассивФото Цикл Ответ = ЗагрузитьФотоНаСервер(Фото, Параметры, "Товар"); ИДФото = Ответ[Response]["photo_id"]; ИДФото = OPI_Инструменты.ЧислоВСтроку(ИДФото); СтрокаФотографий = СтрокаФотографий + ИДФото + ","; КонецЦикла; СтрокаФотографий = Лев(СтрокаФотографий, СтрДлина(СтрокаФотографий) - 1); Параметры.Вставить("photo_ids", СтрокаФотографий); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ПолучитьСписокТоваровРекурсивно(МассивТоваров, Параметры, Сдвиг = 0) Response = "response"; МаксимумВЗапросе = 200; Ответ = OPI_Инструменты.Get("api.vk.com/method/market.get", Параметры); Товары = Ответ[Response]["items"]; Если Товары.Количество() = 0 Тогда Возврат; КонецЕсли; Для Каждого Товар Из Товары Цикл МассивТоваров.Добавить(Товар); КонецЦикла; Сдвиг = Сдвиг + МаксимумВЗапросе; Параметры.Вставить("offset", Сдвиг); ПолучитьСписокТоваровРекурсивно(МассивТоваров, Параметры, Сдвиг); КонецПроцедуры Процедура ПолучитьСписокАльбомовРекурсивно(МассивАльбомов, Параметры, Сдвиг = 0) Response = "response"; МаксимумВЗапросе = 100; Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getAlbums", Параметры); Альбомы = Ответ[Response]["items"]; Если Альбомы.Количество() = 0 Тогда Возврат; КонецЕсли; Для Каждого Альбом Из Альбомы Цикл МассивАльбомов.Добавить(Альбом); КонецЦикла; Сдвиг = Сдвиг + МаксимумВЗапросе; Параметры.Вставить("offset", Сдвиг); ПолучитьСписокАльбомовРекурсивно(МассивАльбомов, Параметры, Сдвиг); КонецПроцедуры Процедура ПолучитьСписокЗаказовРекурсивно(МассивЗаказов, Параметры, Сдвиг = 0) Response = "response"; МаксимумВЗапросе = 50; Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getGroupOrders", Параметры); Заказы = Ответ[Response]["items"]; Если Заказы.Количество() = 0 Тогда Возврат; КонецЕсли; Для Каждого Заказ Из Заказы Цикл МассивЗаказов.Добавить(Заказ); КонецЦикла; Сдвиг = Сдвиг + МаксимумВЗапросе; Параметры.Вставить("offset", Сдвиг); ПолучитьСписокЗаказовРекурсивно(МассивЗаказов, Параметры, Сдвиг); КонецПроцедуры #КонецОбласти