Имя: Пароль:
1C
1С v8
Armtek. Сервис поиска
,
0 Zixxx
 
11.06.19
10:59
Не получается получить нужный ответ от сервиса
В ответе написано что не установлена сбытовая организация
Вероятно неправильно передаю параметры в тело запроса
Тестирование сервиса возвращает результат http://ws.armtek.ru/test/test/generate/Ws_search/search_post
Сверял запросы в Fiddler
Параметры в тело запроса передавал структурой и строкой (которую брал по аналогии из Fiddler)

Может кто увидит ошибку или подскажет что неправильно делаю?

Привожу код из 1с:

СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("VKORG",        "5000");
СтруктураПараметров.Вставить("KUNNR_RG",    "id");
СтруктураПараметров.Вставить("PIN",        "C110");
    
// Сериализатор
ЗаписьJSON        = Новый ЗаписьJSON;
ПараметрыЗаписиJSON    = Новый ПараметрыЗаписиJSON(, Символы.Таб);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
ЗаписатьJSON(ЗаписьJSON, СтруктураПараметров);
СтрокаJSON = ЗаписьJSON.Закрыть();
    
// POST
HTTPЗапрос = Новый HTTPЗапрос();
    
АдресРесурса    = "/api/ws_search/search?format=json";
                    
HTTPЗапрос.АдресРесурса = АдресРесурса;
    
Соединение        = Новый HTTPСоединение("ws.armtek.ru", , "email", "password", Новый ИнтернетПрокси, ,);
    
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON);
    
ОтветHTTP        = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
    
Тело            = ОтветHTTP.ПолучитьТелоКакСтроку();
    
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Тело);
Данные = ПрочитатьJSON(ЧтениеJSON);
1 Garykom
 
гуру
11.06.19
11:31
"Новый ИнтернетПрокси" у вас инет через прокси?
2 Zixxx
 
11.06.19
11:48
(1) Это можно убрать, смысл от этого не измениться
3 Garykom
 
гуру
11.06.19
12:12
Может авторизация неправильно? Покажи как делаешь Basic Authentication
4 Zixxx
 
11.06.19
13:22
(3) Логин и пароль правильные, при тесте на сайте все ок
Использую только тот код который привел в примере
5 Garykom
 
гуру
11.06.19
13:58
(4) Речь не про правильность а как ты их передаешь
6 Zixxx
 
11.06.19
14:01
(5) Я написал что передаю их только так как указано выше в примере. В описании я не увидел чтобы их как-то в заголовках нужно передавать или как-то по другому. Может не написали просто. Описание метода http://ws.armtek.ru/?page=service&alias=search
7 Zixxx
 
11.06.19
14:03
В описании у них написано так:

Способ авторизации: Basic Authentication
Basic Authentication — клиент указывает свой логин и пароль для для получения доступа к REST сервису. Логин и пароль передаются по сети как незашифрованный текст кодированный простым Base64 и может быть легко декодирован любым пользователем.

Что в этом случае мне нужно дополнить?
8 Garykom
 
гуру
11.06.19
14:03
(7) Эээ. Нет слов
9 Garykom
 
гуру
11.06.19
14:09
Хотя бы "http basic authentication" погуглить

HTTPЗапрос.Заголовки.Вставить("Authorization","Basic "+Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(Логин+":"+Пароль, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать)));
10 Zixxx
 
11.06.19
14:22
(9) Также пишет ошибку что нет параметра сбытовая организация.
Так если бы была проблема с авторизацией, сервис сразу бы наверное и написал бы об этом

Если отправлять запрос через веб форму на сайте армтек в разделе тестирования веб-сервисов то в fiddler не видно чтобы он авторизацию передавал в заголовках, из 1с сейчас она передается только толку?
11 Garykom
 
гуру
11.06.19
14:25
(10) Ты можешь найти и показать пример рабочего запроса на чем угодно, на неком языке не 1С?
12 Garykom
 
гуру
11.06.19
14:28
И да с какого перепугу ты в тело засовываешь json файл?

Где это написано?
13 Garykom
 
гуру
11.06.19
14:35
(12)+ Хотя нашел да 'Content-Type: application/json'

Но как то странно у них в примере часть данные в теле в json а часть вынесено в некие $this->params
14 Garykom
 
гуру
11.06.19
14:39
Пипец они юмористы.

Короче VKORG надо в url передавать как для GET запросов ))
15 Garykom
 
гуру
11.06.19
14:39
Как меня бесит PHP хотя и меньше чем Python
16 Zixxx
 
11.06.19
14:45
(14) HTTPЗапрос.АдресРесурса = "/api/ws_search/search?VKORG=5000&format=json"

Так тоже самое
17 Garykom
 
гуру
11.06.19
14:46
АдресРесурса    = "/api/ws_search/search?format=json&VKORG=5000";
HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
18 Zixxx
 
11.06.19
15:02
(17) Это я тоже сразу проверил, ничего. А почему решил что VKORG нужно тоже в url передавать?
19 Garykom
 
гуру
11.06.19
15:03
(18)

if ($this->method === static::method('POST')
            || $this->method === static::method('PUT')
            || $this->method === static::method('PATCH')
        ) {
            if (count($this->params) > 0) {
                $cURLOptions[CURLOPT_POST] = count($this->params);
                //$cURLOptions[CURLOPT_POSTFIELDS] = ($this->json) ? json_encode($this->params) : $this->params;
                $cURLOptions[CURLOPT_POSTFIELDS] = http_build_query($this->params);
            } elseif (!is_null($this->content)) {
                $cURLOptions[CURLOPT_POST] = strlen($this->content);
                $cURLOptions[CURLOPT_POSTFIELDS] = ($this->json) ? json_encode($this->content) : $this->content;
            }
        } elseif (count($this->params) > 0) {
            $this->url = $this->url.'?'.http_build_query($this->params);
            $cURLOptions[CURLOPT_URL] = $this->url;
        } elseif (!is_null($this->content)) {
            $cURLOptions[CURLOPT_URL] = $this->url.'?'.$this->content;
        }
20 Garykom
 
гуру
11.06.19
15:05
(19) это в недрах http://ws.armtek.ru/examples/php/ArmtekRestClient_v1.0.1.zip
На страничке http://ws.armtek.ru/?page=material&alias=rest-examples

Короче разверни на компе эту клиенту на php и через фидлер лови что, куда и как оно лезет
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой