Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai un appel soap ici :
try { $client = new Zend_Soap_Client('http://www.monSite.com/syndication.asmx?WSDL'); pr($client->getFunctions()); } catch(Zend_Exception $e){ pr($e->getMessage()); }
Le pr() me renvoi un tableau de fonctions :
Array ( [0] => getFieldsSearchResponse getFieldsSearch(getFieldsSearch $parameters) [1] => DataSet getFieldsSearch(string $idModule) )
Je souhaiterais utiliser la fonction "getFieldsSearch", mais je ne sais pas comment m'y prendre. J'ai bien un id de module $idModule, mais je ne sais pas comment l'utiliser.
Voici mon test :
try { $client = new Zend_Soap_Client('http://www.monSite.com/syndication.asmx?WSDL'); pr($client->getFieldsSearch()); } catch(Zend_Exception $e){ pr($e->getMessage()); }
Mais cela me renvoie cette erreur :
Fatal error: Uncaught SoapFault exception: [soap:Client] Unable to handle request without a valid action parameter. Please supply a valid soap action. in /Zend/Soap/Client.php:1062 SoapClient->__soapCall('getFieldsSearch', Array, NULL, NULL, Array) #1 [internal function]: Zend_Soap_Client->__call('getFieldsSearch', Array) #2 Zend_Soap_Client->getFieldsSearch()
(...)
Que veut dire "Unable to handle request without a valid action parameter. Please supply a valid soap action." ???
Dernière modification par efusien (16-06-2009 18:48:53)
Hors ligne
Bonsoir,
La fonction que tu appelles attend un paramètre on dirait:
getFieldsSearch(getFieldsSearch $parameters)
L'erreur vient sans doute de là
A+ benjamin.
Hors ligne
Effectivement,
Si je fais un $client->getTypes() je trouve le tableau suivant :
Array ( [0] => struct getFieldsSearch { string idModule; }
Seulement voilà, même en passant en paramètre l'ID de mon module, cela retourne la même erreur :
"Unable to handle request without a valid action parameter. Please supply a valid soap action."
Mon code :
try { $client = new Zend_Soap_Client('http://www.monSite.com/syndication.asmx?WSDL'); pr($client->getFieldsSearch('IDdeMonModule')); } catch(Zend_Exception $e){ pr($e->getMessage()); }
Pour info, voici la requête que je suis censé envoyé au serveur soap :
POST /syndication.asmx HTTP/1.1 Host: http://www.monSite.com Content-Type: text/xml; charset=utf-8 Content-Length: (...) SOAPAction: "http://www.monSite.com/webservices/getFieldsSearch" <?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> <getFieldsSearch xmlns="http://www.monSite.com/webservices/"> <idModule>string</idModule> </getFieldsSearch> </soap:Body> </soap:Envelope>
Avec Zend_soap_client, est t-il possible d'afficher la requête que l'on envoie au serveur ? Il y a bien __getLastRequest(), mais vu que mon appel renvoie un fatal error rien n'est affiché...
Quel est le moyen pour passer le "SOAPAction", dont la valeur serait ici "http://www.monSite.com/webservices/getFieldsSearch" ? C'est peut-être là le soucis ?
Je ne trouve pas de doc vraiment précise sur le zend_soap_client sur le web, seulement des exemples très simples, avec lesquels il est difficile de s'appuyer...
Hors ligne
En utilisant la classe SoapCLient j'ai un résultat en retour :
try { $client = new SoapClient('http://www.monSite.com/syndication.asmx?WSDL'); $response = $client->getFieldsSearch(array('idModule' => 'myIDModuleString')); pr($response); } catch(Zend_Exception $e){ pr($e); }
Le retour :
stdClass Object ( [getFieldsSearchResult] => stdClass Object ( [schema] => [any] => mesResultatsIci.......... ) )
Ici j'ai donc bien ma fonction getFieldsSearch qui marche, avec en paramètre idModule (string). Pourquoi avec le Zend_soap_client cela ne fonctionne pas ??? :-/
Hors ligne
Le problème est résolu : cette erreur provient du fait que je n'ai pas indiqué la version de SOAP.
Il suffit donc d'indiquer la version de SOAP dans les options :
$wsdl = 'http://www.monSite.com/syndication.asmx?WSDL'; $options = array('soap_version' => SOAP_1_1); $client = new Zend_Soap_Client($wsdl, $options);
Ici j'utilise par exemple la constante SOAP_1_1.
Hors ligne