Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Передача xml на сайт

Передача xml на сайт
Я
   HamyaG
 
16.07.19 - 15:29
Суть проблемы в следующем, на входе веб сервис ждет xml, как только не изгалялся, но отправить не могу, формирую xml файл, если потом сделать:

ЧтениеXML = Новый ТекстовыйДокумент;
ЧтениеXML.Прочитать(ПутьКФайлу,"UTF-8");
ДанныеДляОтправки = ЧтениеXML.ПолучитьТекст();

получаем строку формата xml, но сайт ее не принимает, т.к. считает это CDATA и формат как бы уже не тот. Пробовал отправлять двоичные данные, засовывал в Base64 возвращается - несоответствие типов, ну и назрел вопрос - что этой скотине надо? в описании написано, что именно xml.

Через SoapUI файл залетает, т.е. в самой структуре ошибок нет.

Всем буду благодарен за подсказки)
 
 
   AlexTim03
 
1 - 16.07.19 - 15:32
xml - это та же строка.
Покажи, как делаешь вызов веб-сервиса.

Должно быть что-то типа этого:
Определение = Новый WSОпределения("......");

Прокси = Новый WSПрокси(Определение, "...", "...", "...");    
ТипПараметра = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";, "string");
ЗначениеПараметра = ФабрикаXDTO.Создать(ТипПараметра, СтрокаXML); /////Вот тут ты преобразуешь xml            
Результат = Прокси.getReports(ЗначениеПараметра);
   mikecool
 
2 - 16.07.19 - 15:38
емнип, если отправка через post - в заголовке нужно указать правильный тип содержимого
   Garykom
 
3 - 16.07.19 - 15:39
HTTPЗапрос (HTTPRequest)
УстановитьИмяФайлаТела (SetBodyFileName)
Синтаксис:
УстановитьИмяФайлаТела(<ПутьКФайлу>)
Параметры:
<ПутьКФайлу> (обязательный)
Тип: Строка.
Указывает путь к файлу.
Описание:
Устанавливает имя файла, из которого будет прочитано тело запроса.
Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Примечание:
В момент вызова метода файл открывается на чтение, но само чтение происходит только в момент отправки запроса.
   Garykom
 
4 - 16.07.19 - 15:39
И да СП все же купи
   HamyaG
 
5 - 16.07.19 - 15:40
(1) Определения = Новый WSОпределения(МестоположениеWSDL);
        Прокси = Новый WSПрокси(Определения, 
        ПространстваИменСервиса,
        ИмяСервиса,
        ИмяТочкиПодключения);

РезультатОтправки = Прокси.generateCoupons(ДанныеДляОтправки);
   HamyaG
 
6 - 16.07.19 - 15:40
(2) не через post
   HamyaG
 
7 - 16.07.19 - 15:42
(4) учту, но HTTPЗапрос ко мне отношения не имеет
   Garykom
 
8 - 16.07.19 - 15:43
(7) Гыгы
   AlexTim03
 
9 - 16.07.19 - 15:43
(5)
ДанныеДляОтправки - надо преобразовать.
Попробуй как у меня. Или пришли описание, что там веб-сервис ждет.
Понятно, что ему нужен xml, но ты это должен "сказать" языком web-сервиса.

Я это и делаю этими строками:

ТипПараметра = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";;, "string");

ЗначениеПараметра = ФабрикаXDTO.Создать(ТипПараметра, СтрокаXML);
   HamyaG
 
10 - 16.07.19 - 15:46
(9) сейчас попробую
в описании к сервису написано - 
Принимаемые параметры

web:generateCoupons
    
XML

Список категорий несерийных купонов
   Garykom
 
11 - 16.07.19 - 15:49
Изучить
https://habr.com/ru/post/148658/
http://fixin.com.ru/articles/1s_web_services/article.htm

И да веб-сервисы чаще всего работают поверх http, поэтому через (3) вполне можно
   HamyaG
 
12 - 16.07.19 - 15:50
(9) Благодарю, именно этих двух строк и не хватало)) пробился))
   Garykom
 
13 - 16.07.19 - 15:52
По сути wsdl/soap это примерно как через COM работать с другой базой 1С, только простые типы можно напрямую передавать, сложные надо "обертывать"
   HamyaG
 
14 - 16.07.19 - 15:53
(11) я не говорю, что это не возможно, у меня одна функция подключения и отправки в несколько точек подключения для этого сайта и что то ваять лишь для одной точки - смысла нет

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.