|
Wildberries - изменение цены | ☑ | ||
---|---|---|---|---|
0
lamme
27.01.24
✎
18:40
|
Приветствую.
сам по себе апи метод описан тут https://openapi.wb.ru/prices/api/ru/#tag/Ceny/paths/~1public~1api~1v1~1info/get Вроде не сложно. Но все методы до этого делал - GET тут -POST ОДним словом - приходит всегда пока 400 ошибка: {"errors":["incorrect data"]} |
|||
1
lamme
27.01.24
✎
18:41
|
Сам по себе запрос делаю так
Ключ =ВБ_Ключ(); ПолныйАдресРесурса = "https://suppliers-api.wildberries.ru/public/api/v1/prices"; СтруктураURI = СтруктураURI(ПолныйАдресРесурса); SSL = Новый ЗащищенноеСоединениеOpenSSL(); ssl4 = Новый ЗащищенноеСоединениеOpenSSL( неопределено, неопределено ); HTTPСоединение = Новый HTTPСоединение(СтруктураURI.Хост, СтруктураURI.Порт, , , , , ssl4); HTTPЗапрос = Новый HTTPЗапрос(СтруктураURI.ПутьНаСервере); HTTPЗапрос.Заголовки.Вставить("Authorization",Строка(Ключ)); HTTPЗапрос.Заголовки.Вставить("Content-type",Строка("application/json")); // Данные = Новый Структура(); МассивЦен = новый массив(); Для каждого стр из Тз_Цен цикл Данные.Вставить("nmId",стр.nmId); Данные.Вставить("price",стр.price); МассивЦен.Добавить(Данные); конеццикла; ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, МассивЦен); ТелоЗапроса = ЗаписьJSON.Закрыть(); HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса); Попытка Ответ = HTTPСоединение.ВызватьHTTPМетод("POST",HTTPЗапрос); Исключение Сообщить("Произошла сетевая ошибка!" + ОписаниеОшибки()); ВызватьИсключение; КонецПопытки; Если Ответ.КодСостояния=200 тогда //Сообщить (Ответ.ПолучитьТелоКакСтроку()); ЗначениеОтвета = Ответ.ПолучитьТелоКакСтроку(); ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(ЗначениеОтвета); Данные = ПрочитатьJSON(ЧтениеJSON); иначе Сообщить ("ошибка"); Данные = неопределено; Сообщить (Ответ.ПолучитьТелоКакСтроку()); конецесли; |
|||
2
lamme
27.01.24
✎
18:41
|
тело запроса имеет вид - как по учебнику.
те как в апи написано [ { "nmId": 183643644, "price": 11000 } ] че ему не хватает? |
|||
3
lamme
27.01.24
✎
18:46
|
СтруктураURI.Хост = suppliers-api.wildberries.ru
труктураURI.ПутьНаСервере = public/api/v1/prices |
|||
4
timurhv
27.01.24
✎
20:43
|
Попробуйте через (хотя по коду ошибки что-то с JSON не так):
HTTPСоединение (HTTPConnection) ОтправитьДляОбработки (Post) Синтаксис: ОтправитьДляОбработки(<HTTPЗапрос>, <ИмяВыходногоФайла>) Параметры: <HTTPЗапрос> (обязательный) Тип: HTTPЗапрос. HTTP-запрос. <ИмяВыходногоФайла> (необязательный) Тип: Строка. Имя выходного файла, в который записываются полученные с сервера данные. Если не указан или содержит пустую строку, то тело ответа может быть получено из объекта HTTPОтвет. Возвращаемое значение: Тип: HTTPОтвет. Описание: Отправляет данные на указанный адрес для обработки при помощи HTTP-запроса POST. |
|||
5
BrainDamage
28.01.24
✎
02:25
|
(2) Возможно вы неправильно пишете тело запроса.
[- это начало массива объектов {} В json все описания объектов начинается с { |
|||
6
BrainDamage
28.01.24
✎
02:39
|
А да, еще была проблема с разделителем разрядов в цене.
Типа 1500 и 1 500 Это тоже надо проверить. |
|||
7
Смотрящий
28.01.24
✎
08:14
|
(0) Данные = Новый Структура(); унутр цикла запихни
Где в структуре дисконт и промокод ? (6) +1 |
|||
8
Смотрящий
28.01.24
✎
08:16
|
Не увидел про дисконт и промокод
|
|||
9
lamme
28.01.24
✎
10:56
|
(4)
да. пробовал. аналогичный ответ |
|||
10
lamme
28.01.24
✎
10:57
|
(5)
вот у них пример [ { "nmId": 1234567, "price": 1000 } ] ------- вот у меня [ { "nmId": 183643644, "price": 11000 } ] |
|||
11
lamme
28.01.24
✎
10:57
|
(6)
да - стандартные грабли от 1С. это корректно |
|||
12
lamme
28.01.24
✎
10:58
|
(7)
в описании протокола нет дисконт и промокод скидка - меняется другим запросом у них же в этом запрсое меняются только цены Array nmId integer Номенклатура price number Цена (указывать без копеек) |
|||
13
lamme
28.01.24
✎
11:05
|
(7)
Данные = Новый Структура(); унутр цикла запихни Тут согласен пока отправлял 1 значение - было не заметно. но общая проблема осталась |
|||
14
lamme
28.01.24
✎
11:07
|
(7)
Где в структуре дисконт и промокод ? запрос идет - на изменить цену а не - получить цены. в методу - получить цены - там как раз есть скидка и промокод |
|||
15
timurhv
28.01.24
✎
11:32
|
(14) У вас в (0) ссылка на GET запрос, а не POST. Поэтому путаница.
183643644 и токен - от продуктивного контура? Предположу, что товар не принадлежит данному токену. 400 ошибки (но с подробным описанием) могут возникать еще если цена повышается более 30% за неделю, а также если карточка создана недавно и вы меняете цены. |
|||
16
lamme
28.01.24
✎
13:14
|
(15)
да. извиняюсь не та ссылка вот ссылка на апи ВБ - на изменение цены https://openapi.wb.ru/prices/api/ru/#tag/Ceny/paths/~1public~1api~1v1~1prices/post |
|||
17
lamme
28.01.24
✎
13:14
|
183643644 и токен - от продуктивного контура?
тут да. |
|||
18
lamme
28.01.24
✎
13:15
|
(15)
400 ошибки (но с подробным описанием) могут возникать еще если цена повышается более 30% за неделю, а также если карточка создана недавно и вы меняете цены. а тут сюрприз ... чего они так сделали то по уеб.ски могли бы отчет расшифровывать более подробно |
|||
19
lamme
28.01.24
✎
13:20
|
15
тут может быть вероятность в самом токене того что у него - нет прав на редактирование цены Предположу, что товар не принадлежит данному токену. |
|||
20
timurhv
28.01.24
✎
13:47
|
(18) >могли бы отчет расшифровывать более подробно
Расшифровки есть (судя по гуглу в интернете), но всякое может быть |
|||
21
lamme
28.01.24
✎
15:31
|
смущает то
что 400 ошибка по протоколу имеет соверщенно иной вид. тут же - всяко проблема именно в самих данных но в чем именно - не понятно и в каком месте - не понятно потому что ответ приходит - нет данных. те сами данные - надо как-то упаковать-в какой то префикс-суфиикс добавить.. да хз |
|||
22
lamme
28.01.24
✎
15:37
|
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);
во .. теперь начало выдавать ошибку- как в апи. {"errors":["No goods for process"],"error_code":1} те и текст и код ошибки |
|||
23
lamme
28.01.24
✎
15:47
|
такое ощущение - что проходит все
а прав нет |
|||
24
Ненавижу 1С
29.01.24
✎
08:13
|
вот тут:
Данные = Новый Структура(); МассивЦен = новый массив(); Для каждого стр из Тз_Цен цикл Данные.Вставить("nmId",стр.nmId); Данные.Вставить("price",стр.price); МассивЦен.Добавить(Данные); конеццикла; Вы вставляете одну и ту же структуру несколько раз. Создавайте структуру внутри цикла |
|||
25
lamme
29.01.24
✎
20:51
|
(24)
да - я это увидел в (7) сказали в (13) поправил |
|||
26
lamme
29.01.24
✎
21:00
|
одним словом ... вышестоящий код - рабочий ..
что сделано 1. добавили в ЛК прав на редактирование цен (хз где это) и создали новый токе 2. ВНИМАТЕЛЬНО прочитал - что значит 400 ошибка .. application/json Example NoGoodsForProcess NoGoodsForProcess Все передаваемые цены/скидки уже установлены Copy Expand allCollapse all { "error": [ "No goods for process" ], "error_code": 1 } те ключевая фраза: Все передаваемые цены/скидки уже установлены Схватился за голову. поменял цену с 99 000 на 90 000 - и все заработало. сервер вернул код 200 - те все пучком |
|||
27
lamme
29.01.24
✎
21:04
|
и там методом научного тыка
вот так работает HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса,КодировкаТекста.Системная,ИспользованиеByteOrderMark.Авто); |
|||
28
BrainDamage
29.01.24
✎
23:47
|
(24) Лучше вообще все сразу в Соответствие пихать)
Бывает такое, что когда нужно передать свойство объекта через точечку, в качестве ключа, 1с-ый метод, который запиливает уже структуру в JSON приводит к крашу. Типа; { "Цены": {"Цена.Акция": 25} // ну или "25" в зависимости от того какой тип значения определил разработчик API) .... То есть если в структуру передавать в качестве ключа "Цена.Акция" то система вывалится с ошибкой, если это будет соответствие, то пропустит) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |