|   |   | 
| 
 | Как отправить 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) Расскажи, пожалуйста, кратко - как решил     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |