Имя: Пароль:
1C
1С v8
404 ошибка при http запросе
,
0 Melcor
 
23.09.20
15:24
Доброго дня.
Пытаюсь сделать POST запрос:
    АдресСервера = "micropay.e-ofd.ru";
    Ресурс = "/0101010101010101/Transaction";
    ИмяПользователя = "11111111111";
    Пароль = "12121212121212121212";
    
    СтрокаАвторизации = ПолучитьBase64СтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзСтроки(""+ИмяПользователя+":"+Пароль,КодировкаТекста.UTF8,Ложь));    
    
    SSL = Новый ЗащищенноеСоединениеOpenSSL;
    
    Соединение = Новый HTTPСоединение(АдресСервера,2158,,,,,SSL);
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    Заголовки.Вставить("Authorization", "Basic "+СтрокаАвторизации);
    
    Запрос = Новый HTTPЗапрос(Ресурс,Заголовки);
    Запрос.УстановитьТелоИзСтроки(СтрокаJS);
    
    
    Ответ = Соединение.Получить(Запрос);

но выходит ошибка {"kktNumber":"0101010101010101","Error":{"ErrorCode":404,"ErrorMessage":"Нет такого ресурса"}}

когда делаю в Postman, то все прекрасно отрабатывает:
https://micropay.e-ofd.ru:2158/0101010101010101/Transaction

Не пойму в чем дело.
1 acht
 
23.09.20
15:30
Берешь фиддлер, смотришь, сравниваешь
2 Melcor
 
23.09.20
15:32
(1) Спасибо за мысль, попробую разобраться
3 Melcor
 
23.09.20
15:35
Есть ощущение, что проблема в порте, т.к. другие запросы где порт не указываю, работают отлично
4 Melcor
 
