PHP 5 SAVON client retourne NULL quand le fichier WSDL fournis fonction est appelée
Je suis en train d'utiliser un webservice spécifiques des utilisateurs de mon application PHP. J'ai utilisé exactement la même webservice dans ASP.NET avec le succès.
En gros, je fais tout comme le PHP doc me dit, et j'utilise les mêmes méthodes/variables que j'ai utilisé dans ASP.NET (pour le webservice lui-même), mais je n'arrive pas à obtenir un résultat.
La fonction est répertoriée dans l' __getFunctions() et doit retourner anyType
, qui, si je comprends correctement, c'est l'équivalent de mixed
en PHP:
array(1) { [0]=> string(63) "anyType basicSearch(string $sharedSecret, string $searchParams)" }
Quand je fais appel basicSearch() cependant, il semble renvoie la valeur NULL.
basicSearch() est censé renvoyer un document XML avec les informations. Dans ASP.NET j'ai utilisé pour tout simplement jeté la réponse, je crois, et XmlDocument. Dois-je le faire en PHP? Avec la représentation d'un document XML (SimpleXML, DOM, etc.)?
Pourrait-il montrer que NUL juste parce que PHP ne peut pas comprendre le format?
Je fais quelque chose de mal en PHP? Ou dois-je chercher dans le webservice lui-même et essayez de déboguer sur le côté?
<?php
$client = new SoapClient($wsdl_url);
echo $client->__getFunctions();
echo "<br />\n";
echo $client->basicSearch($key, $req);
?>
PS: je suis en utilisant le PHP 5 de la bibliothèque. Peut-être l'aide d'un autre bibliothèque comme nu-savon aiderait? Il semble être de plus en doc en ligne à ce sujet.
Mise à jour:
L'aide d'un tableau de passer le paramètre ne fonctionne pas, le SAVON s'attend à séparer les arguments. Appelant __getLastRequest() retourne une chaîne de caractères de la concaténation de touche $et $req avec aucune autre XML. Appelant __getLastResponse() retourne une chaîne vide. Aucune exception n'est levée que ce soit. Il semble que PHP ne sait pas quoi faire avec les arguments que je lui donne, même si elle a analysé le fichier WSDL depuis, je reçois la fonction que j'ai utiliser dans la liste lorsque je l'appelle __getFunctions().
Toute aide serait appréciée.
La mise à jour": Toujours pas de solution de travail. Je suis perplexe...
Yup, je reçois maintenant le bon fonctionnement répertoriés. Merci, en fait, je savais que et manqués. Problème de mise à jour.
Votre exemple de code ne vérifie pas pour les exceptions qui pourraient faire jeter par le client - avez-vous omettre ce pour des raisons de simplicité de l'exemple? Si non, je te suggère d'ajouter que vérifier, via les try/catch, comme il peut vous donner quelques messages d'erreur utiles.
Pour des raisons de débogage, n'est-ce pas de ne pas avoir try/catch mieux que toutes les exceptions levées sera affiché, et n'est pas pris?
OriginalL'auteur | 2009-08-25
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé tout ça assez déroutant quand j'ai commencé à utiliser le SoapClient bibliothèques en php. La bonne façon de le format de ce genre de choses est comme suit:
Sans voir la réponse, je ne peux pas vous dire comment référencer les paramètres de retour, mais le son est stockée en tant que membre de la var d'un objet stdClass. Telle que vous faites référence à la retourne comme ça...
$reponse->paramName;
Une belle astuce, si vous gardez les array( "trace" => 1 ) de l'ensemble des options, c'est que vous pouvez appeler ces deux fonctions....
... pour voir le code xml qui est envoyé, pour voir si ses bien formé. Attention, SoapClient est assez buggé. Beaucoup mieux que nusoap bien, ne pas aller pour que le trash.
$client->__soapCall($functionName, $arguments)
mehtod, qui est principalement destiné aux non WSDL d'utilisation. Si vous utilisez le service, vous devez appeler directement les fonctions de par son nom, en passant les arguments séparément, comme l'OP.Mais je suis d'accord sur l'utilisation de l'option suivi et __ _ _ getLastRequest() pour vérifier la valeur de retour.
Comme Henrik Opel dit, le tableau de la méthode ne semble pas fonctionner. PHP se plaint d'un manque de paramètre. Lorsque j'utilise trace et __ _ _ getLastRequest() et __ _ _ getLastResponse (), je reçois une concaténation du premier paramètre et le second, puisque ma demande et une chaîne vide comme une réponse, comme si PHP ne sais pas quoi faire avec ma demande. Un appel à l' __getFunctions() renvoie la fonction que j'utilise, donc le WSDL lire... tout Cela est source de confusion.
J'ai trouvé d'où mon différences entrent dans, selon la façon dont votre wsdl est architecturé et la langue qu'/paquet est la publication du savon point de terminaison de service, vous pouvez vous retrouver dans une situation où les paramètres sont attendus, dans un tableau/objet. Les services soap avec qui je travaille à mon travail sont publiés par les EJB - ils sont de retour stdObjects et attendre le passage des paramètres dans des tableaux plutôt que de façon séquentielle.... de toute façon, juste pensé que je ferais un suivi.
OriginalL'auteur Josh
yeap
$client = new SoapClient( $wsdl_url, array( "trace" => 1 ) );
"trace" paramètre permet
OriginalL'auteur Stepan Suvorov