soap npchk.nalog.ru

stepan96

Новичок
Добрый день, други!

Заранее прошу прощения, если тема уже поднималась и есть решение, но я что-то по поиску не нашел.
У ФМС есть сервис по проверке контрагентов. WSDL по адресу: http://npchk.nalog.ru/FNSNDSCAWS?wsdl

вот тестовый код:
Код:
#!/usr/bin/php
<?php
  $SERVICEADDR = "http://npchk.nalog.ru/FNSNDSCAWS?wsdl";
  ini_set("soap.wsdl_cache_enabled", "0");
  $client = new SoapClient($SERVICEADDR, array(
    'trace' => 1,
    'exceptions' => 1
  ));
  $a = ['NP' => [
    ['INN' => '301606936101'],
    ['INN' => '0101010101']
  ]];
  $r = $client->NdsRequest($a);
?>
и вот ответ:
Код:
PHP Fatal error:  Uncaught SoapFault exception: [HTTP] Not Found in /etc/WS/1.php:13
Stack trace:
#0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://npchk.na...', 'NdsRequest', 1, 0)
#1 /etc/WS/1.php(13): SoapClient->__call('NdsRequest', Array)
#2 /etc/WS/1.php(13): SoapClient->NdsRequest(Array)
#3 {main}
  thrown in /etc/WS/1.php on line 13
не могу понять, что не так. Подскажите, в каком направлении рыть

Спасибо заранее
 

stepan96

Новичок
Спасибо конечно за ссылку, но я изучил эти советы еще до того, как открывать тему. По данной ссылке ни слова об интерпретации ошибок soap, а это ключевой фактор. Прежде чем спрашивать совета у всезнающего олла провел предварительную работу, и совсем не ожидал получить ответ в стиле RTFM.

P.S. Быть может, вы объясните вашу реплику про абонента? Я так и не понял смысла.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
@stepan96, работать с SOAP на PHP очень неудобно. Каждый раз непонятная хрень.
Если пишет "Uncaught SoapFault exception" - лови этот exception http://php.net/manual/ru/class.soapfault.php
почитай что там в описании ошибки, подумай, возьми Zend\Soap\Client
а дебажить за тебя никто не будет
 

AnrDaemon

Продвинутый новичок
Спасибо конечно за ссылку, но я изучил эти советы еще до того, как открывать тему. По данной ссылке ни слова об интерпретации ошибок soap, а это ключевой фактор.
По данной ссылке есть намёк на то, что надо смотреть, что именно происходит в процессе выполнения программы.
Я вот взял Wireshark и посмотрел, что там творится… Что запрашивается и что возвращается.
 

MiksIr

miksir@home:~$
Короче, берем смотрим WSDL http://npchk.nalog.ru/FNSNDSCAWS?wsdl
Смотрим точку входа
Код:
<wsdl:port name="FNSNDSCAWS_Port" binding="tns:FNSNDSCAWSBinding">
<soap:address location="http://npchk.nalog.ru:80/FNSNDSCAWS"/>
</wsdl:port>
Тыркаем точку входа в браузере - 404 Страница не найдена
 

AnrDaemon

Продвинутый новичок
Не знаю, что у вас там не найдено, у меня всё найдено.
Код:
This document had no style information.
<!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Metro/2.1.1 (branches/2.1-6844; 2011-07-29T12:07:24+0000) JAXWS-RI/2.2.5 JAXWS/2.2. -->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp1="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:rq="http://ws.unisoft/FNSNDSCAWS/Request" xmlns:rs="http://ws.unisoft/FNSNDSCAWS/Response" xmlns:tns="http://ws.unisoft" targetNamespace="http://ws.unisoft">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
Веб-сервис проверки ИНН КПП контрагента по ФБД ЕГРН
</wsdl:documentation>
<wsdl:types>
<xs:schema elementFormDefault="qualified" targetNamespace="http://ws.unisoft">
<xs:import schemaLocation="http://npchk.nalog.ru:80/FNSNDSCAWS?xsd=1" namespace="http://ws.unisoft/FNSNDSCAWS/Request"/>
<xs:import schemaLocation="http://npchk.nalog.ru:80/FNSNDSCAWS?xsd=2" namespace="http://ws.unisoft/FNSNDSCAWS/Response"/>
</xs:schema>
</wsdl:types>
<wsdl:message name="NdsRequest">
<wsdl:part name="np_in" element="rq:NdsRequest"/>
</wsdl:message>
<wsdl:message name="NdsResponse">
<wsdl:part name="np_out" element="rs:NdsResponse"/>
</wsdl:message>
<wsdl:portType name="FNSNDSCAWS_Port">
<wsdl:operation name="NdsRequest">
<wsdl:input message="tns:NdsRequest"/>
<wsdl:output message="tns:NdsResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="FNSNDSCAWSBinding" type="tns:FNSNDSCAWS_Port">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="NdsRequest">
<soap:operation soapAction="NdsRequest" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="FNSNDSCAWS">
<wsdl:port name="FNSNDSCAWS_Port" binding="tns:FNSNDSCAWSBinding">
<soap:address location="http://npchk.nalog.ru:80/FNSNDSCAWS"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
 

stepan96

Новичок
Друзья, всем спасибо за ответы!

Я только начинаю разбираться с данной технологией и прошу прощения за некорректный вопрос, я имел в виду ошибка "not found" - это ошибка самого протокола soap (например, неверный запрос) или это ответ самого сервера на стороне ФМС.
В любом случае я выяснил, что ФМС официально рекламирует свой сервис (http://npchk.nalog.ru/ws.doc) по вышеуказанному адресу (http://npchk.nalog.ru/FNSNDSCAWS?wsdl), однако 1С использует в своей процедуре проверки совершенно другой адрес, а именно http://npchk.nalog.ru/FNSNDSCAWS_2?wsdl . Упростилась схема запроса, клиент заработал. Пока переделывал клиента и тестировал ФМС обновили описание. Ну не <censored> ли?

Спасибо еще раз за участие
 
Сверху