1С WEB - Сервис обмен SOAP WSDL

1. surgut_dezvgr 26.03.20 07:45 Сейчас в теме
1С WEB - Сервис обмен SOAP WSDL

Запрос перечня услуг, доступных для партнёра
Для запроса перечня услуг необходимо вызвать процедуру ServisesWithoutSupplier.

Входные переменные

Имя переменной - partnerID
Тип - string
Комментарий - Уникальный идентификатор партнёра

Выходные переменные

Имя переменной - serviceList
Тип - массив ServiceInfo (SerID - тип int, SerName - тип string)
Комментарий - Перечень доступных услуг
Имя переменной - error
Тип - Error
Комментарий - Ошибка обработки запроса, структура данных

Пример запроса

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ServisesWithoutSupplier xmlns="PayService.Service">
<partnerID> QWER-ASDF-ZXCV </partnerID>
</ServisesWithoutSupplier>
</soap:Body>
</soap:Envelope>

Пример ответа

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ServisesWithoutSupplierResponse xmlns="PayService.Service">
<serviceList>
<ServiceInfo>
<SerID>500065</SerID>
<SerName>ЖКУ</SerName>
</ServiceInfo>
<ServiceInfo>
<SerID> 500284 </SerID>
<SerName>ВЗНОС НА КАП.РЕМОНТ</SerName>
</ServiceInfo>
</serviceList>
</ServisesWithoutSupplierResponse>
</soap:Body>
</soap:Envelope>

/////////////////////////////////////////////////////////////////

WSОпределение = Новый WSОпределения(НашВебСервис);
	
WSСервис=WSОпределение.Сервисы[0];
	
Прокси = Новый WSПрокси(WSОпределение, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя)
	
ТипWSПараметра 	 = Прокси.ФабрикаXDTO.Пакеты.Получить((WSСервис.URIПространстваИмен)).Получить("ServisesWithoutSupplier");

//Создаем параметр на основе типа и заполняем значение параметра partnerID.
WSПараметр	   = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
WSПараметр.partnerID	= НашКодПартнера;
serviceList  = "";
Error        = "";
	
//Вызываем метод веб-сервиса, получения перечня услуг .
Прокси.ServisesWithoutSupplier(WSПараметр,serviceList,Error);
Показать



Выходит ошибка - При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка разбора XML: - [1,1]
Фатальная ошибка:
Extra content at the end of the document
По теме из базы знаний
Найденные решения
44. surgut_dezvgr 01.04.20 09:34 Сейчас в теме
Разобрался

Ошибка была из-за того что partnerID передавался как список параметров, а надо было как значение метод отработал правильно

ServiceList = "";
Error = "";

//Вызываем метод веб-сервиса, получения перечня услуг .

Прокси.ServisesWithoutSupplier(WSПараметр.partnerID,ServiceList,Error);

Для Каждого Стр ИЗ ServiceList.ServiceInfo Цикл

КонецЦикла;
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. danjer74 3 26.03.20 08:20 Сейчас в теме
(1)Мы сталкивались с подобным - нужно экранировать вские точки, запятые и прочую ересь.
3. koln 26.03.20 08:36 Сейчас в теме
(1) В описании указано, что входной параметр только один
Входные переменные

Имя переменной - partnerID
Тип - string
Комментарий - Уникальный идентификатор партнёра

а Вы передаете три параметра при вызове метода
Прокси.ServisesWithoutSupplier(WSПараметр,serviceList,Error);


"serviceList" и "error" - выходные параметры, т.е. то, что Вам отправляет сервис
7. surgut_dezvgr 26.03.20 08:51 Сейчас в теме
(3) Прокси.ServisesWithoutSupplier(WSПараметр) - Недостаточно фактических параметров
4. koln 26.03.20 08:39 Сейчас в теме
При чем
Прокси.ServisesWithoutSupplier(WSПараметр,serviceList,Error);
само по себе написано не верно, т.к. предполагается возврат параметров, т.е. "ServisesWithoutSupplier" - функция. Правильно как-то так
Ответ = Прокси.ServisesWithoutSupplier(WSПараметр)
5. surgut_dezvgr 26.03.20 08:50 Сейчас в теме
Запрос перечня услуг, доступных для партнёра
Для запроса перечня услуг необходимо вызвать процедуру ServisesWithoutSupplier.

Входные переменные

Имя переменной - partnerID
Тип - string
Комментарий - Уникальный идентификатор партнёра

Выходные переменные

Имя переменной - serviceList
Тип - массив ServiceInfo (SerID - тип int, SerName - тип string)
Комментарий - Перечень доступных услуг
Имя переменной - error
Тип - Error
Комментарий - Ошибка обработки запроса, структура данных

Пример запроса

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ServisesWithoutSupplier xmlns="PayService.Service">
<partnerID> QWER-ASDF-ZXCV </partnerID>
</ServisesWithoutSupplier>
</soap:Body>
</soap:Envelope>

Пример ответа

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ServisesWithoutSupplierResponse xmlns="PayService.Service">
<serviceList>
<ServiceInfo>
<SerID>500065</SerID>
<SerName>ЖКУ</SerName>
</ServiceInfo>
<ServiceInfo>
<SerID> 500284 </SerID>
<SerName>ВЗНОС НА КАП.РЕМОНТ</SerName>
</ServiceInfo>
</serviceList>
</ServisesWithoutSupplierResponse>
</soap:Body>
</soap:Envelope>

////////////////////////////////////////////////////////////­/////

WSОпределение = Новый WSОпределения(НашВебСервис);

WSСервис=WSОпределение.Сервисы[0];

Прокси = Новый WSПрокси(WSОпределение, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя)

ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить((WSСервис.URIПространстваИмен)).Получить("ServisesWithoutSupplier");

//Создаем параметр на основе типа и заполняем значение параметра partnerID.
WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
WSПараметр.partnerID = НашКодПартнера;
serviceList = "";
Error = "";

//Вызываем метод веб-сервиса, получения перечня услуг .
Прокси.ServisesWithoutSupplier(WSПараметр,serviceList,Error);


Выходит ошибка - При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка разбора XML: - [1,1]
Фатальная ошибка:
Extra content at the end of the document


(4)
6. surgut_dezvgr 26.03.20 08:50 Сейчас в теме
(4) ServisesWithoutSupplier - это процедура
9. koln 26.03.20 09:16 Сейчас в теме
(6)Вряд ли, т.к. есть выходные параметры, т.е. метод что-то возвращает.
11. surgut_dezvgr 26.03.20 09:23 Сейчас в теме
(9) Ответ = Прокси.ServisesWithoutSupplier(WSПараметр) так проверял писал ошибку попытка обратиться к процедуре как к функции
8. surgut_dezvgr 26.03.20 09:05 Сейчас в теме
Загрузил WS ссылку в 1С

Модель данных
Пакет
Типы объектов
ServisesWithoutSupplier (запрос)
- partnerID
ServisesWithoutSupplierResponse (Ответ)
- serviceList
- Error
Web - сервис
Имя
ИмяSOAP
ServisesWithoutSupplier (запрос)
- partnerID (Направление - Входной)
- serviceList (Направление - Выходной)
- Error (Направление - Выходной)
10. koln 26.03.20 09:23 Сейчас в теме
(8) Можете тут скинуть ссылку на данный сервис, посмотрю.
12. surgut_dezvgr 26.03.20 09:27 Сейчас в теме
(10)Там доступ по IP не получится можно по anydesk
13. koln 26.03.20 09:28 Сейчас в теме
(12)Я хотел просто загрузить и описание сервиса (структуру) посмотреть.
14. surgut_dezvgr 26.03.20 09:30 Сейчас в теме
(13) Могу структуру в пустую базу загрузить или в расширение и отправить
15. koln 26.03.20 09:33 Сейчас в теме
Давайте так, посмотрим. Просто у меня не укладывается в голове, как процедура может что-то Вам вернуть в качестве ответа.
17. surgut_dezvgr 26.03.20 09:44 Сейчас в теме
(15)
Запрос по SOAPUI
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pay="PayService.Service">
<soapenv:Header/>
<soapenv:Body>
<pay:ServisesWithoutSupplier>
<!--Optional:-->
<pay:partnerID>111111111111111</pay:partnerID>
</pay:ServisesWithoutSupplier>
</soapenv:Body>
</soapenv:Envelope>
Ответ
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ServisesWithoutSupplierResponse xmlns="PayService.Service">
<serviceList>
<ServiceInfo>
<SerID>111</SerID>
<SerName>Имя1</SerName>
</ServiceInfo>
<ServiceInfo>
<SerID>222</SerID>
<SerName>Имя2</SerName>
</ServiceInfo>
</serviceList>
</ServisesWithoutSupplierResponse>
</soap:Body>
</soap:Envelope>
18. surgut_dezvgr 26.03.20 09:46 Сейчас в теме
(15) Я сам не понимаю, но 1С ругается
Как вы подключитесь?
19. koln 26.03.20 09:50 Сейчас в теме
Я подключаться не планирую, т.к., скорее всего, у Вас авторизация не открытая. Я хочу посмотреть структуру сервиса и параметров, как передаваемых, так и возвращаемых. Может что-то и прояснится.
20. surgut_dezvgr 26.03.20 10:54 Сейчас в теме
(19) Напиши почту куда отправить расширение
21. koln 26.03.20 11:07 Сейчас в теме
22. surgut_dezvgr 26.03.20 11:16 Сейчас в теме
23. koln 26.03.20 12:47 Сейчас в теме
(22)Судя по структуре, похоже, что передавать нужно все параметры. В таком случае, вместо
serviceList = "";
Error = "";

добавьте код
	ПараметрМассива = Прокси.ФабрикаXDTO.Пакеты.Получить((WSСервис.URIПространстваИмен)).Получить("ArrayOfServiceInfo");
	ОбъектМассива = Прокси.ФабрикаXDTO.Создать(ПараметрМассива);
	
	ПараметрОшибки = Прокси.ФабрикаXDTO.Пакеты.Получить((WSСервис.URIПространстваИмен)).Получить("Error");
	ОбъектОшибки = Прокси.ФабрикаXDTO.Создать(ПараметрОшибки);
	
	Прокси.ServisesWithoutSupplier(WSПараметр,ОбъектМассива,ОбъектОшибки);

и в метод "ServisesWithoutSupplier" передавайте все три параметра
Прокси.ServisesWithoutSupplier(WSПараметр,ОбъектМассива,ОбъектОшибки);
24. surgut_dezvgr 26.03.20 14:37 Сейчас в теме
(23) Все равно ошибка

При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка разбора XML: - [1,1]
Фатальная ошибка:
Extra content at the end of the document

Пробовал список = Прокси.ServisesWithoutSupplier(WSПараметр,ОбъектМассива,ОбъектОшибки); тоже ошибка обращение к процедуре как к функции

Такое чувство что 1С неправильно считывает из WSDL

Тестировал с помощью обработки WSreader в 1С нет возвращаемого значения (фото приложил)

Метод Status отработал правильно (получает информацию) там правда только один параметр

Метод Pay тоже работает (записывает данные в сервис)
Прикрепленные файлы:
25. koln 26.03.20 14:53 Сейчас в теме
(24)Попробуйте этот код
	
	ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить((WSСервис.URIПространстваИмен)).Получить("ServisesWithoutSupplier");
	WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
	WSПараметр.partnerID = "НашКодПартнера";
	
	ПараметрServiceInfo = Прокси.ФабрикаXDTO.Пакеты.Получить((WSСервис.URIПространстваИмен)).Получить("ServiceInfo");
	ОбъектServiceInfo = Прокси.ФабрикаXDTO.Создать(ПараметрServiceInfo);
	ОбъектServiceInfo.SerID = 0;
	
	ПараметрМассива = Прокси.ФабрикаXDTO.Пакеты.Получить((WSСервис.URIПространстваИмен)).Получить("ArrayOfServiceInfo");
	ОбъектМассива = Прокси.ФабрикаXDTO.Создать(ПараметрМассива);
	ОбъектМассива.ServiceInfo.Добавить(ОбъектServiceInfo);
	
	ПараметрОшибки = Прокси.ФабрикаXDTO.Пакеты.Получить((WSСервис.URIПространстваИмен)).Получить("Error");
	ОбъектОшибки = Прокси.ФабрикаXDTO.Создать(ПараметрОшибки);
	ОбъектОшибки.ID = 0;
	
	Прокси.ServisesWithoutSupplier(WSПараметр,ОбъектМассива,ОбъектОшибки);
Показать

ранее не учел некоторые моменты
26. surgut_dezvgr 26.03.20 15:02 Сейчас в теме
27. koln 26.03.20 15:07 Сейчас в теме
(26)А попробуйте закомментировать
ОбъектServiceInfo.SerID = 0;
и
ОбъектОшибки.ID = 0;
28. surgut_dezvgr 26.03.20 16:19 Сейчас в теме
29. koln 26.03.20 16:31 Сейчас в теме
30. koln 26.03.20 16:36 Сейчас в теме
(28)Ну почему с одним параметром не проходит-то? Даже в примере передается один параметр

Пример запроса

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ServisesWithoutSupplier xmlns="PayService.Service">
<partnerID> QWER-ASDF-ZXCV </partnerID>
</ServisesWithoutSupplier>
</soap:Body>
</soap:Envelope>
31. koln 26.03.20 16:38 Сейчас в теме
(28) А не пробовали другим софтом отработать? например SoapUI.
32. surgut_dezvgr 26.03.20 16:41 Сейчас в теме
(31)Делал все хорошо

Запрос по SOAPUI

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pay="PayService.Service">
<soapenv:Header/>
<soapenv:Body>
<pay:ServisesWithoutSupplier>
<!--Optional:-->
<pay:partnerID>111111111111111</pay:partnerID>
</pay:ServisesWithoutSupplier>
</soapenv:Body>
</soapenv:Envelope>

Ответ

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ServisesWithoutSupplierResponse xmlns="PayService.Service">
<serviceList>
<ServiceInfo>
<SerID>111</SerID>
<SerName>Имя1</SerName>
</ServiceInfo>
<ServiceInfo>
<SerID>222</SerID>
<SerName>Имя2</SerName>
</ServiceInfo>
</serviceList>
</ServisesWithoutSupplierResponse>
</soap:Body>
</soap:Envelope>

Сам без понятия в чем может быть дело
33. surgut_dezvgr 26.03.20 16:43 Сейчас в теме
(31) Такое чувство что 1С не видит что это функция либо неправильно считывает WSDL
34. surgut_dezvgr 26.03.20 16:48 Сейчас в теме
(31) ПО SOAPUI отрабатывал
Отправлял один параметр и получил список услуг
все хорошо
35. koln 26.03.20 17:02 Сейчас в теме
(34)Значит что-то не так с самим параметром. Решил проверить, как преобразовывается XDTOОбъект в строку XML. Добавил такой код
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, WSПараметр);
	ТекстОбъектаXDTO = ЗаписьXML.Закрыть();

и получил ошибку
Несоответствие типов XDTO:
Тип '{PayService.Service}ServisesWithoutSupplier' не найден
Тип принадлежит пакету, отсутствующему в фабрике типов XDTO
{ВнешняяОбработка.HTTPЗапрос.Форма.Форма.Форма(187)}: ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, WSПараметр);