23.09.20
15:56
Глянул в фидлере, и когда делаю запрос через 1С, то почему-то нет передаваемых заголовков (
5 Melcor
 
23.09.20
15:59
и через 1с есть в хедере заголовок Proxy-Authorization: NTLM
Не совсем уверен, что он там должен быть
Но не понятно почему он есть
6 sitex
 
naïve
23.09.20
16:00
(4) А смотри как ты делаешь в просто в браузере . зачем тебе смотреть как в 1С.
7 sitex
 
naïve
23.09.20
16:01
(0) Тебе же не шлет ответ 401. ошибка авторизации. Значит дело в Запрос
8 Melcor
 
23.09.20
16:02
(6) я смотрю в постмане
вот из постмана хедер
CONNECT micropay.e-ofd.ru:2158 HTTP/1.1
Content-Type: application/json
User-Agent: PostmanRuntime/7.26.5
Accept: */*
Cache-Control: no-cache
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
host: micropay.e-ofd.ru:2158

а вот из 1с


CONNECT micropay.e-ofd.ru:2158 HTTP/1.1
Host: micropay.e-ofd.ru:2158
Proxy-Authorization: NTLM TlRMTVNTUAAAAAAB7IIogUABQArAAAAAwADACgAAAKAGFKAA5JTkVM
User-Agent: 1C+Enterprise/8.3
Connection: Keep-Alive
9 Melcor
 
23.09.20
16:02
(7) шлет 404
10 sitex
 
naïve
23.09.20
16:10
(8) Покажи заголовки postmane. (ест-но что связанно авторизацией замени ******* )
11 Melcor
 
23.09.20
16:11
POST /0101010101010101/Transaction HTTP/1.1
Host: micropay.e-ofd.ru:2158
Authorization: Basic NzcyMTk1NjpFMjMyOTOS03QTBQ2RkMtNDNi04I4OTg5QjI=
Content-Type: application/json
cache-control: no-cache
Postman-Token: 1585-e6-9256-ec47e133d
12 Ёпрст
 
23.09.20
16:14
(11) и ?
СтрокаАторизации  у тя точно "NzcyMTk1NjpFMjMyOTOS03QTBQ2RkMtNDNi04I4OTg5QjI=" в 1с-ине выходит ?
13 polosov
 
23.09.20
16:15
(0)  Ресурс = "/0101010101010101/Transaction";
Попробуй слеш поставить в конце ресурса.
Т.е.  Ресурс = "/0101010101010101/Transaction/";
14 arsik
 
гуру
23.09.20
16:18
Сделай так.
Новый HTTPСоединение(АдресСервера,2158,,,Новый ИнтернетПрокси(Ложь),,SSL);
15 Melcor
 
23.09.20
16:21
(13) так не работает
(14) та же ошибка
16 Melcor
 
23.09.20
16:23
(12) Да, точно
17 arsik
 
гуру
23.09.20
16:24
(15) Странно.
Proxy-Authorization: NTLM TlRMTVNTUAAAAAAB7IIogUABQArAAAAAwADACgAAAKAGFKAA5JTkVM - указывает, что он через прокси пытается пролезть.
18 sitex
 
naïve
23.09.20
16:25
У него авторизация  API-MicroPay-v2_19.doc читал там что написано ?
19 sitex
 
naïve
23.09.20
16:26
+(18) У него вроде как авторизация проходит.
20 sitex
 
naïve
23.09.20
16:27
(0) Ответ -->>> Пример сообщения от ККТ об ошибке при попытке хоста считать несуществующий документ веб-интерфейса ККТ.
21 Melcor
 
23.09.20
16:35
(20) Но почему через постман проходит оплата, а через 1С нет, хотя запросы одинаковые
22 sitex
 
naïve
23.09.20
16:38
(21) Может где пробелы закрались в СтрокаJS.
23 Ёпрст
 
23.09.20
16:38
(0) а почему ты в ноль пишешь про POST , а сам делаешь GET ?
24 Melcor
 
23.09.20
16:40
(23) пост же Запрос.УстановитьТелоИзСтроки(СтрокаJS);
25 Ёпрст
 
23.09.20
16:41
(24) неа...

Соединение.Получить(Запрос); //это GET

Соедиенние.ОтправитьДляОбработки (Запрос) //'nj PОST
26 polosov
 
23.09.20
16:41
(24) Что у тебя в СтрокаJS?
Я с твоим кодом, но с левым паролем и именем пользователя получаю 401.
27 sitex
 
naïve
23.09.20
16:42
(25) +
28 Melcor
 
23.09.20
16:42
(23) На сколько я знаю отличие пост от гет только в наличие тела запроса, или я что-то упустил? Другие запросы отлично работают
29 Melcor
 
23.09.20
16:43
(25) А как тогда правильно пост запрос отправить?
30 Ёпрст
 
23.09.20
16:45
(29) замени получить на ОтправитьДляОбработки..хотя, не спасёт, по идее
31 Melcor
 
23.09.20
16:45
(26)
{
"bill": {
  "userPass": "29",
  "operationType": "1",
  "ecashTotalSum": "1",
  "buyerAddress": "79009009898",
  "flagsSNO": "1",
  "items": [
   {
    "name": "Текстиль женский/Пальто",
    "price": "1",
    "quantity": "1",
    "VATrate": "1"
   }
  ]
}
}
32 Ёпрст
 
23.09.20
16:45
У тя какая то хня с авторизацией. Где-то еще должен задать логин и пароль на этом сайте
33 Ёпрст
 
23.09.20
16:46
Точно он в заголовках передается, а не параметром в строку соединения, типа ?password=васяи т.п ?
34 Melcor
 
23.09.20
16:48
(33) ну судя по мануалу, да
35 Melcor
 
23.09.20
16:52
(30) Ты мой золотой! ОтправитьДляОбработки работает, на куче ресурсов до этого через Получить отрабатывало, а сдесь промашка. Спасибо огромное!
36 Ёпрст
 
23.09.20
16:54
(35) на многих сайтах стоит заглушка для этого, и там да, пофик что прилетело, пост или гет
37 palsergeich
 
23.09.20
16:59
(28) В Гет - может быть тело. Раньше было нельзя. сейчас иожно.
Post и Get  - это разные обработчики как минимум на стороне принимающего сервиса.
Обработчика get просто может и не быть