Имя: Пароль:
1C
1С v8
Тело для запроса PUT
0 location
 
naïve
22.03.22
15:58
Подскажите пож-та, как правильно написать тело для запроса. по этому примеру.

curl -X PUT \
  https://api.allegro.pl/sale/offer-quantity-change-commands/{commandId} \
  -H 'Authorization: Bearer {token}' \
  -H 'Content-Type: application/vnd.allegro.public.v1+json' \
  -H 'Accept: application/vnd.allegro.public.v1+json' \
  -d '{
    "modification":{
        "changeType":"FIXED",           -- supported values: “FIXED” (quantity),
                                        “GAIN” (add/remove items. To remove items,
                                        provide the value with a minus sign)
        "value":30                      -- value to be changed to (FIXED)
                                        or by which you want to change the quantity (GAIN)      
            },
    "offerCriteria":[
    {
        "type":"CONTAINS_OFFERS",
        "offers":[                      -- a list of offers you want to edit
        {
        "id":"7660573029"
        },
        {
        "id":"7644576839"
        }
        ]
    }
    ]
  }'

т.е. пишу следующее
    HTTPСоединение = новый HTTPСоединение("api.allegro.pl", , , ,, , Новый ЗащищенноеСоединениеOpenSSL);
    headers = Новый Соответствие;
        UID = Новый УникальныйИдентификатор();
    headers.Вставить("Content-Type", "application/vnd.allegro.public.v1+json");
    headers.Вставить("Authorization", "Bearer " + ПолучитьДанныеТокена());
    headers.Вставить("Accept", "application/vnd.allegro.public.v1+json");
    HTTPЗапрос = Новый HTTPЗапрос("sale/offer-quantity-change-commands/+UID", headers);

получается то что в -d надо как то прописать?
sale/offer-quantity-change-commands/+UID+?modification и дальше не знаю (
Подскажите плз.
1 Кир Пластелинин
 
22.03.22
16:35
могу предположить, что в теле запроса необходимо передавать json заданной структуры и со своими значениями
2 location
 
naïve
22.03.22
16:52
а можно пример передачи json?
3 Кир Пластелинин
 
22.03.22
17:01
ну например вот (вырвано из контекста).


SMSСообщение_JSON = Новый Структура;
    
SMSСообщение_JSON.Вставить("from"   , SMSСообщение["Отправитель"]);
SMSСообщение_JSON.Вставить("to"        , НомерТелефона);
SMSСообщение_JSON.Вставить("message", SMSСообщение["ТекстСообщения"]);
    
ЗаписьJSON = Новый ЗаписьJSON;
    
ЗаписьJSON.УстановитьСтроку();
    
ЗаписатьJSON(ЗаписьJSON, SMSСообщение_JSON);            
        
ТелоЗапроса = ЗаписьJSON.Закрыть();

HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);



только для http-соединения надо будет использовать Записать (Put). ну и кодировка другой скорей всего будет
4 arsik
 
гуру
22.03.22
17:11
(0) Смотри ВызватьHTTPМетод
5 location
 
naïve
23.03.22
16:16
вот пример еще одного изменения
curl -X PATCH
  ‘https://api.allegro.pl/sale/product-offers/9531382307’
  -H 'Authorization: Bearer {token}'
  -H 'Accept: application/vnd.allegro.public.v1+json'
  -H 'Content-Type: application/vnd.allegro.public.v1+json'
  -d ’{
  "sellingMode": {
     "price": {
       "amount": "50",
       "currency": "PLN"
    }
  }    
  }’
Когда вы получите статус 200 OK - мы вернем данные предложения с запрошенными изменениями.

вот например мне надо изменить количество
"stock": {
"available": 0,
"unit": "string"
},
когда получаю данные по товару выглядит вот так
"stock": {
"available": 23,
"unit": "UNIT"
},
я отправляю такой запрос, получаю 200 но данные не меняются.
    HTTPСоединение = новый HTTPСоединение("api.allegro.pl", , , ,, , Новый ЗащищенноеСоединениеOpenSSL);
    headers = Новый Соответствие;
    headers.Вставить("Content-Type", "application/vnd.allegro.public.v1+json");
    headers.Вставить("Authorization", "Bearer " + access_token);
    headers.Вставить("Accept", "application/vnd.allegro.public.v1+json");
    HTTPЗапрос = Новый HTTPЗапрос("sale/product-offers/"+id+"", headers);
    
    Сообщение_JSON = Новый Структура;
    Сообщение_JSON.Вставить("stock", новый Структура());
    Сообщение_JSON.Вставить("available", "35");
    Сообщение_JSON.Вставить("unit", "unit");
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, Сообщение_JSON);            
    ТелоЗапроса = ЗаписьJSON.Закрыть();
    HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    HTTPОтвет = HTTPСоединение.Изменить(HTTPЗапрос);
    Если HTTPОтвет.КодСостояния = 200 Тогда
        Ответ = HTTPОтвет.ПолучитьТелоКакСтроку();
    КонецЕсли;
6 Kassern
 
23.03.22
16:18
(5) Не работает, или что?
7 location
 
naïve
23.03.22
16:21
ну данные остаются старые я ему передаю 35, а в ответе приходит информация по товару 23 количество
8 Kassern
 
23.03.22
16:23
(7) пробовали использовать Ответ=ВызватьHTTPМетод("PUT",HTTPЗапрос) ?
9 Kassern
 
23.03.22
16:23
*конечно HTTPСоединение.ВызватьHTTPМетод("PUT",HTTPЗапрос)
10 Kassern
 
23.03.22
16:27
у вас есть документация API с доступными методами? Может там надо иначе тело запроса передавать. На самом сервисе проверяли обновление остатков?
11 location
 
naïve
23.03.22
16:27
так HTTPСоединение.Изменить(HTTPЗапрос) - это же то что просят (curl -X PATCH). Изменяет данные на сервере при помощи PATCH-запроса.
12 Kassern
 
23.03.22
16:28
(11) возможно и так, но имхо, лучше явно написать нужный http метод
13 location
 
naïve
23.03.22
16:29
(10) да выше написал что написано в документации.
вот еще
Как отредактировать предложение
Благодаря PATCH /sale/product-offers/{offerId} вы можете легко редактировать свое предложение - вы можете изменить любое поле предложения, и при этом вам не нужно передавать всю его модель.
14 location
 
naïve
23.03.22
16:29
и пример как это сделать в (5)
15 Kassern
 
23.03.22
16:32
(14) я в (5) в упор не вижу структуру, которую вы пытаетесь отправить вот этим кодом
    Сообщение_JSON.Вставить("stock", новый Структура());
    Сообщение_JSON.Вставить("available", "35");
    Сообщение_JSON.Вставить("unit", "unit");
16 Kassern
 
23.03.22
16:32
(14) из примера в (5) я вижу лишь тело:
  "sellingMode": {

     "price": {

       "amount": "50",

       "currency": "PLN"

    }
17 Kassern
 
23.03.22
16:33
в общем, скиньте, что у вас получается в "ТелоЗапроса " перед отправкой и покажите такую-же структуру в документации к этому API
18 location
 
naïve
23.03.22
16:58
(16) хорошо вот как это описать в теле для 1с?
19 location
 
naïve
23.03.22
17:28
(17) вот что получается в теле запроса
{
"stock": {},
"available": "35",
"unit": "unit"
}
20 Ёпрст
 
23.03.22
17:28
(18) ты передаешь хрень:

{
"stock": {},
"available": "35",
"unit": "unit"
}
21 Ёпрст
 
23.03.22
17:30
(19)
     Сообщение_JSON = Новый Структура;
    Сообщение_JSON.Вставить("stock", новый Структура("available,unit",35,"unit"));
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, Сообщение_JSON);            
    ТелоЗапроса = ЗаписьJSON.Закрыть();
22 Kassern
 
23.03.22
17:34
(19) а теперь сравните с:
"stock": {
"available": 23,
"unit": "UNIT"
}
Думал сами заметите пустую структуру в stock, которую вы никак не заполняете, но вам уже подсказали в (20)
23 location
 
naïve
23.03.22
17:37
(21) вот уже так, выдает другую ошибку.
{"errors":[{"code":"InvalidUnitException","message":"Unprocessable Entity","details":null,"path":"stock.unit","userMessage":"Given stock unit is not valid. Use one of: UNIT, PAIR, SET."}]}
24 location
 
naïve
23.03.22
17:40
все разобрался регистр влияет UNIT надо писать.
25 Kassern
 
23.03.22
17:41
(24) ага, вам об этом и пишут) Use one of: UNIT, PAIR, SET
26 location
 
naïve
23.03.22
17:49
всем спасибо. заменились данные