![]() |
|
Веб-сервис, получаю ошибку Несоответствие типов (параметр номер '1') | ☑ | ||
---|---|---|---|---|
0
Radion
08.05.22
✎
21:38
|
Доброго времени суток, описание тестового веб сервиса (курьерская служба): http://rates.kazpost.kz/api/addrletter/test/
В ней есть wsdl описание тестового веб-сервиса: http://rates.kazpost.kz/postratesws/postratesws.wsdl В 1с созал WSссылку загрузил в нее описание wsdl, через метод GetAddrLetter, пытаюсь зарегистрировать заказ и получаю ошибку "Несоответствие типов (параметр номер '1')". Сам код (данные взял тестовые из примера): ПараметрыЗапроса = СокрЛП(" |<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:pos=""http://webservices.kazpost.kz/postratesws""> |<soapenv:Header/> |<soapenv:Body> | <pos:GetParcelBarcodeRequest> | <pos:Key>EMKWG7x5dSrCowxnKd1adBItLi0lcwkR</pos:Key> | <pos:AddrInfo> | <pos:RcpnIIN>123456789012</pos:RcpnIIN> | <pos:RcpnName>ФИОполучателя</pos:RcpnName> | <pos:RcpnPhone>77010000000</pos:RcpnPhone> | <pos:RcpnEmail>test@test.com</pos:RcpnEmail> | <pos:RcpnCountry> Казахстан </pos:RcpnCountry> | <pos:RcpnIndex>010000</pos:RcpnIndex> | <pos:RcpnCity>Город</pos:RcpnCity> | <pos:RcpnDistrict>Район</pos:RcpnDistrict> | <pos:RcpnStreet>Улица</pos:RcpnStreet> | <pos:RcpnHouse>12</pos:RcpnHouse> | <pos:SndrBIN>098765432121</pos:SndrBIN> | <pos:SndrName>Компания</pos:SndrName> | <pos:SndrPhone>77010000000</pos:SndrPhone> | <pos:SndrEmail>company@company.com</pos:SndrEmail> | <pos:SndrCountry>Казахстан</pos:SndrCountry> | <pos:SndrIndex>050000</pos:SndrIndex> | <pos:SndrCity>Город</pos:SndrCity> | <pos:SndrDistrict>Район</pos:SndrDistrict> | <pos:SndrStreet>Улица</pos:SndrStreet> | <pos:SndrHouse>25</pos:SndrHouse> | <pos:Weight>1.55</pos:Weight> | <pos:DeclaredValue>15000</pos:DeclaredValue> | <pos:CashOnDelivery>15000</pos:CashOnDelivery> | <pos:ProductCode>P104</pos:ProductCode> | <pos:Marks> | <pos:Mark>returnAfter</pos:Mark> | </pos:Marks> | <pos:SendMethod>2</pos:SendMethod> | <pos:MailCtg>4</pos:MailCtg> | <pos:OrderNum>123456789</pos:OrderNum> | <pos:MailCount>1</pos:MailCount> | <pos:DEA_NUMBER>537868654454000542</pos:DEA_NUMBER> | <pos:DEA_DEPCODE>279900</pos:DEA_DEPCODE> | </pos:AddrInfo> | </pos:GetParcelBarcodeRequest> |</soapenv:Body> |</soapenv:Envelope> |"); ВебСервис = WSСсылки.WSСсылка_TEST.СоздатьWSПрокси("http://webservices.kazpost.kz/postratesws","postratesws","postrateswsSoap11"); ОтветВебСервиса= ВебСервис.GetAddrLetter(ПараметрыЗапроса); - здесь получаю ошибку: "Несоответствие типов (параметр номер '1')" Может кто по опыту подскажет в чем может быть проблема? И еще вопрос как все это метод "GetAddrLetter" из описания протестировать в Postman ? |
|||
1
timurhv
08.05.22
✎
22:19
|
ОтветВебСервиса= ВебСервис.GetAddrLetter(ПараметрыЗапроса);
ПараметрыЗапроса = СокрЛП(" ... | <pos:GetParcelBarcodeRequest> |
|||
2
youalex
08.05.22
✎
23:16
|
(0)
Если используешь объектную модель, в параметры метода нужно отдавать то что в схеме. В твоей схеме это GetAddrLetterRequest (соответствующий ОбъектXDTO в терминах 1С) Очень приблизительно, как-то так: ПространствоИмен = "http://webservices.kazpost.kz/postratesws"; ВебСервис = WSСсылки.WSСсылка1.СоздатьWSПрокси("http://webservices.kazpost.kz/postratesws","postratesws","postrateswsSoap11"); Тип = ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "GetAddrLetterRequest"); GetAddrLetterRequest = ВебСервис.ФабрикаXDTO.Создать(Тип); Тип = ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "AddrInfo"); AddrInfo = ВебСервис.ФабрикаXDTO.Создать(Тип); //заполняешь дальше этот объект. GetAddrLetterRequest.Key = "EMKWG7x5dSrCowxnKd1adBItLi0lcwkR"; GetAddrLetterRequest.AddrInfo = AddrInfo; //дальше заполняешь что там. Результат = ВебСервис.GetAddrLetter(GetAddrLetterRequest); Для тестов можно использовать прогу SOAP UI (и метод ФабрикаXDTO.ЗаписатьXML()) |
|||
3
Radion
09.05.22
✎
17:55
|
(2) Спасибо, сделал по вашему совету, в итоге получаю ошибку -
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(211)}: Ошибка при вызове метода контекста (GetAddrLetter) Результат = ВебСервис.GetAddrLetter(GetAddrLetterRequest); по причине: При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса: {http://webservices.kazpost.kz/postratesws}:postratesws:GetAddrLetter() по причине: При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка разбора XML: - [1,1] Фатальная ошибка: Extra content at the end of the document по причине: Ошибка разбора XML: - [1,1] Фатальная ошибка: Extra content at the end of the document Что может быть в данном случае? Спасибо. Код: ПространствоИмен = "http://webservices.kazpost.kz/postratesws"; ВебСервис = WSСсылки.WSСсылка_TEST.СоздатьWSПрокси("http://webservices.kazpost.kz/postratesws","postratesws","postrateswsSoap11"); Тип = ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "GetAddrLetterRequest"); GetAddrLetterRequest = ВебСервис.ФабрикаXDTO.Создать(Тип); Тип = ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "AddrInfo"); AddrInfo = ВебСервис.ФабрикаXDTO.Создать(Тип);//заполняешь дальше этот объект. AddrInfo.Key = "EMKWG7x5dSrCowxnKd1adBItLi0lcwkR"; AddrInfo.RcpnIIN = "123456789012"; AddrInfo.RcpnName = "ФИОполучателя"; AddrInfo.RcpnPhone = "77010000000"; AddrInfo.RcpnEmail = "test@test.com"; AddrInfo.RcpnCountry = "Казахстан"; AddrInfo.RcpnIndex = 010000; AddrInfo.RcpnCity = "Город"; AddrInfo.RcpnDistrict = "Район"; AddrInfo.RcpnStreet = "Улица"; AddrInfo.RcpnHouse = "12"; AddrInfo.SndrBIN = 098765432121; AddrInfo.SndrName = "Компания"; AddrInfo.SndrPhone = "77010000000"; AddrInfo.SndrEmail = "company@company.com"; AddrInfo.SndrCountry = "Казахстан"; AddrInfo.SndrIndex = "050000"; AddrInfo.SndrCity = "Город"; AddrInfo.SndrDistrict = "Район"; AddrInfo.SndrStreet = "Улица"; AddrInfo.SndrHouse = "25"; AddrInfo.Weight = 15000; AddrInfo.DeclaredValue = 15000; AddrInfo.ProductCode = "P104"; AddrInfo.ProductCode = "P104"; AddrInfo.SendMethod = "2"; AddrInfo.MailCtg = "4"; AddrInfo.OrderNum= "123456789"; AddrInfo.MailCount = "1"; AddrInfo.DEA_NUMBER = "537868654454000542"; AddrInfo.DEA_DEPCODE = "279900"; GetAddrLetterRequest.Key = "test"; GetAddrLetterRequest.AddrInfo = AddrInfo; GetAddrLetterRequest.License = "test"; GetAddrLetterRequest.Certif = "test"; GetAddrLetterRequest.Invoice = "test"; GetAddrLetterRequest.Account = "test"; GetAddrLetterRequest.WeightAll = 0; GetAddrLetterRequest.CostAll = 0; Результат = ВебСервис.GetAddrLetter(GetAddrLetterRequest); |
|||
4
youalex
09.05.22
✎
23:23
|
(3) У тебя похоже пустой ответ возвращается, отсюда ошибка про xml
Как минимум, у тебя не заполнен объект Marks, если исходить из тестового примера: Marks = ВебСервис.ФабрикаXDTO.Создать(ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "Marks")); Marks.Mark.Добавить("returnAfter"); AddrInfo.Marks = Marks; У меня после добавления этого фрагмента вернуло вот что (смотрю через Сервис.ФабрикаXDTO.ЗаписатьXML()) <GetAddrLetterResponse xmlns="http://webservices.kazpost.kz/postratesws" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ResponseInfo> <ResponseGenTime>2022-05-09T23:20:29</ResponseGenTime> <ResponseCode>ERROR</ResponseCode> <ResponseText>ORA-01033: сейчас идет либо запуск, либо останов ORACLE </ResponseText> </ResponseInfo> </GetAddrLetterResponse> |
|||
5
Radion
12.05.22
✎
15:12
|
(4) Еще раз внимательно просмотрел типы данных и все получилось. Спасибо, большое!!!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |