Имя: Пароль:
1C
1С v8
Как отправить XML на внешний веб-сервис?
, ,
0 Shaman1C
 
20.03.17
14:18
По определенному событию, данные собираются в 1С и должны в формате XML уйти на внешний веб-сервис. Не файл XML, а просто XML.
Я могу создать XDTO-пакеты, чтобы получить XML. Но как его отправить на веб-сервис внешний я не понимаю, инфы в инете совсем нет.
Подскажите как это сделать? киньте пример кода или реально толковые ссылки а не просто запросы с гугла и т.п.
1 DrShad
 
20.03.17
14:21
POST, GET запрос
2 DrShad
 
20.03.17
14:27
да и сам XML не обязательно в файл сохранять
3 Shaman1C
 
20.03.17
14:28
Никто не знает чтоли?
4 Джинн
 
20.03.17
14:33
(3) В чем проблема переслать файл?
5 FIXXXL
 
20.03.17
14:35
ДанныеВыгрузки = Новый ЗаписьXML
6 Shaman1C
 
20.03.17
14:57
Странно что никто не знает...
7 DrShad
 
20.03.17
14:58
а что мы должны еще знать? тебе уже все рассказали
8 mehfk
 
20.03.17
15:01
(6) Зелепукин Петр Сергеевич из станицы Залупянская Краснодарского края знает.
9 Юрий Лазаренко
 
20.03.17
15:10
ИмяВебСервиса = "https://domain.ru/basename/ws/webservicename.1cws?wsdl";;
    ПользовательВебСервиса = "<ЛогинПользователя>";
    ПарольВебСервиса = "ПарольПользователя";
    
    WS_Определение = Новый WSОпределения(ИмяВебСервиса, ПользовательВебСервиса, ПарольВебСервиса);

    Прокси = Новый WSПрокси(WS_Определение,
            "http://www.domain.ru/webservice";,
            "ServiseName",
            "ServiseNameSoap");
            
    Прокси.Пользователь = ПользовательВебСервиса;
    Прокси.Пароль        = ПарольВебСервиса;

    МойXML = "<Тут должен быть текст твоего XML>";
    
    Результат = Прокси.ИмяМетодаВебСервиса(МойXML);
10 Shaman1C
 
20.03.17
18:08
Попытка
        WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
        WinHttp.SetTimeouts(60000,60000,60000,60000); //таймауты в милисекундах, выставляю 1 минуту
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    URL       = "https://gdfgdfgdfgdfgdf";;
    Параметры = "xml=" + СтрокаXML;
    Попытка
        WinHttp.Open("POST", URL, 0);
        WinHttp.SetCredentials("dfgdfgdfgdf","sdfsdfsd",0);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;

    WinHttp.SetRequestHeader("Content-type", "application/x-www-form-urlencoded");
    Попытка
        WinHttp.Send(Параметры);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    WinHttp.WaitForResponse();


Так прокатит или нет?
11 Юрий Лазаренко
 
20.03.17
18:14
(10) Так надо на веб-сервис отправить, или на http-сервис?
12 Юрий Лазаренко
 
20.03.17
18:20
(10) Если на http-сервис, то так не прокатит, потому что xml в параметре запроса

Параметры = "xml=" + СтрокаXML;

не уйдет и обрежется на служебных символах.
13 HomoAlbus
 
20.03.17
18:26
Сначала получаешь определение сервиса, на который тебе надо отправить данные. Потом создаешь прокси. Фабрикой сервиса делаешь объекты, которые будешь отправлять и все.
14 Shaman1C
 
21.03.17
09:28
(11) на веб-сервис надо данные скидывать.
15 Shaman1C
 
21.03.17
09:53
(9)
    ЗащищенноеСоединениеOpenSSL = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows);
    ИмяВебСервиса  = "https://ghdgdfgdfgdfgdfgdf/Inbox.asmx?WSDL";;
    WS_Определение = Новый WSОпределения(ИмяВебСервиса,,,,,ЗащищенноеСоединениеOpenSSL);
    ВСДанные       = WS_Определение.Сервисы[0];
    Прокси         = Новый WSПрокси(WS_Определение, ВСДанные.URIПространстваИмен, ВСДанные.Имя, ВСДанные.ТочкиПодключения[0].Имя,,,ЗащищенноеСоединениеOpenSSL);


Вот так идет, но вот тут непонятно: Результат = Прокси.ИмяМетодаВебСервиса(МойXML);


Если я делаю так, то говорит что такого поля не обнаружено. Что же тут должно быть то?
16 Юрий Лазаренко
 
21.03.17
09:54
(15) Значит у веб-сервиса нет метода с именем "ИмяМетодаВебСервиса", нужно вместо него подставить то, которое есть.
17 Shaman1C
 
21.03.17
09:57
(16) да я это понял, я подставляю и выдает что такого поля не обнаружено.
18 Aceforg
 
21.03.17
10:02
Из своего проекта, стандартный WSОпределения не проканал


