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

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

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

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

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

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

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

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

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

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

в описании к сервису написано -
Принимаемые параметры

web:generateCoupons
    
XML

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

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