Имя: Пароль:
1C
 
JSON-rpc в 1С ошибка >400 Bad Request
0 Юзер123
 
naïve
10.06.21
09:00
Доброго времени.
Продолжаю разбираться с подключением 1С к стороннему ПО.  Пробую  получить данные через JSON-rpc
На стороне стороннего По  установлен пакет jsonpc .

На питоне  программист на той стороне показывал свой код подключения.

data = {
        "jsonrpc": "2.0",
        "method": "call",
        "params": {
            "service": "object",
            "method": "execute",
            "args": [
                "1111", id_1, "pass",
                "product",
                "search",
                [
                    ["id", "in", [888888, 777777]]
                ], ["default_code", "type", "series",]
            ],
        },
        "id": random.randint(0, 1000000000),
}
req = urllib.request.Request(url="https://test.ru/jsonrpc", data=json.dumps(data).encode(), headers={
    "Content-Type":"application/json",




Пробую в 1С

        СерверПриемник = "test.ru";
    АдресСтраницыНаСервере = "/jsonrpc.php";
    Таймаут = 120;
    HTTP = Новый HTTPСоединение(СерверПриемник,,,,,Таймаут,,);
    
    HTTPЗапрос = Новый HTTPЗапрос(АдресСтраницыНаСервере);
    HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json");
    
    

    
    СтрокаJSON = "{
    |   ""jsonrpc"": ""2.0"",
    |   ""method"": ""call"",
    |    ""params"": {
    |     ""service"": ""object"",
    |     ""method"": ""execute"",
    |     ""args"": [
    |        ""1111"", id_1, ""pass"",
    |       ""product"",
    |     ""search"",
    |   [
    |        [""id"", ""in"", [888888, 777777]]
    |    ], [""default_code"", ""type"", ""series"",]
    |  ],
    |  }";
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, СтрокаJSON);
    РезультатСтрока = ЗаписьJSON.Закрыть();    
    
    
    HTTPЗапрос.УстановитьТелоИзСтроки(ЗаписьJSON,КодировкаТекста.UTF8,);
    ФайлРезультат = ПолучитьИмяВременногоФайла();
    HTTP.ОтправитьДляОбработки(HTTPЗапрос,ФайлРезультат);
    ТекстовыйФайлОтвета = Новый ТекстовыйДокумент;
    ТекстовыйФайлОтвета.Прочитать(ФайлРезультат, КодировкаТекста.UTF8);
    СтрокаОтветаСервера = ТекстовыйФайлОтвета.ПолучитьТекст();    
    Сообщить(СтрокаОтветаСервера);

возвращает


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>Invalid JSON data: '{&quot;jsonrpc&quot;:&quot;2.0&quot;,&quot;method&quot;:&quot;call&quot;,&quot;params&quot;:{&quot;service&quot;:&quot;object&quot;,&quot;method&quot;:&quot;execute&quot;,&quot;args&quot;:[&quot;1111&quot;,id_1,&quot;pass&quot;,product&quot;,&quot;search&quot;,[[&quot;id&quot;,&quot;in&quot;,[888888,777777]]],[&quot;default_code&quot;,&quot;type&quot;,&quot;series&quot;,]],}'</p>
1 Юзер123
 
naïve
10.06.21
09:04
Пробовал без ЗаписьJson  тот же результат.

СтрокаJSON = "{
    |   ""jsonrpc"": ""2.0"",
    |   ""method"": ""call"",
    |    ""params"": {
    |     ""service"": ""object"",
    |     ""method"": ""execute"",
    |     ""args"": [
    |        ""1111"", id_1, ""pass"",
    |       ""product"",
    |     ""search"",
    |   [
    |        [""id"", ""in"", [888888, 777777]]
    |    ], [""default_code"", ""type"", ""series"",]
    |  ],
    |  }";
    

    
    HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON ,КодировкаТекста.UTF8,);
    ФайлРезультат = ПолучитьИмяВременногоФайла();
    HTTP.ОтправитьДляОбработки(HTTPЗапрос,ФайлРезультат);
    ТекстовыйФайлОтвета = Новый ТекстовыйДокумент;
    ТекстовыйФайлОтвета.Прочитать(ФайлРезультат, КодировкаТекста.UTF8);
    СтрокаОтветаСервера = ТекстовыйФайлОтвета.ПолучитьТекст();    
    Сообщить(СтрокаОтветаСервера);
2 Garykom
 
гуру
10.06.21
09:45
>АдресСтраницыНаСервере = "/jsonrpc.php";

".php" науя?
3 Garykom
 
гуру
10.06.21
09:46
и не обязательно как понял раз сервер ответил но в примере
url="https://test.ru/jsonrpc"

httpS
4 Garykom
 
гуру
10.06.21
09:50
(0) и у тебя полная тупость с логикой
json в текстовой строек уже нет смысла сразу как в (2)
СтрокаJSON = "{...
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON...
5 Почему 1С
 
10.06.21
09:51
Что за манипуляции не понятные с  
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, СтрокаJSON);
РезультатСтрока = ЗаписьJSON.Закрыть();

Что у тебя получается в результате в РезультатСтрока ?

у тебя же уже есть готовая json строка
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON,КодировкаТекста.UTF8,);
6 Garykom
 
гуру
10.06.21
09:51
(4) тьфу т.е. в (1) правильней чем в (0)
7 Garykom
 
гуру
10.06.21
09:53
(0) Короче наймите программиста 1С
Питониста же нашли где то ))
8 arsik
 
гуру
10.06.21
10:19
(0) А куда последний "id" потерял?
9 arsik
 
гуру
10.06.21
10:24
+(8) У тебя даже по фигурным скобкам видно что ты потерял часть. Собирай JSON через структуру и массив. И нагляднее и не ошибешься. https://its.1c.ru/db/v836doc#bookmark:dev:TI000001491
10 arsik
 
гуру
10.06.21
10:28
ВОт еще для примера. https://wonderland.v8.1c.ru/blog/sredstva-raboty-s-json/
11 lubitelxml
 
10.06.21
10:29
(9) +1 Не надо пытаться записать строку в json, используй средства для формирования json.
12 Юзер123
 
naïve
10.06.21
10:43
(10) Спасибо
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.