по причине:
Несоответствие типов XDTO:
Тип '{PayService.Service}ServisesWithoutSupplier' не найден
Тип принадлежит пакету, отсутствующему в фабрике типов XDTO
36. koln 26.03.20 17:07 Сейчас в теме
(34)Попробуйте на основе данной ссылки создать в конфигураторе новый XDTO-пакет. И вот уже на основе данного пакета создавать XDTOОбъект. Есть подозрение, что он не распознает объект, созданный на основе WS-ссылки
37. koln 26.03.20 17:29 Сейчас в теме
(34)Отбой, изменил строку
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, WSПараметр);
на
Прокси.ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, WSПараметр);
и получил строку
<ServisesWithoutSupplier xmlns="PayService.Service" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<partnerID>НашКодПартнера</partnerID>
</ServisesWithoutSupplier>
38. surgut_dezvgr 27.03.20 07:58 Сейчас в теме
(37) Проверял обработками
https://infostart.ru/public/189891/ и https://infostart.ru/public/305383/ тоже пишут ошибку
При попытке выполнить метод ошибка Обращение к процедуре объекта как к функции (ServisesWithoutSupplier)
39. koln 27.03.20 08:03 Сейчас в теме
(38)1. Сколько параметров передаете?
2. Я до сих пор не могу понять, почему идет обращение к процедуре, если даже SOAPUI показывает возвращенные данные
Ответ

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ServisesWithoutSupplierResponse xmlns="PayService.Service">
<serviceList>
<ServiceInfo>
<SerID>111</SerID>
<SerName>Имя1</SerName>
</ServiceInfo>
<ServiceInfo>
<SerID>222</SerID>
<SerName>Имя2</SerName>
</ServiceInfo>
</serviceList>
</ServisesWithoutSupplierResponse>
</soap:Body>
</soap:Envelope>
Показать

3. А у Вас нет доступа к отладчику на стороне веб-сервиса?
41. surgut_dezvgr 27.03.20 08:20 Сейчас в теме
(39) У меня единственный вариант 1С не правильно считывает WSDL
42. alex_bitti 139 30.03.20 13:18 Сейчас в теме
(41) здравствуйте, публикация сервиса выполнена? это сообщение может говорить о том что 1С принимает только входящий запрос, но не формирует ответ, какой веб- сервер используется?
43. surgut_dezvgr 31.03.20 11:25 Сейчас в теме
(42) Это обмен с программой на оракле
Данные отправляет метод PAY
Данные получает метод STATUS

Отправлял запрос иp SoapUI метод отработал вернул список услуг

Фидлер перехватил при отправке - закладка RAW

POST http://172.67.112.6:10101/pays.asmx HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "PayService.Service/ServisesWithoutSupplier"
Content-Length: 349
Host: 172.67.112.6:10101
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pay="PayService.Service">
<soapenv:Header/>
<soapenv:Body>
<pay:ServisesWithoutSupplier>
<!--Optional:-->
<pay:partnerID>4L4D052A16WKWZG0</pay:partnerID>
</pay:ServisesWithoutSupplier>
</soapenv:Body>
</soapenv:Envelope>


меня смущает эта строка <!--Optional:-->
40. surgut_dezvgr 27.03.20 08:10 Сейчас в теме
Нет сторонняя организация
44. surgut_dezvgr 01.04.20 09:34 Сейчас в теме
Разобрался

Ошибка была из-за того что partnerID передавался как список параметров, а надо было как значение метод отработал правильно

ServiceList = "";
Error = "";

//Вызываем метод веб-сервиса, получения перечня услуг .

Прокси.ServisesWithoutSupplier(WSПараметр.partnerID,ServiceList,Error);

Для Каждого Стр ИЗ ServiceList.ServiceInfo Цикл

КонецЦикла;
45. koln 02.04.20 06:34 Сейчас в теме
(44) Тогда, видимо, не нужно создавать и XDTO объект "WSПараметр". Просто
partnerID = "Код партнера";
, как в случае
ServiceList = "";
Error = "";
. Тогда строка обращения к веб-сервису
Прокси.ServisesWithoutSupplier(partnerID,ServiceList,Error);
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот