L'envoi d'entrée XML pour le WSDL à l'aide SoapClient
J'ai cette WSDL: https://secure.softwarekey.com/solo/webservices/XmlCustomerService.asmx?WSDL
Je suis en train d'utiliser SoapClient pour envoyer une demande à l' CustomerSearch méthode.
Le code que j'utilise est comme suit:
$url = 'https://secure.softwarekey.com/solo/webservices/XmlCustomerService.asmx?WSDL';
$client = new SoapClient($url);
$CustomerSearch = array(
'AuthorID' => $authorID,
'UserID' => $userID,
'UserPassword' => $userPassword,
'Email' => $customerEmail
);
$xml = array('CustomerSearch' => $CustomerSearch);
$result = $client->CustomerSearch(array('xml' => $xml));
Lorsque j'exécute le code, j'ai le PHP exception:
Fatal error: Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object has no 'any' property
J'ai aussi essayé ce pour le XML:
$xml = "
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<CustomerSearch>
<AuthorID>$authorID</AuthorID>
<UserID>$userID</UserID>
<UserPassword>$userPassword</UserPassword>
<Email>$customerEmail</Email>
</CustomerSearch>
";
Qui me donne les résultats suivants (à partir d'un print_r):
object(stdClass)#4 (1) { ["CustomerSearchResult"]=> object(stdClass)#5 (1) { ["any"]=> string(108) "-2Invalid Xml Document" } }
La la documentation dit que le XML d'entrée devrait ressembler à quelque chose comme ceci:
<CustomerSearch>
<AuthorID></AuthorID>
<UserID></UserID>
<UserPassword></UserPassword>
<SearchField></SearchField>
<SearchField></SearchField>
<!-- ...additional SearchField elements -->
</CustomerSearch>
Je suis assez nouveau dans le Savon et j'ai essayé de déconner (passage en raw, tapé XML), et ne pouvez pas sembler obtenir que cela fonctionne. Toute réflexion sur ce que j'ai fait de mal serait grandement apprécié.
Comment vous l'avez résolu, veuillez me donner la solution merci
Voir la accepté de répondre ci-dessous.
salut Axel, j'ai essayé la réponse ci-dessous avec CustomerSearchS son travail, mais sa ne fonctionne pas avec CustomerSearch en raison de </> je suppose que sa montre l'erreur . Je ne sais pas est-ce parce qu'il montre l'erreur
S'il vous plaît pouvez-vous m'aider merci Axel
OriginalL'auteur Axel | 2013-05-16
Vous devez vous connecter pour publier un commentaire.
Je pense que vous avez besoin de regarder plus dans la documentation (en ce qui concerne la
any
paramètre). Mais votre demande doit être quelque chose comme ceci:MODIFIER: C'est la façon dont je l'ai fait dans un projet similaire. Il peut ne pas être la meilleure pratique. SoapVar peut-être la meilleure manière de le faire (SoapVoar exemple
ANY_XML
).CustomerSearchS
au lieu de cela, comme vous pouvez le passer le XML comme une chaîne de caractères. J'ai aussi utiliséaddChild
pour générer le bon format XML.pour moi, je reçois cette erreur Erreur d'Exception! SAVON d'ERREUR: Codage: l'objet n'est pas "toute" la propriété
$client->CustomerSearch($params); lorsque je fais appel CustomerSearch me dire la reson pour que
je veux dire, qu'est-ce que tout ici
Je ne suis pas entièrement sûr, j'ai posé cette question il y a 2 ans. Si vous rencontrez un problème et que le code ci-dessus ne fonctionne pas, je vous recommande de compiler le code que vous utilisez dans une nouvelle question et la poser (y compris tous les détails de ce que vous essayez de le faire).
OriginalL'auteur denormalizer
essayer de passer
$client->CustomerSearch($CustomerSearch);
ou passer une chaîne$client->CustomerSearch($CustomerSearch)
retourne unInvalid XML Document
réponse.$result = $client->CustomerSearch(array('xml' => 'string')); xml est définie comme une chaîne de caractères
Le XML n'est pas une chaîne, c'est un tableau. J'ai essayé de passer le XML comme une chaîne de caractères, j'ai essayé de passer le XML par
new SoapVar(xml, XSD_STRING);$
, puis en passant à la méthode de Savon.OriginalL'auteur Rahul11