From 5e04a5f9ecbe88c616bcb4ddabe3fd3f7e415e4b Mon Sep 17 00:00:00 2001 From: Anton Date: Thu, 15 Feb 2024 18:45:28 +0300 Subject: [PATCH] =?UTF-8?q?VK:=20=D1=82=D0=BE=D0=B2=D0=B0=D1=80=D1=8B,=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D0=B1=D0=BE=D1=80=D0=BA=D0=B8,=20=D1=81?= =?UTF-8?q?=D0=B2=D0=BE=D0=B9=D1=81=D1=82=D0=B2=D0=B0=20=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OPI/src/CommonModules/OPI_VK/Module.bsl | 186 +++++++++++++++++++-- OPI/src/CommonModules/YAX_Тесты/Module.bsl | 119 ++++++++++++- 2 files changed, 288 insertions(+), 17 deletions(-) diff --git a/OPI/src/CommonModules/OPI_VK/Module.bsl b/OPI/src/CommonModules/OPI_VK/Module.bsl index 7d3de1d461..36c3da046a 100644 --- a/OPI/src/CommonModules/OPI_VK/Module.bsl +++ b/OPI/src/CommonModules/OPI_VK/Module.bsl @@ -784,11 +784,14 @@ #Область РаботаСТоварами -Функция ДобавитьТовар(Знач ОписаниеТовара, Знач Параметры = "") Экспорт +Функция ДобавитьТовар(Знач ОписаниеТовара, Знач Подборка = "", Знач Параметры = "") Экспорт Параметры_ = ПолучитьСтандартныеПараметры(Параметры); + Параметры_.Вставить("v", "5.199"); ОсновноеФото = ОписаниеТовара["ОсновноеФото"]; + ДопФото = ОписаниеТовара["ДополнительныеФото"]; + Подборка = OPI_Инструменты.ЧислоВСтроку(Подборка); Если ЗначениеЗаполнено(ОсновноеФото) Тогда Ответ = ЗагрузитьФотоНаСервер(ОсновноеФото, Параметры_, "Товар"); @@ -796,12 +799,33 @@ ИДФото = OPI_Инструменты.ЧислоВСтроку(ИДФото); Параметры_.Вставить("main_photo_id", ИДФото); КонецЕсли; - + + ДобавитьДополнительныеФотоТовара(ДопФото, Параметры_); + Для Каждого Поле Из ПолучитьСоответствиеПараметровТовара() Цикл Параметры_.Вставить(Поле.Значение, ОписаниеТовара[Поле.Ключ]); КонецЦикла; - - Ответ = OPI_Инструменты.Get("api.vk.com/method/market.add", Параметры_); + + Ответ = OPI_Инструменты.Get("api.vk.com/method/market.add", Параметры_); + ИДТовара = Ответ["response"]["market_item_id"]; + ИДТовара = OPI_Инструменты.ЧислоВСтроку(ИДТовара); + + Если ЗначениеЗаполнено(Подборка) Тогда + ОтветПодборки = ДобавитьТоварВПодборку(ИДТовара, Подборка, Параметры_); + КонецЕсли; + + Возврат Ответ; + +КонецФункции + +Функция УдалитьТовар(Знач Товар, Знач Параметры = "") Экспорт + + Товар = OPI_Инструменты.ЧислоВСтроку(Товар); + + Параметры_ = ПолучитьСтандартныеПараметры(Параметры); + Параметры_.Вставить("item_id", Товар); + + Ответ = OPI_Инструменты.Get("api.vk.com/method/market.delete", Параметры_); Возврат Ответ; @@ -812,20 +836,21 @@ Товар = Новый Соответствие(); Товар.Вставить("Имя" , "Новый товар"); // Имя товара Товар.Вставить("Описание" , "Описание товара"); // Описание товара - Товар.Вставить("Категория" , "1210"); // См ПолучитьСписокКатегорийТоваров() + Товар.Вставить("Категория" , "20173"); // См ПолучитьСписокКатегорийТоваров() Товар.Вставить("Цена" , 1); // Цена в руб. Товар.Вставить("СтараяЦена" , Неопределено); // Для отражения изменения цены Товар.Вставить("ОсновноеФото" , Неопределено); // ДД или путь к осн. фото - Товар.Вставить("Удален" , Ложь); // Признак неактивности Товар.Вставить("URL" , Неопределено); // Ссылка на страницу магазина Товар.Вставить("ДополнительныеФото" , Новый Массив); // Массив путей или ДД для доп. фото + Товар.Вставить("ЗначенияСвойств" , Новый Массив); // Значения свойств (варианты). Максимум 2 Товар.Вставить("ГлавныйВГруппе" , Ложь); // Сделать главным в своей группе Товар.Вставить("НомерГруппы" , Неопределено); Товар.Вставить("Ширина" , Неопределено); // В миллиметрах Товар.Вставить("Высота" , Неопределено); // В миллиметрах Товар.Вставить("Глубина" , Неопределено); // В миллиметрах Товар.Вставить("Вес" , Неопределено); // В граммах - Товар.Вставить("SKU" , Неопределено); + Товар.Вставить("SKU" , Неопределено); // Артикул + Товар.Вставить("ДоступныйОстаток" , 1); Возврат Товар; @@ -853,6 +878,123 @@ #КонецОбласти +#Область РаботаСПодборками + +Функция СоздатьПодборкуТоваров(Знач Название + , Знач Картинка + , Знач Основная = Ложь + , Знач Скрытая = Ложь + , Знач Параметры = "") Экспорт + + Параметры_ = ПолучитьСтандартныеПараметры(Параметры); + Ответ = ЗагрузитьФотоНаСервер(Картинка, Параметры_, "Товар"); + ИДФото = Ответ["response"]["photo_id"]; + ИДФото = OPI_Инструменты.ЧислоВСтроку(ИДФото); + + Параметры_.Вставить("photo_id" , ИДФото); + Параметры_.Вставить("title" , Название); + Параметры_.Вставить("main_album" , ?(Основная, 1, 0)); + Параметры_.Вставить("is_hidden" , ?(Скрытая, 1, 0)); + + Ответ = OPI_Инструменты.Get("api.vk.com/method/market.addAlbum", Параметры_); + + Возврат Ответ; + +КонецФункции + +Функция ДобавитьТоварВПодборку(Знач МассивТовар, Знач Подборка, Знач Параметры = "") Экспорт + + Параметры_ = ПолучитьСтандартныеПараметры(Параметры); + Подборка = OPI_Инструменты.ЧислоВСтроку(Подборка); + МассивТовар_ = Новый Массив; + + Если Не ТипЗнч(МассивТовар) = Тип("Массив") Тогда + + Товар = МассивТовар; + МассивТовар = Новый Массив; + МассивТовар.Добавить(Товар); + + КонецЕсли; + + Для Каждого Товар Из МассивТовар Цикл + МассивТовар_.Добавить(OPI_Инструменты.ЧислоВСтроку(Товар)); + КонецЦикла; + + СписокТоваров = СтрСоединить(МассивТовар_, ","); + + Параметры_.Вставить("item_ids" , СписокТоваров); + Параметры_.Вставить("album_ids", Подборка); + + Ответ = OPI_Инструменты.Get("api.vk.com/method/market.addToAlbum", Параметры_); + + Возврат Ответ; + +КонецФункции + +Функция УдалитьПодборку(Знач Подборка, Знач Параметры = "") Экспорт + + Подборка = OPI_Инструменты.ЧислоВСтроку(Подборка); + + Параметры_ = ПолучитьСтандартныеПараметры(Параметры); + Параметры_.Вставить("album_id", Подборка); + + Ответ = OPI_Инструменты.Get("api.vk.com/method/market.deleteAlbum", Параметры_); + + Возврат Ответ; + +КонецФункции + +#КонецОбласти + +#Область РаботаСоСвойствамиТоваров + +Функция СоздатьСвойствоТовара(Знач Название, Знач Параметры = "") Экспорт + + Параметры_ = ПолучитьСтандартныеПараметры(Параметры); + Параметры_.Вставить("title", Название); + + Ответ = OPI_Инструменты.Get("api.vk.com/method/market.addProperty", Параметры_); + + Возврат Ответ; + +КонецФункции + +Функция УдалитьСвойствоТовара(Знач Свойство, Знач Параметры = "") Экспорт + + Параметры_ = ПолучитьСтандартныеПараметры(Параметры); + Параметры_.Вставить("property_id", OPI_Инструменты.ЧислоВСтроку(Свойство)); + + Ответ = OPI_Инструменты.Get("api.vk.com/method/market.deleteProperty", Параметры_); + + Возврат Ответ; + +КонецФункции + +Функция ДобавитьВариантСвойстваТовара(Знач Значение, Знач Свойство, Знач Параметры = "") Экспорт + + Параметры_ = ПолучитьСтандартныеПараметры(Параметры); + Параметры_.Вставить("property_id", OPI_Инструменты.ЧислоВСтроку(Свойство)); + Параметры_.Вставить("title" , Свойство); + + Ответ = OPI_Инструменты.Get("api.vk.com/method/market.addPropertyVariant", Параметры_); + + Возврат Ответ; + +КонецФункции + +Функция УдалитьВариантСвойстваТовара(Знач Вариант, Знач Параметры = "") Экспорт + + Параметры_ = ПолучитьСтандартныеПараметры(Параметры); + Параметры_.Вставить("variant_id", OPI_Инструменты.ЧислоВСтроку(Вариант)); + + Ответ = OPI_Инструменты.Get("api.vk.com/method/market.deletePropertyVariant", Параметры_); + + Возврат Ответ; + +КонецФункции + +#КонецОбласти + #Область Прочие // Сформировать клавиатуру. @@ -1004,8 +1146,7 @@ Поля.Вставить("Описание" , "description"); Поля.Вставить("Категория" , "category_id"); Поля.Вставить("Цена" , "price"); - Поля.Вставить("СтараяЦена" , "old_price"); - Поля.Вставить("Удален" , "deleted"); + Поля.Вставить("СтараяЦена" , "old_price"); Поля.Вставить("URL" , "url"); Поля.Вставить("ГлавныйВГруппе" , "is_main_variant"); Поля.Вставить("НомерГруппы" , "variant_ids"); @@ -1013,7 +1154,9 @@ Поля.Вставить("Высота" , "dimension_height"); Поля.Вставить("Глубина" , "dimension_length"); Поля.Вставить("Вес" , "weight"); - Поля.Вставить("SKU" , "sku"); + Поля.Вставить("SKU" , "sku"); + Поля.Вставить("ДоступныйОстаток" , "stock_amount"); + Поля.Вставить("ЗначенияСвойств" , "variant_ids"); Возврат Поля; @@ -1056,4 +1199,27 @@ КонецПроцедуры +Процедура ДобавитьДополнительныеФотоТовара(Знач МассивФото, Параметры) + + Если ТипЗнч(МассивФото) = Тип("Массив") Тогда + Если МассивФото.Количество() > 0 Тогда + + СтрокаФотографий = ""; + + Для Каждого Фото Из МассивФото Цикл + + Ответ = ЗагрузитьФотоНаСервер(Фото, Параметры, "Товар"); + ИДФото = Ответ["response"]["photo_id"]; + ИДФото = OPI_Инструменты.ЧислоВСтроку(ИДФото); + СтрокаФотографий = СтрокаФотографий + ИДФото + ","; + + КонецЦикла; + + СтрокаФотографий = Лев(СтрокаФотографий, СтрДлина(СтрокаФотографий) - 1); + Параметры.Вставить("photo_ids", СтрокаФотографий); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/OPI/src/CommonModules/YAX_Тесты/Module.bsl b/OPI/src/CommonModules/YAX_Тесты/Module.bsl index a2a3d7910c..913274b8bd 100644 --- a/OPI/src/CommonModules/YAX_Тесты/Module.bsl +++ b/OPI/src/CommonModules/YAX_Тесты/Module.bsl @@ -41,8 +41,8 @@ .ДобавитьСерверныйТест("ВК_СоздатьРекламнуюКампанию" , "Создать рекламную кампанию") .ДобавитьСерверныйТест("ВК_ОтправитьСообщение" , "Отправить сообщение") .ДобавитьСерверныйТест("ВК_ПолучитьКатегорииТоваров" , "Получить категории товаров") - .ДобавитьСерверныйТест("ВК_СоздатьТовар" , "Создать товар") - + .ДобавитьСерверныйТест("ВК_СоздатьТоварПодборку" , "Создать товар и подборку") + .ДобавитьТестовыйНабор("Яндекс.Диск") .ДобавитьСерверныйТест("ЯДиск_ПолучитьИнформациюОДиске" , "Получить информацию о диске") .ДобавитьСерверныйТест("ЯДиск_СоздатьПапку" , "Создать папку") @@ -879,22 +879,127 @@ КонецПроцедуры -Процедура ВК_СоздатьТовар() Экспорт +Процедура ВК_СоздатьТоварПодборку() Экспорт Параметры = ПолучитьПараметрыВК(); Картинка = ПолучитьДвоичные("Картинка"); - Товар = OPI_VK.ПолучитьОписаниеТовара(); - - Товар.Вставить("ОсновноеФото", Картинка); + ИВФ = ПолучитьИмяВременногоФайла("png"); + Картинка.Записать(ИВФ); - Результат = OPI_VK.ДобавитьТовар(Товар, Параметры); + Результат = OPI_VK.СоздатьПодборкуТоваров("Тестовая подборка" + , Картинка + , Истина + , Ложь + , Параметры); + + ЮТест.ОжидаетЧто(Результат) + .ИмеетТип("Соответствие") + .Свойство("response.albums_count").ИмеетТип("Число").Заполнено() + .Свойство("response.market_album_id").ИмеетТип("Число").Заполнено(); + + ИДПодборки = Результат["response"]["market_album_id"]; + + МассивКартинок = Новый Массив; + МассивКартинок.Добавить(ИВФ); + МассивКартинок.Добавить(Картинка); + + Товар = Новый Соответствие(); + Товар.Вставить("Имя" , "Тестовый товар 2"); + Товар.Вставить("Описание" , "Описание товара"); + Товар.Вставить("Категория" , "20173"); + Товар.Вставить("Цена" , 1); + Товар.Вставить("СтараяЦена" , 15); + Товар.Вставить("ОсновноеФото" , Картинка); + Товар.Вставить("URL" , "https://github.com/Bayselonarrend/OpenIntegrations"); + Товар.Вставить("ДополнительныеФото" , МассивКартинок); + Товар.Вставить("ГлавныйВГруппе" , Истина); + Товар.Вставить("НомерГруппы" , Неопределено); + Товар.Вставить("Ширина" , 20); + Товар.Вставить("Высота" , 30); + Товар.Вставить("Глубина" , 40); + Товар.Вставить("Вес" , 100); + Товар.Вставить("SKU" , 12345); + Товар.Вставить("ДоступныйОстаток" , "10"); + + Результат = OPI_VK.ДобавитьТовар(Товар, ИДПодборки, Параметры); // Добавление товара ЮТест.ОжидаетЧто(Результат) .ИмеетТип("Соответствие") .Свойство("response.market_item_id").ИмеетТип("Число").Заполнено(); + + ИДТовара = Результат["response"]["market_item_id"]; + + Результат = OPI_VK.ДобавитьТоварВПодборку(ИДТовара, ИДПодборки, Параметры); // Добавление в подборку + + ЮТест.ОжидаетЧто(Результат) + .ИмеетТип("Соответствие") + .Свойство("response").ИмеетТип("Число").Заполнено(); + + Результат = OPI_VK.УдалитьТовар(ИДТовара, Параметры); // Удаление товара + + ЮТест.ОжидаетЧто(Результат) + .ИмеетТип("Соответствие") + .Свойство("response").ИмеетТип("Число").Равно(1); + + Результат = OPI_VK.УдалитьПодборку(ИДПодборки, Параметры); // Уадление подборки + + ЮТест.ОжидаетЧто(Результат) + .ИмеетТип("Соответствие") + .Свойство("response").ИмеетТип("Число").Равно(1); КонецПроцедуры +Процедура ВК_СоздатьТоварСоСвойствами() Экспорт + + Параметры = ПолучитьПараметрыВК(); + Картинка = ПолучитьДвоичные("Картинка"); + ИВФ = ПолучитьИмяВременногоФайла("png"); + Картинка.Записать(ИВФ); + + МассивВариантов = Новый Массив; + МассивВариантов.Добавить("Желтый"); + МассивВариантов.Добавить("Синий"); + МассивВариантов.Добавить("Красный"); + + Результат = OPI_VK.СоздатьСвойствоТовара("Цвет", Параметры); + + Для Каждого Вариант Из МассивВариантов Цикл + + + КонецЦикла; + + МассивКартинок = Новый Массив; + МассивКартинок.Добавить(ИВФ); + МассивКартинок.Добавить(Картинка); + + Товар = Новый Соответствие(); + Товар.Вставить("Имя" , "Тестовый товар 2"); + Товар.Вставить("Описание" , "Описание товара"); + Товар.Вставить("Категория" , "20173"); + Товар.Вставить("Цена" , 1); + Товар.Вставить("СтараяЦена" , 15); + Товар.Вставить("ОсновноеФото" , Картинка); + Товар.Вставить("URL" , "https://github.com/Bayselonarrend/OpenIntegrations"); + Товар.Вставить("ДополнительныеФото" , МассивКартинок); + Товар.Вставить("ГлавныйВГруппе" , Истина); + Товар.Вставить("НомерГруппы" , Неопределено); + Товар.Вставить("Ширина" , 20); + Товар.Вставить("Высота" , 30); + Товар.Вставить("Глубина" , 40); + Товар.Вставить("Вес" , 100); + Товар.Вставить("SKU" , 12345); + Товар.Вставить("ДоступныйОстаток" , "10"); + + Результат = OPI_VK.ДобавитьТовар(Товар, , Параметры); // Добавление товара + + ЮТест.ОжидаетЧто(Результат) + .ИмеетТип("Соответствие") + .Свойство("response.market_item_id").ИмеетТип("Число").Заполнено(); + + ИДТовара = Результат["response"]["market_item_id"]; + OPI_VK.УдалитьТовар(ИДТовара, Параметры); // Удаление товара + +Конецпроцедуры #КонецОбласти #Область YandexDisk