Имя: Пароль:
1C
1С v8
http. Post запрос
0 Belarus
 
11.12.19
13:25
Добрый день. Такой вопрос. Необходимо на сайт передать текст, но не работает. Может поможете найти ошибку

Метод выставляет новый счет.

Метод: POST
URL: https://api.express-pay.by/v1/invoices?token={Token}

Код:

        //Тело post запроса
    Стр = "Token=" + Token + Разделитель + "AccountNo=" + ...... + "ReturnInvoiceUrl=1";    

    //В этот файл для примера наш сайт сформирует ответ после отправки на него данных методом POST
    ФайлОтвета = "C:\answer.txt";    
    
    //путь к сайту
    //HTTPСоединение = Новый HTTPСоединение("https://api.express-pay.by/v1/invoices?token={"+Token+ "}",,,,,Истина);
    
        HTTPСоединение = Новый HTTPСоединение("https://api.express-pay.by/v1/invoices?token={"+Token+ "}",, "логин", "*пароль");

    //создаем запрос данных методом POST
    запросPOST = Новый HTTPЗапрос("api.express-pay.by"); // Адрес ресурса
    
    //Заголовок тела запроса
    запросPOST.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded");
    
        //Здесь задаем текст нашей отформатированной строки + задаем формат сроки
    запросPOST.УстановитьТелоИзСтроки(Стр, "utf-8", ИспользованиеByteOrderMark.НеИспользовать);
    
    Попытка
        //Отправляем для обрааботки на наш сервер
        HTTPСоединение.ОтправитьДляОбработки(запросPOST, ФайлОтвета);
        
    Исключение
        #Если клиент Тогда
            Сообщить(ОписаниеОшибки());
        #КонецЕсли  
    КонецПопытки;
1 Fragster
 
гуру
11.12.19
13:33
А ошибку мы должны угадать?
2 Ёпрст
 
11.12.19
13:35
ну и токен если есть в строке соединения то в теле не нужен
3 ДенисЧ
 
11.12.19
13:39
(1) не работает@
Я подозреваю, так и говорит ))
4 dmpl
 
11.12.19
13:40
(0) А где путь запроса устанавливается?
5 Belarus
 
11.12.19
13:45
Ошибки нет... просто не работает )
6 Belarus
 
11.12.19
13:46
Файл ответа пуст
7 Belarus
 
11.12.19
13:47
Может я адрес ресурса не так пишу.... или URL не в той форме записываю?
8 Belarus
 
11.12.19
13:48
(4) какой путь запроса?
9 dmpl
 
11.12.19
13:48
(5) Web-сервер дает же какой-то код ответа.

(7) В HTTPСоединение указывается адрес сервера, в HTTPЗапрос - все, что идет после адреса сервера. А в тело вообще что-то другое может быть помещено (например, отправляемый файл).
10 Ёпрст
 
11.12.19
13:49
(7)
Во всех запросах передаются обязательные параметры:

{version} – версия API;
token={token} – API-ключ (токен) доступа к серверу, который задается в личном кабинете;
signature={hash} – цифровая подпись запроса, которая формируется на основании секретного слова (задается в личном кабинете) и передаваемых данных. Данное поле является опциональным.
11 dmpl
 
11.12.19
13:52
+(9) У вас получается запрос к https://api.express-pay.by/api.express-pay.by
12 Belarus
 
11.12.19
13:56
(11) да... но ответа никакого нет
13 Belarus
 
11.12.19
14:02
да (11)
14 Ёпрст
 
11.12.19
14:12
(13)
.....Новый HTTPСоединение("api.express-pay.by",........,Истина);
..... Новый HTTPЗапрос("/v1/invoices");
15 Belarus
 
11.12.19
14:18
(14)    HTTPСоединение.ОтправитьДляОбработки(запросPOST, ФайлОтвета);  отрабатывает, в ошибку не уходит, файл ответа пуст
16 Ёпрст
 
11.12.19
14:23
(15)

HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Cообщить(HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8),СтатусСообщения.Внимание);
17 Ёпрст
 
11.12.19
14:24
Ну и HTTPОтвет.КодСостояния = ?
18 Belarus
 
11.12.19
14:25
В файл пришел ответ: {"Message":"Authorization has been denied for this request."}
19 Ёпрст
 
11.12.19
14:25
(18) делай выводы..
20 Ёпрст
 
11.12.19
14:27
и если делаешь в заголовках
"application/x-www-form-urlencoded"
то хотя бы строку запроса кодируй:

Стр= КодироватьСтроку(Стр, СпособКодированияСтроки.КодировкаURL);
21 Belarus
 
11.12.19
14:54
сейчас немного другая проблема:

запрос уходит на :

HTTPСоединение = Новый HTTPСоединение("api.express-pay.by/",, "логин", "пароль");

а вот в файле ответа адрес без api. :

https://express-pay.by/v1/invoices?token=%7B4a........404%7D
22 Ёпрст
 
11.12.19
14:57
(21) выкини / оттуда
23 dmpl
 
11.12.19
14:58
(21) Ну значит надо новое соединение создавать.
24 Belarus
 
11.12.19
14:59
(22) откуда?
25 Ёпрст
 
11.12.19
15:07
(24) by/"
26 Belarus
 
11.12.19
15:14
(25) так api нужно
27 Belarus
 
11.12.19
15:15
(23) зачем?
28 Ёпрст
 
11.12.19
15:16
(26) чего нужно ?
29 dmpl
 
11.12.19
15:17
(27) Адрес сервера же другой - значит и соединение должно быть другое.
30 Belarus
 
11.12.19
15:23
запрос идет сюда:

    HTTPСоединение = Новый HTTPСоединение("api.express-pay.by");  
    //создаем запрос данных методом POST
    запросPOST = Новый HTTPЗапрос("/v1/invoices?token={"+Token+"}"); // Адрес ресурса
    
    //обязательный заголовок тела запроса
    запросPOST.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded");
    //Здесь задаем текст нашей отформатированной строки + задаем формат сроки
    запросPOST.УстановитьТелоИзСтроки(Стр, "utf-8", ИспользованиеByteOrderMark.НеИспользовать);

В файле ответа:

<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="https://express-pay.by/v1/invoices?token=%7B4a...........404%7D">here</a></body>;

т.е. https://express-pay.by - api нет
31 Ёпрст
 
11.12.19
15:24
(30) и че ? Ну нет и нет, там можно любой мусор в ответ пихапть
32 Ёпрст
 
11.12.19
15:25
и там всего лишь говорится, что свой счет можешь посмотреть по ссылке ниже
33 Ёпрст
 
11.12.19
15:25
причем тут сервис по api ?
34 Ёпрст
 
11.12.19
15:26
могли бы и такой ответ вернуть

<body><h1>Object Moved</h1>This document may be found <a HREF="https://vasidoma.net/invoices?token=%7B4a...........404%7D">here</a></body>;;
35 Ёпрст
 
11.12.19
15:26
Не догоняешь, не ?
36 Belarus
 
11.12.19
15:31
(35) нет... ок... ответ мусор... но тогда не работает
37 Ёпрст
 
11.12.19
15:32
(36) почему не работает ?
Что запросил, то и в ответ пришло
38 Ёпрст
 
11.12.19
15:33
Там же в ответ дан ясный - объект перемещен, можешь посмотреть его по ссылке ....
39 Ёпрст
 
11.12.19
15:34
тем более, сам же задаешь :
"ReturnInvoiceUrl=1";
40 Belarus
 
11.12.19
15:47
) Смешно вам
41 dmpl
 
11.12.19
16:00
(36) Код, наверняка, 302. Тогда смотри заголовок ответа Location, ЕМНИП.
42 Ёпрст
 
11.12.19
16:55
и..приведи полный текст что ле..
43 Ёпрст
 
11.12.19
16:55
кода своего
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.