Имя: Пароль:
1C
 
прошу подсказать с API запросом
,
0 Tarlich
 
27.09.24
11:39
Понимаю что вопрос пустяковый
в постмене работает - как сделать 1С ?
надо авторизироваться и получить токен - дальше уверен разберусь

Есть сайт адрес, "/Auth" , логин, пароль - ответом будет токен
1 пробовал так
    //httpRequest = СоздатьОбъект("MSXML2.xmlhttp");
    //httpRequest.open("POST", "https://pharmapi.apteka.ru" ,0);
    //httpRequest.setRequestHeader("Content-Type", "text/xml");
    //httpRequest.setRequestHeader("login", Логин);
    //httpRequest.setRequestHeader("password", Пароль);
    //ОтветСервера = httpRequest.responseText;
    //Сообщить(ОтветСервера);
2 - пробовал так
    Соединение = Новый HTTPСоединение("https://pharmapi.apteka.ru");
    Запрос = Новый HTTPЗапрос;
    Запрос.АдресРесурса = "/Auth";
    Тело = "grant_type=login=" + Логин + "&password=" + Пароль;
    Запрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
    Запрос.УстановитьТелоИзСтроки(Тело,"UTF-8",ИспользованиеByteOrderMark. НеИспользовать);
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    Тело = Ответ.ПолучитьТелоКакСтроку();
Понимаю что где то рядом - но что...
подскажите пожалуйста
1 Смотрящий
 
27.09.24
11:45
Соединение = Новый HTTPСоединение("pharmapi.apteka.ru",, Логин, Пароль,,, Новый ЗащищенноеСоединениеOpenSSL());
2 Tarlich
 
27.09.24
11:56
(1) прошу уточнить "pharmapi.apteka.ru/Auth" ?
Ответ = Соединение. ??
3 novichok79
 
27.09.24
12:04
(0) сделай курл из постмана и скинь сюда.
4 novichok79
 
27.09.24
12:06
Тело = "grant_type=login=" + Логин + "&password=" + Пароль;

это вообще похоже надо пихать в query, а не в тело, тут же типичное перечисление query параметров.

а вообще где документация к api? как можно помочь не зная, что надо сделать )))) я думал это очевидные вещи типа.
5 Смотрящий
 
27.09.24
12:08
HTTPЗапросЗаголовки = Новый Соответствие;
HTTPЗапросЗаголовки.Вставить("Content-Type", "text/xml");

Соединение = Новый HTTPСоединение("pharmapi.apteka.ru",, Логин, Пароль,,, Новый ЗащищенноеСоединениеOpenSSL());
ЗапросHTTP = Новый HTTPЗапрос("/Auth", HTTPЗапросЗаголовки);
ОтветHTTP = СоединениеHTTP.ВызватьHTTPМетод("GET", ЗапросHTTP); // Или ПОСТ ?
6 Tarlich
 
27.09.24
12:17
(3) не знаю что такое "курл"
https://i.postimg.cc/VvSjQ3VC/111.png
7 Tarlich
 
27.09.24
12:24
ЗаголовкиЗапроса = Новый Соответствие;
    ЗаголовкиЗапроса.Вставить("login", Логин);
    ЗаголовкиЗапроса.Вставить("password", Пароль);
    // Подключаемся к сайту.
    СоединениеHTTP = Новый HTTPСоединение("pharmapi.apteka.ru");

    // Получение текста страницы
    ЗапросHTTP = Новый HTTPЗапрос("/Auth", ЗаголовкиЗапроса); // Можно указать любую страницу например, "/services" или "/contacts"
    РезультатЗапроса = СоединениеHTTP.Получить(ЗапросHTTP); // Get запрос

так 301 получаю
8 arsik
 
гуру
27.09.24
12:26
(7) Так ты зачем игнорируешь ssl?
9 Смотрящий
 
27.09.24
12:28
HTTPЗапросЗаголовки = Новый Соответствие;
HTTPЗапросЗаголовки.Вставить(); // Воткнешь сюда из Headers постмана

ТелоСтруктура = Новый Структура;
ТелоСтруктура.Вставить("login", <login>);
ТелоСтруктура.Вставить("password", <password>);

JSONЗапись = Новый ЗаписьJSON;
JSONЗапись.УстановитьСтроку();

ЗаписатьJSON(JSONЗапись, ТелоСтруктура);

