Intereting Posts
Laravel 5.4 Сброс пароля Получить оттенок цвета с помощью PHP как совместить это слово с помощью regex (php) Создание динамических URL-адресов в htaccess Класс «App \ Http \ Controllers \ DB» не найден, и я также не могу использовать новую модель Создайте уникальный уникальный токен csrf в Symfony Создание нескольких страниц из SQL-запроса regex: удалить весь текст внутри «двойных кавычек» (включая многострочные) Проверка PHP между pthreads и curl Получить все изображения из определенного альбома Facebook с помощью Graph API PHP SDK MySql PHP выбирает количество различных значений из данных, разделенных запятыми (теги) Переписывание строки JSON – группировка ключей по значению в новый массив с двумя уровнями глубины? Как проверить IP-адрес в пределах двух IP-адресов в PHP? PHP загружает ZIP-файл с другого сервера, если пароль правильный Простой пример пост-перенаправления-получения кода

Клиент SOAP, получающий пустой stdclass

Я не понимаю, почему я получаю пустой объект stdclass.

Вот код:

$client = new Zend_Soap_Client('http://urltocodethatgenerateswsdl?wsdl', $options); $result = $client->sayHello(array( 'who' => 'Heidi')); Zend_Debug::dump($client->getLastResponse()); Zend_Debug::dump($result); 

Вот что я получаю для lastResponse:

 <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://urltocodethatgenerateswsdl"> <SOAP-ENV:Body> <ns1:sayHelloResponse> <return>Say Hello Heidi</return> </ns1:sayHelloResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 

И вот дамп $ result

 object(stdClass)#23 (0) {} 

Почему это? Может кто-нибудь объяснить?

UPDATE: добавлен WSDL (автоматически сгенерированный Zend с использованием AutoDiscovery)

 <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://clxpreview.ch/index/soap" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="Service_Soap" targetNamespace="http://clxpreview.ch/index/soap"> <types> <xsd:schema targetNamespace="http://urltocodethatgenerateswsdl"> <xsd:complexType name="User"> <xsd:all> <xsd:element name="username" type="xsd:string" nillable="true"/> <xsd:element name="password" type="xsd:string" nillable="true"/> </xsd:all> </xsd:complexType> </xsd:schema> </types> <portType name="Service_SoapPort"> <operation name="getSystemTime"> <documentation>getSystemTime</documentation> <input message="tns:getSystemTimeIn"/> <output message="tns:getSystemTimeOut"/> </operation> <operation name="sayHello"> <documentation>sayHello</documentation> <input message="tns:sayHelloIn"/> <output message="tns:sayHelloOut"/> </operation> <operation name="getUser"> <documentation>setUser</documentation> <input message="tns:getUserIn"/> <output message="tns:getUserOut"/> </operation> <operation name="setUser"> <documentation>setUser</documentation> <input message="tns:setUserIn"/> <output message="tns:setUserOut"/> </operation> </portType> <binding name="Service_SoapBinding" type="tns:Service_SoapPort"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="getSystemTime"> <soap:operation soapAction="http://urltocodethatgenerateswsdl#getSystemTime"/> <input> <soap:body use="literal" namespace="http://urltocodethatgenerateswsdl"/> </input> <output> <soap:body use="literal" namespace="http://urltocodethatgenerateswsdl"/> </output> </operation> <operation name="sayHello"> <soap:operation soapAction="http://urltocodethatgenerateswsdl#sayHello"/> <input> <soap:body use="literal" namespace="http://urltocodethatgenerateswsdl"/> </input> <output> <soap:body use="literal" namespace="http://urltocodethatgenerateswsdl"/> </output> </operation> <operation name="getUser"> <soap:operation soapAction="http://urltocodethatgenerateswsdl#getUser"/> <input> <soap:body use="literal" namespace="http://urltocodethatgenerateswsdl"/> </input> <output> <soap:body use="literal" namespace="http://urltocodethatgenerateswsdl"/> </output> </operation> <operation name="setUser"> <soap:operation soapAction="http://urltocodethatgenerateswsdl#setUser"/> <input> <soap:body use="literal" namespace="http://urltocodethatgenerateswsdl"/> </input> <output> <soap:body use="literal" namespace="http://urltocodethatgenerateswsdl"/> </output> </operation> </binding> <service name="Service_SoapService"> <port name="Service_SoapPort" binding="tns:Service_SoapBinding"> <soap:address location="http://urltocodethatgenerateswsdl"/> </port> </service> <message name="getSystemTimeIn"/> <message name="getSystemTimeOut"> <part name="return" type="xsd:string"/> </message> <message name="sayHelloIn"> <part name="who" type="xsd:string"/> </message> <message name="sayHelloOut"> <part name="return" type="xsd:string"/> </message> <message name="getUserIn"> <part name="uid" type="xsd:int"/> </message> <message name="getUserOut"> <part name="return" type="tns:User"/> </message> <message name="setUserIn"> <part name="user" type="tns:User"/> </message> <message name="setUserOut"> <part name="return" type="xsd:string"/> </message> </definitions> 

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

кельвин

Я нашел причину, по которой он не работал. Мне пришлось отключить кэширование в конфиге и добавить параметр, чтобы не кэшировать в запросе, который я сделал.

Либо отключите кеширование с помощью ini_set, либо внесите изменения в ваш php.ini:

 ini_set("soap.wsdl_cache_enabled", 0); 

Я также добавил к моему запросу следующий параметр параметра:

 array('cache_wsdl' => WSDL_CACHE_NONE) 

Вот статья, которую я нашел в Stackoverflow: на PHP, как вы можете очистить кеш WSDL?

Кажется, что в этой статье обсуждалась одна и та же проблема:

Возвращаемый объект с Zend_Soap

Образец цитирования:

Вам нужно передать переменную параметра «classmap» в клиенте. См. Также http://www.php.net/manual/en/soapclient.soapclient.php и http://www.php.net/manual/en/soapclient.soapclient.php о параметре «classmap», который был передан в массив параметров. В основном это должен быть массив, сопоставляющий ваши классы с классами, определенными как возвращаемые объекты в файле WSDL.

Lucian