Страница 1 из 1

Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Чт дек 03, 2020 9:06 pm
Vladimir Kuzmin
Собственно пробую пример https://nsoft-s.com/mcserverhelp/index.html?integrationapiexample1crest.htm и получаю в логах
Ошибка #0102: попытка подключения неизвестного приложения, IP: "10.15.хх.хх", Data: "POST /API/?data= HTTP/1.1"
Подскажите куда копать?

Re: Ошибка #0102 при запросе из 1с

СообщениеДобавлено: Чт дек 03, 2020 9:59 pm
Алексей Пикуров
Здравствуйте. Что возвращается в 1с?

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Чт дек 03, 2020 10:04 pm
Vladimir Kuzmin
Ничего.

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Чт дек 03, 2020 10:05 pm
Алексей Пикуров
Покажите свой код, пожалуйста.

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Чт дек 03, 2020 10:06 pm
Vladimir Kuzmin
Вызывается исключение и Ошибка при отправке запроса: {ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(64)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки): Ошибка работы с Интернет: Server returned nothing (no headers, no data)

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Чт дек 03, 2020 10:07 pm
Алексей Пикуров
Текст программы.

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Чт дек 03, 2020 10:07 pm
Vladimir Kuzmin
Код: Выделить всё
Сервер = "хх.хх.40.ххх";
  Порт = 80;
  Ресурс = "/API/?data=";
  Ключ = "ывывывфыв58";
  UINПолучателя = "4";
   
  ТекстСообщения = "Тестовое сообщение от " + ТекущаяДата() + Символы.ВК + Символы.ПС + "строка 2";

  СтруктураДанных = Новый Структура;
  СтруктураДанных.Вставить("cmd", "0002");
  СтруктураДанных.Вставить("UserFrom", "0");
  СтруктураДанных.Вставить("UserTo", UINПолучателя);
  СтруктураДанных.Вставить("Msg", ТекстСообщения);
  СтруктураДанных.Вставить("APIStype", "mcrest");
  СтруктураДанных.Вставить("ServerKey", Ключ);
   
  ЗаписьJSON = Новый ЗаписьJSON;
  ЗаписьJSON.УстановитьСтроку();
  ЗаписатьJSON(ЗаписьJSON, СтруктураДанных);
  СтрокаJSON = ЗаписьJSON.Закрыть(); 
   
    Попытка
        HTTP = Новый HTTPСоединение(Сервер,Порт,,,,30);
        HTTPЗапрос = Новый HTTPЗапрос(Ресурс);
        HTTPЗапрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded");
        HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
        Результат  = HTTP.ОтправитьДляОбработки(HTTPЗапрос);
        Если Результат.КодСостояния <> 200 Тогда
            Сообщить("Ошибка при отправке запроса: " + Результат.КодСостояния);
        КонецЕсли;
    Исключение
        Сообщить("Ошибка при отправке запроса: " + ОписаниеОшибки());
    КонецПопытки;

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Чт дек 03, 2020 10:08 pm
Алексей Пикуров
Ок, завтра посмотрю. Вы 8.2.3 версию используете?

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Чт дек 03, 2020 10:11 pm
Vladimir Kuzmin
1С:Предприятие 8.3 (8.3.15.1656)
"Управление торговым предприятием для Украины", редакция 1.2. (1.2.57.1)

Есть возможность посмотреть детальный лог?

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Пт дек 04, 2020 12:04 am
Алексей Пикуров
Я про сервер MyChat спросил :) Извините, неточно выразился.

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Пт дек 04, 2020 12:05 am
Алексей Пикуров
Подробных логов на сервере пока нет.

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Пт дек 04, 2020 7:31 pm
Vladimir Kuzmin
MyChat 8.2.2

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Сб дек 05, 2020 4:34 pm
Алексей Пикуров
Я так понимаю, ваш сервер MyChat использует HTTPS-сертификат.

Поэтому код будет таким:
Код: Выделить всё
  Попытка
       ssl = Новый ЗащищенноеСоединениеOpenSSL(
              Новый СертификатКлиентаWindows(
              СпособВыбораСертификатаWindows.Выбирать),
              Новый СертификатыУдостоверяющихЦентровWindows());
        HTTP = Новый HTTPСоединение(Сервер,Порт,,,,30,ssl);
        HTTPЗапрос = Новый HTTPЗапрос(Ресурс);
        HTTPЗапрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded");
        HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
        Результат  = HTTP.ОтправитьДляОбработки(HTTPЗапрос);
        Если Результат.КодСостояния <> 200 Тогда
            Сообщить("Ошибка при отправке запроса: " + Результат.КодСостояния);
        КонецЕсли;
    Исключение
        Сообщить("Ошибка при отправке запроса: " + ОписаниеОшибки());
    КонецПопытки;

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Сб дек 05, 2020 4:57 pm
Алексей Пикуров
Дополнили пример для справки, момент с HTTPS важен.

