Роботы, плагины и скрипты к чату MyChat. Разработка альтернативных клиентов и различных утилит. Технические вопросы по программированию, замечания и предложения по развитию API
Аватара пользователя
Vladimir Kuzmin
Собственно пробую пример https://nsoft-s.com/mcserverhelp/index.html?integrationapiexample1crest.htm и получаю в логах
Ошибка #0102: попытка подключения неизвестного приложения, IP: "10.15.хх.хх", Data: "POST /API/?data= HTTP/1.1"
Подскажите куда копать?
Аватара пользователя
Алексей Пикуров
Здравствуйте. Что возвращается в 1с?
Аватара пользователя
Алексей Пикуров
Покажите свой код, пожалуйста.
Аватара пользователя
Vladimir Kuzmin
Вызывается исключение и Ошибка при отправке запроса: {ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(64)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки): Ошибка работы с Интернет: Server returned nothing (no headers, no data)
Аватара пользователя
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 Тогда
            Сообщить("Ошибка при отправке запроса: " + Результат.КодСостояния);
        КонецЕсли;
    Исключение
        Сообщить("Ошибка при отправке запроса: " + ОписаниеОшибки());
    КонецПопытки;
Аватара пользователя
Алексей Пикуров
Ок, завтра посмотрю. Вы 8.2.3 версию используете?
Аватара пользователя
Vladimir Kuzmin
1С:Предприятие 8.3 (8.3.15.1656)
"Управление торговым предприятием для Украины", редакция 1.2. (1.2.57.1)

Есть возможность посмотреть детальный лог?
Аватара пользователя
Алексей Пикуров
Я про сервер MyChat спросил :) Извините, неточно выразился.
Аватара пользователя
Алексей Пикуров
Подробных логов на сервере пока нет.
Аватара пользователя
Алексей Пикуров
Я так понимаю, ваш сервер 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 Тогда
            Сообщить("Ошибка при отправке запроса: " + Результат.КодСостояния);
        КонецЕсли;
    Исключение
        Сообщить("Ошибка при отправке запроса: " + ОписаниеОшибки());
    КонецПопытки;
Аватара пользователя
Алексей Пикуров
Дополнили пример для справки, момент с HTTPS важен.

Кстати, сообщение про ошибку в 1C есть, если запускать его как управляемое приложение:
1с-rest-error.png
Ошибка работы с REST в 1С, запущенным как управляемое приложение
1с-rest-error.png (8.86 КБ) Просмотров: 627
Аватара пользователя
Vladimir Kuzmin
Ошибка при отправке запроса: {ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(72)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки): Ошибка работы с Интернет: Ошибка инициализации SSL-соединения

SSL нее используется. Считаю что проблема в моей версии 1С. Уже сталкивался что функции работы с JSON работают не корректно. Завтра-послезавтра попробую поправить код.
Аватара пользователя
Vladimir Kuzmin
Проблема решена. Функционал MyChat и 1С отработали нормально. Проблема была в пробросе портов на Микротике, из двух практически идентичных строк НАТа одна не работала.
Аватара пользователя
Алексей Пикуров
Аллилуйя :) Спасибо, что отписали, рад, что у вас всё получилось.
Аватара пользователя
Vladimir Kuzmin
1C арендованная в облаке. Закрыто все по самое немогу. Ни норм.тунель поднять, ни ВЕБ-сервис запустить, ни ocx прикрутить для работы с сокетами. А желательно получать уведомления от Mychat в 1С, что в API не реализовано. В общем пока голову ломаю...
Аватара пользователя
Алексей Пикуров
А как постучать в 1С ? Она может поймать REST-запрос?