La question : existe-t-il un moyen de visualiser le XML qui serait créé avec un appel de fonction PHP SoapClient AVANT d'envoyer la requête ?

Contexte:

Je suis nouveau dans la communication WSDL, et j'ai un client qui veut que je développe en PHP, un moyen de communiquer avec un service WSDL écrit en ASP.NET. Je suis allé assez loin, mais je rencontre un problème lorsqu'il s'agit de passer un type complexe. J'ai essayé deux ou trois choses différentes jusqu'à présent.

1) Configuration d'une seule baie telle que $params->Person->name $params->Person->address

2) Configuration d'une seule baie $Person = array('name'=>"joe",'address' = "123");

Puis en passant dans l'appel en tant que paramètre "Person" => $Person ; et quelques autres. Mais à chaque fois que j'obtiens l'erreur

SoapException : le serveur n'a pas pu traiter la demande ---> System.Exception : la personne est requise. au nom du service.

Afin d'approfondir le dépannage, j'aimerais voir le document XML qui est envoyé pour voir s'il crée un type complexe comme je l'attends. Je crée le service en utilisant $client = new SoapClient('wsdldoc.asmx?WSDL'); en l'appelant avec $client->CreateUser($params);, puis en essayant de le voir en utilisant la fonction $client->__getLastRequest(); mais il n'atteint jamais le __getLastRequest car il rencontre une erreur fatale lors de l'appel de CreateUser ($ paramètres).

La question à nouveau : existe-t-il un moyen d'afficher le XML créé par l'appel CreateUser($params) SANS l'envoyer réellement et provoquer une erreur fatale

44
Joshua Cook 26 oct. 2009 à 21:17

2 réponses

J'ai trouvé ce fil en travaillant sur le même problème et j'ai été déçu parce que j'utilisais des classes qui étendaient déjà la classe SoapClient() et que je ne voulais pas trop faire de bêtises. Cependant, si vous ajoutez la balise "exceptions"=>0 lorsque vous lancez le cours, cela ne générera pas d'erreur fatale (bien qu'il imprimera une exception):

SoapClient($soapURL,array("trace" => 1,"exceptions"=>0));

Cela m'a permis d'exécuter __getLastRequest() et d'analyser le XML que j'envoyais.

8
andrewembassy 8 janv. 2013 à 03:15
1
Renvoie null si la validation échoue dans __call ou __soapcall.
 – 
tim
23 oct. 2013 à 09:56
Sauve-moi un jour. Sans exceptions définies sur 0, __getLastRequest ne renvoie rien.
 – 
S.M. Pat
31 mai 2019 à 07:06

Je ne crois pas qu'il existe un moyen de voir tout XML en cours de création... principalement parce que la fonction échoue lors de sa tentative de création/transmission.

Je ne sais pas si vous avez déjà essayé, mais si vous avez du mal à décider de ce que vous devez exactement transmettre à la fonction, vous pouvez utiliser :

$client->__getTypes();

http://us3.php.net/manual/en/soapclient.gettypes.php

J'espère que cela t'aides!

1
Hkachhia 21 déc. 2020 à 10:27
Compte tenu de l'exception qu'il obtient (« SoapException : le serveur n'a pas pu traiter la demande »), l'erreur est générée côté serveur, il devrait donc pouvoir inspecter le XML envoyé via __getLastRequest(), s'il utilise la « trace 'option.
 – 
Henrik Opel
26 oct. 2009 à 21:43