Не получается получить нужный ответ от сервиса
В ответе написано что не установлена сбытовая организация
Вероятно неправильно передаю параметры в тело запроса
Тестирование сервиса возвращает результатhttp://ws.armtek.ru/test/test/generate/Ws_search/search_post
Сверял запросы в Fiddler
Параметры в тело запроса передавал структурой и строкой (которую брал по аналогии из Fiddler)
Может кто увидит ошибку или подскажет что неправильно делаю?
В ответе написано что не установлена сбытовая организация
Вероятно неправильно передаю параметры в тело запроса
Тестирование сервиса возвращает результат
Сверял запросы в Fiddler
Параметры в тело запроса передавал структурой и строкой (которую брал по аналогии из Fiddler)
Может кто увидит ошибку или подскажет что неправильно делаю?
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("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);
ПоказатьОтветы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Нужно описание сервиса, пока вижу что то не передаются параметры авторизации, они вроде должны передаваться в заголовках.
Соединение = Новый HTTPСоединение("ws.armtek.ru", , "email", "password", Новый ИнтернетПрокси, ,); Вот тут вы используете прокси? Оно у вас есть? или это попытка передать логин и пароль в запрос?
Так же можно попробовать переделать вот это
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON);
Не всегда сервисы это понимают, можно попробовать через временныйФайл и уже его отправить для обработки.
Соединение = Новый HTTPСоединение("ws.armtek.ru", , "email", "password", Новый ИнтернетПрокси, ,); Вот тут вы используете прокси? Оно у вас есть? или это попытка передать логин и пароль в запрос?
Так же можно попробовать переделать вот это
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON);
Не всегда сервисы это понимают, можно попробовать через временныйФайл и уже его отправить для обработки.
(2) Прокси можно убрать, смысл от этого не поменяется
Описание сервиса здесь:http://ws.armtek.ru/?page=service&alias=search
Описание сервиса здесь:
(5) Способ авторизации: Basic Authentication
Basic Authentication — клиент указывает свой логин и пароль для для получения доступа к REST сервису. Логин и пароль передаются по сети как незашифрованный текст кодированный простым Base64 и может быть легко декодирован любым пользователем.
Нужно логин и пароль шифровать через Base64 и скорее всего передавать в Head вот только непонятно куда, но точно не через прокси (прокси лучше убрать если он не используется, он нужен только в том случае если подключение ВАШЕГО интернета идёт через прокси сервер с логином и паролем.
Данные пользователя:
username = email
password = password
Вот эти хеды можно попробовать передать Вот пример
Это первое.
А второе нужно смотреть на передачу данных,
Вот тут указан массив, а вы в JSON передаете структуру. Возможно в этом ошибка
Basic Authentication — клиент указывает свой логин и пароль для для получения доступа к REST сервису. Логин и пароль передаются по сети как незашифрованный текст кодированный простым Base64 и может быть легко декодирован любым пользователем.
Нужно логин и пароль шифровать через Base64 и скорее всего передавать в Head вот только непонятно куда, но точно не через прокси (прокси лучше убрать если он не используется, он нужен только в том случае если подключение ВАШЕГО интернета идёт через прокси сервер с логином и паролем.
Данные пользователя:
username = email
password = password
Вот эти хеды можно попробовать передать Вот пример
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization","AccessToken "+ Authorization);
Заголовки.Вставить("X-User-Authorization","Basic "+ XUserAuthorization);
Заголовки.Вставить("Content-Type", "application/json;charset=UTF-8");
HTTPЗапрос = Новый HTTPЗапрос(Запрос, Заголовки);
Это первое.
А второе нужно смотреть на передачу данных,
Array
(
[VKORG] => 0000
[KUNNR_RG] => 000
[PIN] => 000
[BRAND] =>
[QUERY_TYPE] =>
[PROGRAM] =>
[KUNNR_ZA] =>
[VBELN] =>
)
ПоказатьВот тут указан массив, а вы в JSON передаете структуру. Возможно в этом ошибка
(6) Если использую заголовки, то пишет ошибка авторизации пользователя
Но мне кажется дело не в авторизации. Так как в моем примере он уже ругается на незаполненный параметр, значит авторизация прошла.
По поводу второго, пробовал передавать и массив со значениями "[VKORG] => 5000"
И просто строку "API_USER_LOGIN=login&API_USER_PASSSWORD=password&VKORG=5000 &KUNNR_RG=id&PIN=C110&BRAND=&QUERY_TYPE=&PROGRAM=&KUNNR_ZA=& VBELN=""
Но ничего не проходит, не заполнена сбытовая организация это первый параметр VKORG=5000
Причем строку брал такую как получилась в fiddler при отправке тестового запроса с сайта armtek
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization","AccessToken "+ email );
Заголовки.Вставить("X-User-Authorization","Basic "+ password);
Заголовки.Вставить("Content-Type", "application/json;charset=UTF-8");
Но мне кажется дело не в авторизации. Так как в моем примере он уже ругается на незаполненный параметр, значит авторизация прошла.
По поводу второго, пробовал передавать и массив со значениями "[VKORG] => 5000"
И просто строку "API_USER_LOGIN=login&API_USER_PASSSWORD=password&VKORG=5000
Но ничего не проходит, не заполнена сбытовая организация это первый параметр VKORG=5000
Причем строку брал такую как получилась в fiddler при отправке тестового запроса с сайта armtek
(29) https://www.getpostman.com/downloads/ Вот есть программка, через неё можно отладить запросы. Посмотрите что она будет выдавать.
(16) У них на сайте есть веб форма для тестирования
http://ws.armtek.ru/test/test/generate/Ws_search/search_post
(20) Так в фидлере я вижу только то что мне вернула веб форма а она возвращает html и там типо есть поле в котором так написано
Скрытый текст |
---|
</pre><h2>Ответ:</h2><pre>stdClass Object
( [STATUS] => 200 [MESSAGES] => Array ( ) [RESP] => Array ( [0] => stdClass Object ( [PIN] => 95635424 [BRAND] => PSA [NAME] => Сфера [ARTID] => 549824 [PARNR] => 193895 [KEYZAK] => 0000021167 [RVALUE] => 3 [RDPRF] => 1 [MINBM] => 1.000 [RETDAYS] => 14 [VENSL] => 95.0 [PRICE] => 2599.20 [WAERS] => RUB [DLVDT] => 20190617163000 [WRNTDT] => 20190619163000 [ANALOG] => X |
(46)
//сервис поиска
HTTPЗаголовки = Новый Соответствие;
HTTPЗаголовки.Вставить("Content-Type", "application/json");
HTTPЗапрос = Новый HTTPЗапрос(СтруктураПараметров.Search, HTTPЗаголовки);
Запись = Новый ЗаписьJSON;
ИмяФайлаТела = ПолучитьИмяВременногоФайла("json");
Запись.ОткрытьФайл(ИмяФайлаТела);
МассивДанных = Новый Массив;
Данные = Новый Структура;
Данные.Вставить("VKORG", СтруктураПараметров.VKORG);
Данные.Вставить("KUNNR_RG", СтруктураПараметров.KUNNR_RG);
Данные.Вставить("PIN", КодироватьСтроку(СтруктураПараметров.TEXT, СпособКодированияСтроки.КодировкаURL));
МассивДанных.Добавить(Данные);
ЗаписатьJSON(Запись, МассивДанных, Новый НастройкиСериализацииJSON);
Запись.Закрыть();
HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаТела);
Ответ = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
ЗначениеОтвета = ЗначениеИзСтрокиJSON(Ответ.ПолучитьТелоКакСтроку());
Показать
В общем, всем ищущим да будет в помощь. Вот рабочий код:
Оказывается еще в самой структуре json надо было передавать параметр "format" со значением "json", о чем в принципе у armtek ни где не сказано.
HTTPЗаголовки = Новый Соответствие;
HTTPЗаголовки.Вставить("Content-Type", "application/json");
HTTPЗапрос = Новый HTTPЗапрос(СтруктураПараметров.Search, HTTPЗаголовки);
Запись = Новый ЗаписьJSON;
ИмяФайлаТела = ПолучитьИмяВременногоФайла("json");
Запись.ОткрытьФайл(ИмяФайлаТела);
Данные = Новый Структура;
Данные.Вставить("VKORG", СтруктураПараметров.VKORG);
Данные.Вставить("KUNNR_RG", СтруктураПараметров.KUNNR_RG);
Данные.Вставить("PIN", КодироватьСтроку(СтруктураПараметров.TEXT, СпособКодированияСтроки.КодировкаURL));
Данные.Вставить("format", "json");
ЗаписатьJSON(Запись, Данные, Новый НастройкиСериализацииJSON);
Запись.Закрыть();
HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаТела);
Ответ = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
ЗначениеОтвета = ЗначениеИзСтрокиJSON(Ответ.ПолучитьТелоКакСтроку());
ПоказатьОказывается еще в самой структуре json надо было передавать параметр "format" со значением "json", о чем в принципе у armtek ни где не сказано.
о ... точно заработало ..
переделал на окончание на
Ответ = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
ЗначениеОтвета = Ответ.ПолучитьТелоКакСтроку();
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ЗначениеОтвета);
Данные = ПрочитатьJSON(ЧтениеJSON);
и в данных - все есть
переделал на окончание на
Ответ = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
ЗначениеОтвета = Ответ.ПолучитьТелоКакСтроку();
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ЗначениеОтвета);
Данные = ПрочитатьJSON(ЧтениеJSON);
и в данных - все есть
на всяк случай.
документация -http://ws.armtek.ru/?page=service&alias=order
метод - создать тестовый заказ.
работаю только по обязатльным полям:
Ответ постоянный = Ошибка входных параметров
логично что ошибка ... знать бы как надо таблицу товаров формировать
документация -
метод - создать тестовый заказ.
работаю только по обязатльным полям:
HTTPСоединение = Новый HTTPСоединение("ws.armtek.ru", , email, password, Новый ИнтернетПрокси, ,);
HTTPЗаголовки = Новый Соответствие;
HTTPЗаголовки.Вставить("Content-Type", "application/json");
HTTPЗапрос = Новый HTTPЗапрос("/api/ws_order/createTestOrder?format=json", HTTPЗаголовки);
Запись = Новый ЗаписьJSON;
ИмяФайлаТела = ПолучитьИмяВременногоФайла("json");
Запись.ОткрытьФайл(ИмяФайлаТела);
Данные = Новый Структура;
Данные.Вставить("VKORG",VKORG);
Данные.Вставить("KUNNR_RG", KUNNR_RG);
ITEMS = Новый Структура();
ITEMS.Вставить("PIN","WP250110");
ITEMS.Вставить("BRAND","SFEC");
ITEMS.Вставить("KWMENG",2);
Данные.Вставить("ITEMS",ITEMS);
Данные.Вставить("format", "json");
ЗаписатьJSON(Запись, Данные, Новый НастройкиСериализацииJSON);
Запись.Закрыть();
HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаТела);
Ответ = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
ПоказатьОтвет постоянный = Ошибка входных параметров
логично что ошибка ... знать бы как надо таблицу товаров формировать
там же есть тестилка запросов.
вот я отправляю свой запрос. вот так вот идет кодирование.
те каждый товар - описывает отдельная структура что ль ...
вот я отправляю свой запрос. вот так вот идет кодирование.
Array
(
[VKORG] => <<Мой_VKORG>>
[KUNRG] => <<Мой_KUNRG>>
[KUNWE] =>
[KUNZA] =>
[PARNR] =>
[VBELN] =>
[TEXT_ORD] =>
[TEXT_EXP] =>
[DBTYP] =>
[ITEMS] => Array
(
[0] => Array
(
[PIN] => WP250110
[BRAND] => SFEC
[KWMENG] => 2
[KEYZAK] =>
[PRICEMAX] =>
[DATEMAX] =>
[COMMENT] =>
)
)
)
/// тут что шапка запроса идет как Array - где VKORG и др лабуда. - те это структура
что список товаров [ITEMS] => Array - тут ттоже структура
только потом идет
[ITEMS] => Array
(
[0] => Array
(
Показатьте каждый товар - описывает отдельная структура что ль ...
[ITEMS] => Array
(
[0] => Array
(
[PIN] => WP250110
[BRAND] => SFEC
[KWMENG] => 2
[KEYZAK] =>
[PRICEMAX] =>
[DATEMAX] =>
[COMMENT] =>
)
[1] => Array
(
[PIN] => WP250111
[BRAND] => SFEC
[KWMENG] => 4
[KEYZAK] =>
[PRICEMAX] =>
[DATEMAX] =>
[COMMENT] =>
)
)
Показать
Делаю в 1С так
не але ..
ITEMS = Новый Массив();
TEMS0 = Новый Структура();
TEMS0.Вставить("PIN","WP250110");
TEMS0.Вставить("BRAND","SFEC");
TEMS0.Вставить("KWMENG",2);
TEMS0.Вставить("format","json");
TEMS1 = Новый Структура();
TEMS1.Вставить("PIN","WP250111");
TEMS1.Вставить("BRAND","SFEC");
TEMS1.Вставить("KWMENG",2);
TEMS1.Вставить("format","json");
ITEMS.Добавить(TEMS0);
ITEMS.Добавить(TEMS1);
--------
json такой
{
"VKORG": "4150",
"KUNNR_RG": "43220150",
"ITEMS": [
{
"PIN": "WP250110",
"BRAND": "SFEC",
"KWMENG": 2,
"format": "json"
},
{
"PIN": "WP250111",
"BRAND": "SFEC",
"KWMENG": 2,
"format": "json"
}
],
"format": "json"
}
Показатьне але ..
одним словом. спецаильно для тупых ..или сонных...
те для меня )))
параметр KUNRG !!!!
а не KUNNR_RG
работает так
те для меня )))
параметр KUNRG !!!!
а не KUNNR_RG
работает так
Данные = Новый Структура;
Данные.Вставить("format", "json");
Данные.Вставить("VKORG",VKORG);
Данные.Вставить("KUNRG", KUNNR_RG);
ITEMS = Новый массив();
TEMS0 = Новый Структура();
TEMS0.Вставить("PIN","WP250110");
TEMS0.Вставить("BRAND","SFEC");
TEMS0.Вставить("KWMENG",2);
ITEMS.Добавить(TEMS0);
TEMS1 = Новый Структура();
TEMS1.Вставить("PIN","WP250110");
TEMS1.Вставить("BRAND","SFEC");
TEMS1.Вставить("KWMENG",2);
ITEMS.Добавить(TEMS1);
Данные.Вставить("ITEMS",ITEMS);
Показать
для тех кто будет искать ..
в (66) варианте всегда в ответе приходит таблица с ответом типа -
Заказать позицию не удалось. По запросу ничего не найдено, измените параметры поиска
служба поддержки херней страдает и не знает ничего
можете не звонить. менегеры т.у.пые.
в шапке ОБЯЗАТЕЛЬНЫЙ параметр для заполнения эт реквизит
DBTYP = 3
те
Данные = Новый Структура;
Данные.Вставить("format", "json");
Данные.Вставить("VKORG",VKORG);
Данные.Вставить("KUNRG", KUNNR_RG);
Данные.Вставить("DBTYP",3);// Тип поиска
ITEMS = Новый массив();
TEMS0 = Новый Структура();
TEMS0.Вставить("PIN","WP250110");
TEMS0.Вставить("BRAND","SFEC");
TEMS0.Вставить("KWMENG",2);
ITEMS.Добавить(TEMS0);
TEMS1 = Новый Структура();
TEMS1.Вставить("PIN","WP250110");
TEMS1.Вставить("BRAND","SFEC");
TEMS1.Вставить("KWMENG",2);
ITEMS.Добавить(TEMS1);
Данные.Вставить("ITEMS",ITEMS);
и ответ уже приходит нормальный.
пока - у меня результат на тестовый запрос приходит без ошибки.
могли бы в описании формата указать - что этот параметр обязательный.
помогло то - что на чужом сайте такую связку делали и подсказали. они мучались 1,5мес. перебирая - психуя и тд
успехов
в (66) варианте всегда в ответе приходит таблица с ответом типа -
Заказать позицию не удалось. По запросу ничего не найдено, измените параметры поиска
служба поддержки херней страдает и не знает ничего
можете не звонить. менегеры т.у.пые.
в шапке ОБЯЗАТЕЛЬНЫЙ параметр для заполнения эт реквизит
DBTYP = 3
те
Данные = Новый Структура;
Данные.Вставить("format", "json");
Данные.Вставить("VKORG",VKORG);
Данные.Вставить("KUNRG", KUNNR_RG);
Данные.Вставить("DBTYP",3);// Тип поиска
ITEMS = Новый массив();
TEMS0 = Новый Структура();
TEMS0.Вставить("PIN","WP250110");
TEMS0.Вставить("BRAND","SFEC");
TEMS0.Вставить("KWMENG",2);
ITEMS.Добавить(TEMS0);
TEMS1 = Новый Структура();
TEMS1.Вставить("PIN","WP250110");
TEMS1.Вставить("BRAND","SFEC");
TEMS1.Вставить("KWMENG",2);
ITEMS.Добавить(TEMS1);
Данные.Вставить("ITEMS",ITEMS);
и ответ уже приходит нормальный.
пока - у меня результат на тестовый запрос приходит без ошибки.
могли бы в описании формата указать - что этот параметр обязательный.
помогло то - что на чужом сайте такую связку делали и подсказали. они мучались 1,5мес. перебирая - психуя и тд
успехов
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот