1. starjevschik 12.09.18 15:32 Сейчас в теме

Текст запроса XDTO

Есть отправка запроса на внешний веб-сервис, примерно так вот

Прокси = Новый WSПрокси(Определение....);
...
Товары = Прокси.ФабрикаXDTO.Создать(ТипОбъектаТовары);
....
Ответ = Прокси.SetGoods(Товары);

там с той стороны что-то не работает и они просят прислать текст запроса. Я так понимаю, на ту сторону отправляется некий XML.
Как мне его получить?
Найденные решения
14. M61 14 13.09.18 10:30 Сейчас в теме
ХМЛ = Новый ЗаписьXML;
ХМЛ.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(ХМЛ, Товары);
Результат = ХМЛ.Закрыть();

Результат будет текст xml файла типа строка
starjevschik; +1 Ответить
Остальные ответы
Сортировка: Древо
10. M61 14 13.09.18 07:07 Сейчас в теме
(1)От вас отправляется пакет Товары. Поставьте точку останова на строке Ответ = Прокси.SetGoods(Товары); и вычислите выражение "Товары". Если параметр веб-сервиса имеет такой же тип и структуру, значит запрос отправится успешно. Часто бывает, что на входе веб-сервиса тип параметра "string". В таком случае "Товары" надо сериализовать в xml перед запросом и отправить как строку.
11. starjevschik 13.09.18 08:58 Сейчас в теме
(10) Товары имеет тип и значение XDTOОбъект. Смысла в этом знании нет никакого. Нужен текст XML, который передается сервису.
3. starjevschik 12.09.18 16:15 Сейчас в теме
(2) спасибо, там такой же вопрос, но без ответа
неужели нет какого-нибудь метода ПолучитьЗапросXML()?
9. oldcopy 65 12.09.18 20:28 Сейчас в теме
(3) Используйте

ФабрикаXDTO.ЗаписатьXML() 


в какую-нибудь временную папку и смотрите что он там отправляет.
starjevschik; +1 Ответить
12. starjevschik 13.09.18 09:09 Сейчас в теме
(9) я так пробовал сделать
Запись = Новый ЗаписьXML;
	Прокси.ФабрикаXDTO.ЗаписатьXML(Запись, Товары);



но что-то не сложилось, я не понимаю, что она хочет
Ошибка при вызове метода контекста (ЗаписатьXML)
Прокси.ФабрикаXDTO.ЗаписатьXML(Запись, Товары);
по причине:
Ошибка при записи XDTO
по причине:
Не установлен приемник XML
4. NatalkaBal 12.09.18 16:19 Сейчас в теме
ПолучитьИмяВременногоФайла() может подойтемт
5. ditp 51 12.09.18 16:42 Сейчас в теме
Адрес сервиса http или https?
6. starjevschik 12.09.18 16:44 Сейчас в теме
(5) http
запрос они поймали на той стороне.
Но как получить его здесь, я пока не понял.
7. antz 12.09.18 17:25 Сейчас в теме
(6) Поставь SoapUI, в ней можно посмотреть.
13. starjevschik 13.09.18 09:12 Сейчас в теме
(7)
(6)
это все, наверное, здорово, но дело происходит на клиентском сервере, ставить туда какое-то левое ПО не очень хотелось бы.
Странно, что нет простых методов, неужели это так сложно...
8. ditp 51 12.09.18 17:44 Сейчас в теме
(6)
https://www.nirsoft.net/utils/smsniff.html

Покажет что и как ушло и что в ответ получили.
14. M61 14 13.09.18 10:30 Сейчас в теме
ХМЛ = Новый ЗаписьXML;
ХМЛ.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(ХМЛ, Товары);
Результат = ХМЛ.Закрыть();

Результат будет текст xml файла типа строка
starjevschik; +1 Ответить
15. starjevschik 13.09.18 10:43 Сейчас в теме
(14) о ес! спасибо большое. Получилось.
16. oldcopy 65 13.09.18 11:41 Сейчас в теме
Можно еще так:

Запись = Новый ЗаписьXML;
 	Запись.ОткрытьФайл(ПутьКФайлуXML,"windows-1251");
   	Запись.ЗаписатьОбъявлениеXML(); 
    ФабрикаXDTO.ЗаписатьXML(Запись, Товары);
 	Запись.Закрыть();


Кодировку установите какую вам надо, в нашем случае это windows-1251.

Мы при работе с платежными шлюзами стали применять такую схему: все запросы пишутся в промежуточный XML-файл с именем типа НомерЗапроса_ДатаВремя.xml, если шлюз вернул успех - файл удаляется. В случае какой-либо ошибки у нас остается готовый файл с запросом, который можно как быстро изучить самому, так и предоставить в поддержку. Аналогичным образом поступаем и с ответами шлюза. Т.е. в случае какой-либо ошибки у нас в рабочей папке находятся файлы запроса и ответа.
starjevschik; +1 Ответить
17. starjevschik 13.09.18 13:36 Сейчас в теме
(16) спасибо, может пригодится. Хорошая идея. Здесь-то вряд ли, а в более ответственных делах вполне жизненно.
18. oldcopy 65 13.09.18 15:27 Сейчас в теме
(17) Основной смысл этой идеи в том, что полная расшифровка ответа шлюза избыточна, но иногда эта самая информация может быть нужна. В нашем случае шлюз выдает код результата и код состояния плюс некоторый набор дополнительных полей, который может меняться в разных сочетаниях кода результата и состояния.

Скажем кассиру расшифровываются только явные ошибки: "Неправильный номер абонента", "Недопустимая сумма", "Платежи на данного получателя временно не проводятся" и т.д. Даже если платеж стал в очередь кассиру все равно показываем "Успех". Все остальное "Ошибка, позвоните в офис/техподдержку".

Операторам в офисе показываем больше, здесь, например, будут статусы "В очереди, нет свободных средств на счету", "Ошибка, шлюз провайдера временно недоступен, позвоните туда-то", т.е. расшифровываем те ситуации, которые в пределах их компетенции. Остальное глушится сообщением "Ошибка, позвоните в техподдержку", которая уже и изучает эти файлы. Для поддержки это вообще идеальный вариант, так как видно всё, что отправили, что получили, все допполя и т.п.
19. uno-c 23 13.09.18 18:30 Сейчас в теме
Fiddler еще очень удобен - перехватывает трафик, в том числе https. Вот например, что он показывает по запросу на веб-сервис службы доставки КCЭ:

POST http://lk-test.cse.ru/1c/ws/Web1C.1cws HTTP/1.1
Proxy-Authorization: NTLM TlRMTVNTUAABAAAAt7II4gkACQArAAAAAwADACgAAAAGAbEdAAAAD05PVldP­UktHUk9VUA==
User-Agent: 1C+Enterprise/8.2
Host: lk-test.cse.ru
Accept: */*
Connection: Keep-Alive
SOAPAction: "http://www.cargo3.ru#WebService:GetReferenceData"
Content-Type: text/xml; charset=utf-8
Content-Length: 946

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header/>
<soap:Body> <m:GetReferenceData xmlns:m="http://www.cargo3.ru">
<m:login xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">test</m:login>
<m:password xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2016</m:password>
<m:parameters xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<m:Key>Parameters</m:Key>
<m:List>
<m:Key>Reference</m:Key>
<m:Value xsi:type="xs:string">Geography</m:Value>
<m:ValueType>string</m:ValueType>
</m:List>
<m:List>
<m:Key>Search</m:Key>
<m:Value xsi:type="xs:string">Санкт-Петербург г</m:Value>
<m:ValueType>string</m:ValueType>
</m:List>
</m:parameters>
</m:GetReferenceData></soap:Body>
</soap:Envelope>
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Салехард
зарплата от 80 000 руб. до 200 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день


Программист 1С
Санкт-Петербург
Полный день

Программист 1С
Санкт-Петербург
Полный день