Кстати, сообщение про ошибку в 1C есть, если запускать его как управляемое приложение:
1с-rest-error.png
Ошибка работы с REST в 1С, запущенным как управляемое приложение
1с-rest-error.png (8.86 КБ) Просмотров: 5235

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Вс дек 06, 2020 8:33 pm
Vladimir Kuzmin
Ошибка при отправке запроса: {ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(72)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки): Ошибка работы с Интернет: Ошибка инициализации SSL-соединения

SSL нее используется. Считаю что проблема в моей версии 1С. Уже сталкивался что функции работы с JSON работают не корректно. Завтра-послезавтра попробую поправить код.

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Вс янв 10, 2021 5:31 pm
Vladimir Kuzmin
Проблема решена. Функционал MyChat и 1С отработали нормально. Проблема была в пробросе портов на Микротике, из двух практически идентичных строк НАТа одна не работала.

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Вс янв 10, 2021 5:38 pm
Алексей Пикуров
Аллилуйя :) Спасибо, что отписали, рад, что у вас всё получилось.

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Вс янв 10, 2021 5:48 pm
Vladimir Kuzmin
1C арендованная в облаке. Закрыто все по самое немогу. Ни норм.тунель поднять, ни ВЕБ-сервис запустить, ни ocx прикрутить для работы с сокетами. А желательно получать уведомления от Mychat в 1С, что в API не реализовано. В общем пока голову ломаю...

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Вс янв 10, 2021 5:49 pm
Алексей Пикуров
А как постучать в 1С ? Она может поймать REST-запрос?

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Пт май 06, 2022 11:08 am
Vasec666
Здравствуйте!
У меня такая же ошибка. Версия платформы 8.3.18.1289. Конфигурация самописная. Код ровно такой же. SSL не используем. Версия MyChat 5.7.0.3
Код: Выделить всё

&НаСервере
Процедура ОправитьТестовоеСообщениеНаСервере()
   
   Сервер = "192.168.3.8";
   Порт = 2004;
   Ресурс = "/API/?data=";
   //Ключ = "iddqd";

   ТекстСообщения= "Тестовое сообщение";
   
   СтруктураДанных = Новый Структура;
   СтруктураДанных.Вставить("cmd", "0002");
   СтруктураДанных.Вставить("UserFrom", "147");
   СтруктураДанных.Вставить("UserTo", "7");
   СтруктураДанных.Вставить("Msg", ТекстСообщения);
   СтруктураДанных.Вставить("APIStype", "mcrest");
   СтруктураДанных.Вставить("ServerKey", Ключ);
   
   ЗаписьJSON = Новый ЗаписьJSON;
   ЗаписьJSON.УстановитьСтроку();
   ЗаписатьJSON(ЗаписьJSON, СтруктураДанных);
   СтрокаJSON = ЗаписьJSON.Закрыть(); 
   
     Попытка
        HTTP = Новый HTTPСоединение(Сервер,Порт,,,,30);
        HTTPЗапрос = Новый HTTPЗапрос(Ресурс);
        HTTPЗапрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded");
        HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
        Результат  = HTTP.ОтправитьДляОбработки(HTTPЗапрос);
        Если Результат.КодСостояния <> 200 Тогда
            Сообщить("Ошибка при отправке запроса: " + Результат.КодСостояния);
        КонецЕсли;
    Исключение
        Сообщить("Ошибка при отправке запроса: " + ОписаниеОшибки());
    КонецПопытки;
   
КонецПроцедуры

&НаКлиенте
Процедура ОправитьТестовоеСообщение(Команда)
   ОправитьТестовоеСообщениеНаСервере();
КонецПроцедуры



Текст ошибки:
Ошибка при отправке запроса: {ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(33)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки): Ошибка работы с Интернет: Server returned nothing (no headers, no data)
Не могу разобраться в чем дело. Подскажете?

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Пт май 06, 2022 11:13 am
Алексей Пикуров
Подскажу. Используйте последнюю версию MyChat. 8.14.5.

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Пт май 06, 2022 11:56 am
Vasec666
Обновили до последней версии - все так же.

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Пт май 06, 2022 12:01 pm
Алексей Пикуров
В вашем скрипте вы прописали 2004 порт и закомментировали ключ доступа к Integration API.

Однако, Get-запросы вы должны отправлять не на ядро сервера (TCP 2004), а на порт веб-сервера. Точный номер порта можете посмотреть в ваших настройках, но обычно это 80-й порт.

Для начала откройте ваш сервер в браузере http://192.168.3.8

В примере из справки также указан 80-й порт.

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Пт май 06, 2022 12:09 pm
Vasec666
Да, спасибо, работает! На старой версии перебирал все порты. На 5 версии на 80 порту выдавало ошибку 404.

Re: Ошибка #0102 при REST запросе из 1с

СообщениеДобавлено: Пт май 06, 2022 12:10 pm
Алексей Пикуров
Пожалуйста. Всегда используйте последнюю версию, на 5-й версии этой технологии ещё не было.