0 / 0 / 0
Регистрация: 06.02.2015
Сообщений: 2
|
||||||||||||||||||||||||||||||||||||||||||||||
1 | ||||||||||||||||||||||||||||||||||||||||||||||
SOAP клиент для web-сервиса npchk.nalog.ru06.02.2015, 13:19. Показов 40159. Ответов 4
Всем привет.
Возникла необходимость написать клиент для сервиса http://npchk.nalog.ru. WSDL сервиса - http://npchk.nalog.ru/FNSNDSCAWS?wsdl XSD-схемы: запрос - http://npchk.nalog.ru:80/FNSNDSCAWS?xsd=1 ответ - http://npchk.nalog.ru:80/FNSNDSCAWS?xsd=2 В программе SoapUI запрос выглядит следующим образом: Кликните здесь для просмотра всего текста
Ответ: Кликните здесь для просмотра всего текста
Суть в том, что в запросе можно отправить ИНН и получить ответ, зарегистрирован этот ИНН или нет. Как видно в примере для каждого ИНН добавляется State со значением от 0 до 4. Использую Delphi 7. WSDL-importer сгенерировал такой код:
Как я понимаю, мне нужно описать эти типы. Они должны быть наследниками от TRemotable. Примерно так:
Кликните здесь для просмотра всего текста
Вызов выполняю так: Кликните здесь для просмотра всего текста
Файл request.xml: Кликните здесь для просмотра всего текста
В итоге получаю ошибку: Project Wsdl.exe raised exception class ERemotableException with message 'org.xml.sax.SAXParseException; cvc-elt.1.a: Cannot find the declaration of element 'np_in'.'. Элемент np_in встречается в описании wsdl http://npchk.nalog.ru/FNSNDSCAWS?wsdl. Помогите мне разобраться что к чему. Что я делаю не так?
0
|
06.02.2015, 13:19 | |
Ответы с готовыми решениями:
4
SOAP клиент для web-сервиса WCF клиент для Web-сервиса SOAP получение данных с web-сервиса Отображение xml из SOAP web-сервиса |
13107 / 5888 / 1707
Регистрация: 19.09.2009
Сообщений: 8,808
|
|||||||||||
10.02.2015, 02:04 | 2 | ||||||||||
Сообщение было отмечено Cyberg как решение
Решение
В данном случае SOAP ответ веб-службы не имеет сложной структуры. Поэтому можно вручную обработать вызовы на уровне HTTP протокола. Затем, разобрать XML код SOAP ответа и получить нужные данные. Для работы с HTTP протоколом можно воспользоваться компонентами Indy из палитры Delphi.
Если в SoapUI прослушать HTTP трафик при обращении к службе, увидим следующее: Код
Tue Feb 10 02:43:14 GST 2015:DEBUG:>> "POST /FNSNDSCAWS HTTP/1.1[\r][\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> "Accept-Encoding: gzip,deflate[\r][\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> "Content-Type: text/xml;charset=UTF-8[\r][\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> "SOAPAction: "NdsRequest"[\r][\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> "Content-Length: 398[\r][\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> "Host: npchk.nalog.ru:80[\r][\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> "Connection: Keep-Alive[\r][\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> "User-Agent: Apache-HttpClient/4.1.1 (java 1.5)[\r][\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> "[\r][\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> "<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://ws.unisoft/FNSNDSCAWS/Request">[\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> " <soapenv:Header/>[\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> " <soapenv:Body>[\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> " <req:NdsRequest>[\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> " <!--1 to 10000 repetitions:-->[\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> " <!-- <req:NP INN="?" KPP="?" DT="?"/> -->[\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> " <req:NP INN="525202471833"/>[\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> " <req:NP INN="525202471834"/>[\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> " </req:NdsRequest>[\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> " </soapenv:Body>[\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:>> "</soapenv:Envelope>" Tue Feb 10 02:43:14 GST 2015:DEBUG:<< "HTTP/1.1 200 OK[\r][\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:<< "Server: nginx/1.6.0[\r][\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:<< "Date: Mon, 09 Feb 2015 21:43:10 GMT[\r][\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:<< "Content-Type: text/xml;charset=utf-8[\r][\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:<< "Content-Length: 315[\r][\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:<< "Connection: keep-alive[\r][\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:<< "[\r][\n]" Tue Feb 10 02:43:14 GST 2015:DEBUG:<< "<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><NdsResponse xmlns="http://ws.unisoft/FNSNDSCAWS/Response" DTActFL="09.02.2015" DTActUL="09.02.2015"><NP INN="525202471833" State="2"/><NP INN="525202471834" State="4"/></NdsResponse></S:Body></S:Envelope>" Такое взаимодействие можно организовать следующим образом. На форму надо положить:
Memo1.Text: Код
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://ws.unisoft/FNSNDSCAWS/Request"> <soapenv:Header/> <soapenv:Body> <req:NdsRequest> <!--1 to 10000 repetitions:--> <!-- <req:NP INN="?" KPP="?" DT="?"/> --> <req:NP INN="525202471833"/> <req:NP INN="525202471834"/> </req:NdsRequest> </soapenv:Body> </soapenv:Envelope> Код модуля:
1
|
0 / 0 / 0
Регистрация: 06.02.2015
Сообщений: 2
|
|
10.02.2015, 11:14 [ТС] | 3 |
Спасибо. Всё замечательно работает. По началу не рассматривал возможность работы через Indy. Однажды только делал на нём отправку/приём почты.
0
|
13107 / 5888 / 1707
Регистрация: 19.09.2009
Сообщений: 8,808
|
|
10.02.2015, 11:20 | 4 |
Да - иногда проще через Indy сделать, чем возиться с импортом WSDL и прочими этапами. В моём предыдущем посте, в коде - там лишняя переменная потока Ms - надо убрать её.
0
|
0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 2
|
|
31.03.2016, 14:19 | 5 |
Дорогие друзья, я решаю подобную задачу в Turbo Delphi
и он подчеркивает красным строку "IdHTTP1.Request.ProcessHeaders;" с сообщением 'IdHTTP1Request' does not contain member named 'ProcessHeaders' при этом вылетает ошибка на строке "MsResp.Read(SUtf8[1], Length(SUtf8));" с сообщением "XML document must have a top level element line:0" помогите,пожалуйста. скажите, как быть?
0
|
31.03.2016, 14:19 | |
31.03.2016, 14:19 | |
Помогаю со студенческими работами здесь
5
Выбор средств разработки для web-сервиса Как задать параметр для web-сервиса? Что лучше выбрать для создания Web сервиса? Нужен web программист для реализация проекта сервиса грузоперевозок Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |