Имя: Пароль:
1C
1С v8
АПИ Яндекс Маркет
0 geminisf
 
04.09.23
10:11
Доброго всем дня!

Пытаюсь получить по АПИ список товаров из определенного магазина во такой процедурой


    КлиентID = "656............................";
    Токен = "y0_..................................................";
    СтрокаИД = СтрЗаменить(IDТекущегоМагазинаЯндекс, Символы.НПП, "");
    СтрокаURL = "https://api.partner.market.yandex.ru/campaigns/" + СтрокаИД + "/offers";
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Authorization", "OAuth oauth_token="""+СокрЛП(Токен)+""", oauth_client_id="""+СокрЛП(КлиентID)+"""");
    
    СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(СтрокаURL);
    SSL_Соединение=Новый ЗащищенноеСоединениеOpenSSL();
    HTTPСоединение = Новый HTTPСоединение(СтруктураURI.Хост,443,,,,,SSL_Соединение);
    
    HTTPRequest = Новый HTTPЗапрос(СтруктураURI.ПутьНаСервере,Заголовки);

    ЗаписьJSON=Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписьJSON.ЗаписатьНачалоОбъекта();
    ЗаписьJSON.ЗаписатьИмяСвойства("statuses");
    ЗаписьJSON.ЗаписатьЗначение("PUBLISHED");            
    ЗаписьJSON.ЗаписатьКонецОбъекта();    
    Результат=ЗаписьJSON.Закрыть();
    
    HTTPRequest.УстановитьТелоИзСтроки(Результат,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);    

    HttpОтвет=HTTPСоединение.ВызватьHTTPМетод("POST",HTTPRequest);

    Если HttpОтвет.КодСостояния = 200 Тогда
        Поток=HttpОтвет.ПолучитьТелоКакПоток();
        ЧтениеJSON=Новый ЧтениеJSON;
        ЧтениеJSON.ОткрытьПоток(Поток);
        Соответствие=ПрочитатьJSON(ЧтениеJSON);
        ЧтениеJSON.Закрыть();

    Иначе    
        
    КонецЕсли;
    Поток=Неопределено;
    HTTPRequest=Неопределено;



Возвращается код состояния 400. Если вместо этого

HttpОтвет=HTTPСоединение.ВызватьHTTPМетод("POST",HTTPRequest);


Написать

HttpОтвет=HTTPСоединение.Получить(HTTPRequest);


Возвращается код ответа 200, но массив товаров пустой. Может кто-то подскажет в чем ошибка.
1 dergreche
 
04.09.23
10:47
при ошибке 400 в теле ответа что возвращается?
2 geminisf
 
04.09.23
10:53
(1) "bad request"
3 dergreche
 
04.09.23
11:24
лучше прикладывать curl твоего запроса
сравни свой с моим
curl --location 'https://api.partner.market.yandex.ru/campaigns/0000000/offers?limit=20' \
--header 'Authorization: OAuth oauth_token="AQ.........", oauth_client_id="7f................."' \
--header 'Content-Type: application/json' \
--data '{
    "statuses": ["PUBLISHED"
    ]
}'
4 ttk
 
04.09.23
12:03
(0)
1. Это должен быть пост запрос
2. В справке к апи яндекса statuses - это массив, а у тебя - нет:
ЗаписьJSON.ЗаписатьИмяСвойства("statuses");
ЗаписьJSON.ЗаписатьЗначение("PUBLISHED");  
3. У них там на сайте можно через консоль запросы отправлять, сразу все видно будет

https://yandex.ru/dev/market/partner-api/doc/ru/reference/assortment/getCampaignOffers
5 geminisf
 
04.09.23
12:15
(3) (4) Спасибо. Конечно же массив. Теперь всё получилось.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший