Имя: Пароль:
1C
1С v8
Асинхронный HTTP POST запрос на айпи адрес - несколько запросов, несколько ответов
0 Азат
 
16.08.19
15:25
Собственно, суть такая:
на эквайринговый терминал необходимо отправить строку (есть айпи и порт).
Строка, описывающая транзакцию кодируется в 16-ричный вид и отправляется кусками по 32 знака.

После чего терминал возвращает ответ, который также надо собрать в строку, распарсить и перевести в вид текста...

Не пойму, как подступиться к задаче.
Начал типа такого:

ОбъектHTTP = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
ОбъектHTTP.Option(2,"utf-8");
ОбъектHTTP.Open("POST", "http://192.168.6.66:666";, 1);
ОбъектHTTP.SetTimeouts(30000, 30000, 30000, 30000);
ОбъектHTTP.Send("0400010000007f0000007b3c3f786d6c");
ОбъектHTTP.Send("2076657273696f6e3d22312e30222065");

Так вот =уже второй сенд начинает ругаться, что не получены данные для обработки первого запроса, а я уже второй шлю. Всего запросов от 5 до 15 в зависимости от типа транзакции
Вопрос = как передать несколько команд, на которые получить ответ.
Если меняю режим с асинхронного на синхронный, сразу отваливается по таймауту.

Всем спасибо и извиняюсь за сумбур
1 Garykom
 
гуру
16.08.19
15:27
ОбъектHTTP2 = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
2 Garykom
 
гуру
16.08.19
15:27
И это в 8-ке есть HTTPСоединение
3 Широкий
 
16.08.19
15:33
Предположу что должно быть типа ид сессии.. И признак окончания передачи.. иначе как терминал поймет что все?
4 Азат
 
16.08.19
15:33
(2) я в курсе, а где там ключ "асинхронности" запросов?
5 Широкий
 
16.08.19
15:33
Хоят отправка кусками - выглядит бредово
6 Йохохо
 
16.08.19
15:34
7 Азат
 
16.08.19
15:34
(3) а, извиняюсь, забыл указать - первые 8 знаков строки - длина сообщения. по которым терминал поймет, сколько передано
(6) это случайная копипаста
8 Широкий
 
16.08.19
15:35
(7) Для получаетеля синхронный-асинхронный запрос мононпенисно.. Поэтому не парся.. Засад в чем то другом
9 Широкий
 
16.08.19
15:37
+8 и делай встроенным объектом. Его уже неплохо допилили
10 Йохохо
 
16.08.19
15:38
(4) у тебя там 1
11 Азат
 
16.08.19
15:41
(10) у меня я знаю, я же спрашивал про HTTPСоединение, у него в настройках не нашел такого.

(8) поставщик оборудования говорит, что это критичный момент
12 Йохохо
 
16.08.19
15:42
(11) может булево туда, я хз
13 Garykom
 
гуру
16.08.19
15:46
ОбъектHTTP.Send("0400010000007f0000007b3c3f786d6c");
// вот тут где получение и обработка ответа?
ОбъектHTTP.Send("2076657273696f6e3d22312e30222065");
14 Йохохо
 
16.08.19
15:46
и зачем таймаут при асинхронном запросе? надо проверять онреспонс*
The WinHttpRequest object has these events.
Event     Description
OnError     Occurs when there is a run-time error in the application.
OnResponseDataAvailable     Occurs when data is available from the response.
OnResponseFinished     Occurs when the response data is complete.
OnResponseStart     Occurs when the response data starts to be received.
15 Азат
 
16.08.19
16:16
(14) 1С этих событий не перехватит, поэтому я просто через ОбработчикОжидания ловлю ответ
16 Азат
 
19.08.19
09:13
(1) попробовал, не взлетело
(12) попробовал, не взлетело
встроенным объектом даже на 8.3.14 не взлетело тоже

мож еще какие идеи есть по отправке?
Ошибка? Это не ошибка, это системная функция.