7.7 Работа с веб-сервисом по XMLHTTP

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем Novikovis, 20 окт 2016.

  1. TopicStarter Overlay
    Novikovis
    Offline

    Novikovis

    Регистрация:
    23 май 2011
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Добрый день!
    Прошу помощи у знающих
    Задача такая, есть сайт emex.ru и есть база ТиС, нужно настроить отправку данных из ТиС на сайт, по XMLHTTP.
    Знаю что у эмекса есть сервис http://ws.emex.ru/EmExInmotion.asmx/TestConnect
    Если из браузера обратиться так: http://ws.emex.ru/EmExInmotion.asmx/TestConnect?s=123
    то получаю ответ, а из 1с получаю ответ "500: Internal Server Error, Request format is invalid: text/html, UTF8."
    Может кто подскажет в какую сторону копать?
    Что я делаю не так?
    Вот код обработки
    Код:
    Сформировать()
    MessageExchange= "
    |<?xml version=""1.0"" encoding=""utf-8""?>
    |<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
    | <soap:Body>
    |  <TestConnect xmlns=""http://tempuri.org/"">
    |   <s>string</s>
    |</TestConnect>
    |</soap:Body>
    |</soap:Envelope>";  
    xmlHttp = СоздатьОбъект("MSXML2.XMLHTTP");
            xmlHttp.OPEN("POST", "http://ws.emex.ru/EmExInmotion.asmx/TestConnect", 0);
            xmlHttp.setRequestHeader("User-Agent", "1C Soap toolkit");
            xmlHttp.setRequestHeader("Content-Type","text/xml, UTF8");
            xmlHttp.setRequestHeader("Content-Length", СтрДлина(MessageExchange));
            xmlHttp.setRequestHeader("SOAPAction", "http://tempuri.org/TestConnect");
            xmlHttp.SEND(MessageExchange);
            Если xmlHttp.status = 200 Тогда
                Результат = "" + xmlHttp.responseText
            Иначе
                Результат = "" + xmlHttp.status + ": " + xmlHttp.StatusText;
            КонецЕсли;
            Сообщить(Результат);
             Сообщить(xmlHttp.responseText);
    КонецПроцедуры
    Последнее редактирование: 20 окт 2016
  2. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    478
    Симпатии:
    82
    Баллы:
    54
    Здравствуйте.
    Насколько я знаю, 7.7 не умеет работать в кодировке UTF-8. Вам наверное придется перед отправкой текст конвертировать. В сети есть готовые наборы функций для перевода из одной кодировки в другую.
  3. TopicStarter Overlay
    Novikovis
    Offline

    Novikovis

    Регистрация:
    23 май 2011
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Подправил немного функцию и ошибка кодировки исчезла, теперь получаю ошибку 500 Internal Server Error, но не понимаю почему.
    Код:
    Процедура Сформировать()
    MessageExchange = "
    |<?xml version=""1.0"" encoding=""utf-8""?>
    |<string xmlns=""http://www.w3.org/2001/XMLSchema/"">string</string>";
    xmlHttp = СоздатьОбъект("Microsoft.XMLHTTP");
           xmlHttp.OPEN("POST", "http://ws.emex.ru/EmExService.asmx/TestConnect?s=sdf", 0);
            xmlHttp.SetRequestHeader("Accept-Language", "ru");
            xmlHttp.SetRequestHeader("Accept-Charset","utf-8");
            xmlHttp.setRequestHeader("Content-Language", "ru");
            xmlHttp.setRequestHeader("Content-Charset", "utf-8");
            xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
            xmlHttp.setRequestHeader("Content-Length", СтрДлина(MessageExchange));
            xmlHttp.SEND(MessageExchange);
            Если xmlHttp.status = 200 Тогда
                Результат = "" + xmlHttp.responseText
            Иначе
                Результат = "" + xmlHttp.status + ": " + xmlHttp.StatusText;
            КонецЕсли;  
            Форма.ТЗапрос.Заголовок(MessageExchange);
            Форма.ТЗапрос1.Заголовок(xmlHttp.getAllResponseHeaders());
            Сообщить(Результат);
            Сообщить(xmlHttp.status);
    КонецПроцедуры
  4. TopicStarter Overlay
    Novikovis
    Offline

    Novikovis

    Регистрация:
    23 май 2011
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Что, больше никто запросы http не шлет из семерки?
  5. TopicStarter Overlay
    Novikovis
    Offline

    Novikovis

    Регистрация:
    23 май 2011
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Если кому-то поможет, сделал так, ответ получаю, остается только переварить приходящий xml.
    Код:
    Параметр = ТСтрока;
    запрос = "s="+Параметр;
    
    WinHttp=СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
            WinHttp.Option(2,"utf-8");                                                                   
            WinHttp.Open("POST","http://ws.emex.ru/EmExService.asmx/TestConnect", "0");
            WinHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            WinHttp.Send(запрос);
            Ответ = WinHttp.ResponseText;
            Форма.ТОтвет.Заголовок(Ответ);
    Кто знает как это сделать? Получаю ответ в таком виде
    Код:
    <?xml version="1.0" encoding="utf-8"?>
    <string xmlns="http://tempuri.org/">Запрос с адреса 95.65.190.95. Тестовая строка: 123123    </string>
    Как отсюда получить строку?
  6. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    478
    Симпатии:
    82
    Баллы:
    54
    Вам нужно получить 123123 или то, что между тэгами string?
  7. TopicStarter Overlay
    Novikovis
    Offline

    Novikovis

    Регистрация:
    23 май 2011
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Желательно получить весь ответ "
    Запрос с адреса 95.65.190.95. Тестовая строка: 123123"
    Но если подскажите как можно получить 123123, то буду признателен за помощь!
  8. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    478
    Симпатии:
    82
    Баллы:
    54
    А в чем сложность? У Вас есть постоянные тэги, по ним можно вырезать нужное. Примерно так у меня получилось в тестовой обработке:

    Код:
    Процедура Сформировать()
        ПозНач = Найти(СтрТекст,"<string");
        СтрТекст = Сред(СтрТекст,ПозНач,СтрДлина(СтрТекст)-ПозНач);
        ПозНач = Найти(СтрТекст,">")+1;
        СтрТекст = Сред(СтрТекст,ПозНач,СтрДлина(СтрТекст)-ПозНач);
        ПозКон = Найти(СтрТекст,"</str")-1;
        СтрТекст = Лев(СтрТекст,ПозКон);
    
    КонецПроцедуры
    
    Процедура ПриОткрытии()
          СтрТекст = "<?xml version=""1.0"" encoding=""utf-8""?>
                |<string xmlns=""http://tempuri.org/"">Запрос с адреса 95.65.190.95. Тестовая строка: 123123    </string>";
    КонецПроцедуры    
    Novikovis нравится это.
  9. TopicStarter Overlay
    Novikovis
    Offline

    Novikovis

    Регистрация:
    23 май 2011
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1

    Катюфка, Сложность в том что я на 1с не кодил никогда, делаю для себя, по этому сам (
    Спасибо за помощь!
  10. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    478
    Симпатии:
    82
    Баллы:
    54
    То же самое можно чуть проще сделать, ведь сначала мы оставляем только правую часть текста. Тогда будет вот так:
    Код:
    Процедура Сформировать()
        ПозНач = Найти(СтрТекст,"<string");
        СтрТекст = Прав(СтрТекст,СтрДлина(СтрТекст)-ПозНач);
        ПозНач = Найти(СтрТекст,">");
        СтрТекст = Прав(СтрТекст,СтрДлина(СтрТекст)-ПозНач);
        ПозКон = Найти(СтрТекст,"</str")-1;
        СтрТекст = Лев(СтрТекст,ПозКон);
    
    КонецПроцедуры
    

Поделиться этой страницей