СоединениеHTTP= Новый HTTPСоединение("pharmapi.apteka.ru",,,,,, Новый ЗащищенноеСоединениеOpenSSL());

ЗапросHTTP = Новый HTTPЗапрос("/Auth", HTTPЗапросЗаголовки);
ЗапросHTTP.УстановитьТелоИзСтроки(JSONЗапись.Закрыть());

ОтветHTTP = СоединениеHTTP.ВызватьHTTPМетод("POST", ЗапросHTTP);
10 Tarlich
 
27.09.24
12:38
(9) // Воткнешь сюда из Headers постмана
там

https://i.postimg.cc/MG9Sg4Rx/111.png
11 Смотрящий
 
27.09.24
12:40
В хидденах смотри
Content-Type должен быть, как минимум, и судя по (0) "text/xml"
12 Tarlich
 
27.09.24
12:48
закомментировал
// HTTPЗапросЗаголовки.Вставить(); // Воткнешь сюда из Headers постмана

ОтветHTTP вернул кодсостояния 200 и соответствие
в соответствие Content-Type есть
13 Смотрящий
 
27.09.24
12:50
Токен то вернул ?
14 Tarlich
 
27.09.24
12:54
(13) тут не увидел
https://i.postimg.cc/021pB2sY/111.png
он в Content-Type ?
15 Смотрящий
 
27.09.24
12:54
ОтветHTTP.ПолучитьТелоКакСтроку() - токен есть ?
16 ass1c
 
27.09.24
12:55
(12) в теле ответа что?
17 Tarlich
 
27.09.24
13:01
(15) Да ! есть СПАСИБО !!!
18 Смотрящий
 
27.09.24
13:03
ОтветHTTP = СоединениеHTTP.ВызватьHTTPМетод("POST", ЗапросHTTP);

ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.УстановитьСтроку(ОтветHTTP .ПолучитьТелоКакСтроку());
    
ОтветСтруктура = ПрочитатьJSON(ЧтениеJSON);
19 Смотрящий
 
27.09.24
13:03
дальше сам
20 novichok79
 
27.09.24
13:44
(6) на будущее, очень помогает.

https://stackoverflow.com/questions/49432735/converting-a-postman-request-to-curl
21 Tarlich
 
09.10.24
12:03
Прошу помощи ! что то все же не хватает мне .....
1 - Итак, выше удалось получить токен .
2 - теперь необходимо при Bearer токене передать о том что Заказ получен  на адрес
Делаю

    Сервер = "pharmapi.apteka.ru";
    Адрес  = "/Pharm/ShippedOrders";
    
    HTTPСоединение =  Новый HTTPСоединение(Сервер,,,,,,);;

    ЗаголовкиЗапроса = Новый Соответствие;
    ЗаголовкиЗапроса.Вставить("Accept", "application/json");
    ЗаголовкиЗапроса.Вставить("Content-Type", "application/json");
    ЗаголовкиЗапроса.Вставить("Authorization","Bearer "+ token);    

    ЗапросHTTP = Новый HTTPЗапрос(Адрес, ЗаголовкиЗапроса);


//////////////////////////
Необходимо передать параметр
orderNums[]  Массив номеров заказов, которые были выкуплены пользователями  array(внутри string)
Это я как понимаю надо в тело

в итоге получилось

    Сервер = "pharmapi.apteka.ru";
    Адрес  = "/Pharm/ShippedOrders";
    
    HTTPСоединение =  Новый HTTPСоединение(Сервер,,,,,,);;

    ЗаголовкиЗапроса = Новый Соответствие;
    ЗаголовкиЗапроса.Вставить("Accept", "application/json");
    ЗаголовкиЗапроса.Вставить("Content-Type", "application/json");
    ЗаголовкиЗапроса.Вставить("Authorization","Bearer "+ token);    
    
    ЗапросHTTP = Новый HTTPЗапрос(Адрес, ЗаголовкиЗапроса);    
    ТелоЗапроса =     "{"+"""orderNums"""+":["+Заказ+ "]}" ;
    ЗапросHTTP.УстановитьТелоИзСтроки(ТелоЗапроса);
    Ответ = HTTPСоединение.ОтправитьДляОбработки(ЗапросHTTP);
    ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
    
получаю ответ 308 - почему так ?

если делаю
    Сервер = "pharmapi.apteka.ru";
    Адрес  = "/Pharm/ShippedOrders";

    ЗаголовкиЗапроса = Новый Соответствие;
    ЗаголовкиЗапроса.Вставить("Accept", "application/json");
    ЗаголовкиЗапроса.Вставить("Content-Type", "application/json");
    ЗаголовкиЗапроса.Вставить("Authorization","Bearer "+ token);    
    
    ТелоЗапроса =     "{"+"""orderNums"""+":["+Заказ+ "]}" ;    
    Соединение = Новый HTTPСоединение(Сервер,,,,,, Новый ЗащищенноеСоединениеOpenSSL());    
    ЗапросHTTP = Новый HTTPЗапрос(Адрес, ЗаголовкиЗапроса);
    
    ЗапросHTTP.УстановитьТелоИзСтроки(ТелоЗапроса);    
    ОтветHTTP = Соединение.ВызватьHTTPМетод("POST", ЗапросHTTP);
    Ответ = ОтветHTTP.ПолучитьТелоКакСтроку();
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(Ответ);
    РезультатСоответствие = ПрочитатьJSON(ЧтениеJSON,Истина);
получаю ответ 400
22 Tarlich
 
09.10.24
12:01
Сервер = "pharmapi.apteka.ru";
    Адрес  = "/Pharm/ShippedOrders";
    ЗаголовкиЗапроса = Новый Соответствие;
    ЗаголовкиЗапроса.Вставить("Accept", "application/json");
    ЗаголовкиЗапроса.Вставить("Content-Type", "application/json");
    ЗаголовкиЗапроса.Вставить("Authorization","Bearer "+ token);         
    Соединение = Новый HTTPСоединение(Сервер,,,,,, Новый ЗащищенноеСоединениеOpenSSL());    
    СтруктураЗапроса = новый Структура;
    myMass = новый массив;
    myMass.Добавить(Заказ);
    СтруктураЗапроса.Вставить("orderNums",myMass);  
    ПараметрыJSON    = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " " , Истина, ЭкранированиеСимволовJSON.Нет, Ложь, Ложь, Ложь, Ложь);
    ЗаписьJSON        = Новый ЗаписьJSON;
    ЗаписьJSON.ПроверятьСтруктуру = Истина;
    ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);    
    ЗаписатьJSON(ЗаписьJSON, СтруктураЗапроса);
    ЗапросJSON = ЗаписьJSON.Закрыть();
    HTTPЗапрос= Новый HTTPЗапрос(Адрес);    
    //Закидываем JSON в тело
    HTTPЗапрос.УстановитьТелоИзСтроки(ЗапросJSON);
    HTTPОтвет = Соединение.ВызватьHTTPМетод("POST",HTTPЗапрос);    
    //Получаем ответ или текст ошибки
    Ответочка = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);    
так то же 400
23 Tarlich
 
09.10.24
12:04
Спасибо ! так победил - 200 !!!
    Сервер = "pharmapi.apteka.ru";
    Адрес  = "/Pharm/ShippedOrders";
    ЗаголовкиЗапроса = Новый Соответствие;
    ЗаголовкиЗапроса.Вставить("Accept", "application/json");
    ЗаголовкиЗапроса.Вставить("Content-Type", "application/json");
    ЗаголовкиЗапроса.Вставить("Authorization","Bearer "+ token);         
    Соединение = Новый HTTPСоединение(Сервер,,,,,, Новый ЗащищенноеСоединениеOpenSSL());    
    СтруктураЗапроса = новый Структура;
    myMass = новый массив;
    myMass.Добавить(Заказ);
    СтруктураЗапроса.Вставить("orderNums",myMass);  
    ПараметрыJSON    = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " " , Истина, ЭкранированиеСимволовJSON.Нет, Ложь, Ложь, Ложь, Ложь);
    ЗаписьJSON        = Новый ЗаписьJSON;
    ЗаписьJSON.ПроверятьСтруктуру = Истина;
    ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);    
    ЗаписатьJSON(ЗаписьJSON, СтруктураЗапроса);
    ЗапросJSON = ЗаписьJSON.Закрыть();
    HTTPЗапрос= Новый HTTPЗапрос(Адрес,ЗаголовкиЗапроса);    
    //Закидываем JSON в тело
    HTTPЗапрос.УстановитьТелоИзСтроки(ЗапросJSON);
    HTTPОтвет = Соединение.ВызватьHTTPМетод("POST",HTTPЗапрос);    
    //Получаем ответ или текст ошибки
    Ответочка = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);