Функция ИнициализироватьСоединие();
    Попытка
        xmlHttp = New COMОбъект("MSXML2.xmlHttp");
        
        Адрес = "http://______";;
        
        Хост = "___";
        
        xmlHttp.OPEN ("POST", Адрес, False);
        
        xmlHttp.setRequestHeader ("Host", Хост);
        
        
        
        xmlHttp.setRequestHeader ("Content-type", "text/xml; charset=utf-8");
        
    
    Исключение
        Сообщить("Не удалось создать объект ""MSXML2.xmlHttp"":"+ ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;
    Возврат xmlHttp;
КонецФункции



Функция ЗапросПоНомеру(Соединение,НомерДоговора)
    Если Соединение = Неопределено Тогда
        Сообщить("Не установлено соединение");
        Возврат Неопределено;
    КонецЕсли;
    DOC = New COMОбъект("MSXML2.DOMDocument");
    DOC.loadXML("
    |<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/""; xmlns:tem=""http://tempuri.org/"">;
    |   <soapenv:Header/>
    |   <soapenv:Body>



    |   </soapenv:Body>
    |</soapenv:Envelope>");
    
    Соединение.setRequestHeader("SOAPAction","http://___";);
    
    Попытка
        Соединение.SEND(DOC);
    Исключение
        Сообщить("Ошибка при отправке запроса данных:" + ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;
    
    

    Результат = Соединение.statusText;

    Если Результат <> "OK" Тогда
        Сообщить("Ошибка запроса данных:" + Строка(Результат));
        Возврат Неопределено;
    КонецЕсли;
    
    
    DOCToSave = New COMОбъект("MSXML2.DOMDocument");

    DOCToSave.loadXML(Соединение.responseText);

    Если DOCToSave.parseError.errorCode <> 0 Тогда
        Сообщить("Ошибка разбора XML результата: " + DOC.parseError.reason);
        Возврат Неопределено;
    КонецЕсли;
    
    Возврат DOCToSave.xml;
    
КонецФункции
19 Shaman1C
 
21.03.17
10:17
Прокси.ФабрикаXDTO.Пакеты.Получить(ВСДанные.URIПространстваИмен).Получить("ИмяМетодаВебСервиса")

Вот так я могу получить веб сервис, но как в него передать ХМл вопрос остается открытым
20 Мимохожий Однако
 
21.03.17
10:21
(19) Хозяева веб-сервиса информацию с примерами держат в секрете?
21 Жан Пердежон
 
21.03.17
10:23
(19) почитай ну хоть что-нибудь про веб-сервисы и xdto
22 Shaman1C
 
21.03.17
10:24
(20) отмаличиваются

(21) ой бедный ты мой, прочитал уже дофига всего, мало нужной инфы
23 Мимохожий Однако
 
21.03.17
10:25
(22) Странно. Ты же не хакер.
PS. Сбавь эмоции ))
24 Shaman1C
 
21.03.17
10:39
(16)

    WSПараметр     = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
    WSПараметр.address = "Адрес";
    WSПараметр.phone   = "Телефон";
    WSПараметр.fax     = "Факс";

Вот так я получаю параметры и запихиваю туда данные.
Теперь та что, как они попадут в веб-сервис? Причем это все в цикле надо делать?
25 dezss
 
21.03.17
11:34
(24) Пример с ФНС смотрел (о зарегистрированных в ЕГРН налогоплательщиках)?
26 dezss
 
21.03.17
11:35
(25) + правда у них и доки по этому поводу имеются
27 olegves
 
21.03.17
11:35
(24) http://catalog.mista.ru/public/537861/
тебе, наверное, п.6 подойдет
28 olegves
 
21.03.17
11:36
(27) http://catalog.mista.ru/public/537861/ - это верная ссылка
29 dezss
 
21.03.17
11:46
(26) если что, вот тут у них документация.
https://rmsp.nalog.ru/developers.html

А такой код я когда-то набрасывал для проверки по ИНН/КПП и дате.

    Определение = Новый WSОпределения("http://npchk.nalog.ru/FNSNDSCAWS_2?wsdl";);
    Прокси = Новый WSПрокси(Определение, "http://ws.unisoft";, "FNSNDSCAWS2", "FNSNDSCAWS2_Port");
    Запрос = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Тип("http://ws.unisoft/FNSNDSCAWS2/Request";, "NdsRequest2"));
    
    Контрагент = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Тип("http://ws.unisoft/FNSNDSCAWS2/Request";, "NdsRequest2_NP"));

    Контрагент.INN = Трололо;
    Контрагент.KPP = мКПП;
    Контрагент.DT = Формат(мДата, "ДФ=dd.MM.yyyy");
    Запрос.NP.Добавить(Контрагент);
    РезультатЗапроса = Прокси.NdsRequest2(Запрос);
30 Shaman1C
 
21.03.17
11:56
(29) Почему я не могу обратиться к веб-сервису через прокси через точку? таким вот образом: Прокси.NdsRequest2(Запрос).
Всегда пишут что "Поле объекта не обнаружено"
31 Бычье сердце
 
21.03.17
11:57
(30)
Ты еще не отправил файл? Вторые сутки пошли.
32 Shaman1C
 
21.03.17
12:07
(29) Все, разобрался с этим моментом.
33 Shaman1C
 
21.03.17
12:23
Все отсылается, всем кто помог спасибо, как же вас мало на мисте осталось... в основном клоуны и критины...
34 Барматолог
 
21.03.17
12:27
(33) Расскажи, пожалуйста, кратко - как решил
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn