soapclient ejemplo php xml soap soap-client

ejemplo - Inspeccionar XML creado por PHP SoapClient llamada antes/sin enviar la solicitud



web service php soap ejemplo (3)

Encontré este hilo mientras trabajaba en el mismo problema, y ​​me fastidió porque estaba usando clases que ya extendían la clase SoapClient () y no quería meterme demasiado con eso. Sin embargo, si agrega la etiqueta "exceptions" => 0 cuando inicia la clase, no arrojará un error fatal (aunque imprimirá una excepción):

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

Hacer eso me permitió ejecutar __getLastRequest () y analizar el XML que estaba enviando.

La pregunta: ¿hay alguna manera de ver el XML que se crearía con una llamada de función PHP SoapClient ANTES de que realmente envíe la solicitud?

fondo:

Soy nuevo en la comunicación WSDL y tengo un cliente que quiere que desarrolle en PHP, una forma de comunicarse con un servicio WSDL escrito en ASP.NET. He llegado bastante lejos, pero me encuentro con un problema cuando se trata de pasar un tipo complejo. He intentado un par de cosas diferentes hasta ahora.

1) Configurar una única matriz, como $params->Person->name $params->Person->address

2) Configurar una sola matriz $Person = array(''name''=>"joe",''address'' = "123");

luego pasar a la llamada como un param "Persona" => $ Persona; y algunos otros Pero cada vez que recibo el error

SoapException: el servidor no pudo procesar la solicitud ---> System.Exception: Person is Required. en el nombre del servicio.

Para avanzar en la solución de problemas, me gustaría ver el documento XML que se está enviando para ver si está creando un tipo complejo en la forma en que lo espero. Estoy creando el servicio usando $client = new SoapClient(''wsdldoc.asmx?WSDL''); llamándolo con $client->CreateUser($params); y luego tratando de verlo usando la función $client->__getLastRequest(); pero nunca llega a __getLastRequest porque golpea un error fatal al llamar a CreateUser ($ params).

Nuevamente, la pregunta es: ¿hay alguna manera de ver el XML creado por la llamada CreateUser ($ params) SIN enviarlo realmente y causar un error fatal?


No creo que haya una manera de que puedas ver el XML que se está creando ... principalmente porque la función falla en su intento de crearla / pasarla.

No estoy seguro de si ya lo intentó, pero si tiene problemas para decidir qué es exactamente lo que necesita para pasar a la función, puede usar:

$ client -> __ getTypes ();

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

¡Espero que esto ayude!


__getLastRequest() : para utilizar el método __getLastRequest() éxito, debe establecer la opción ''rastreo'' en verdadero en la construcción del cliente:

$client = new SoapClient(''wsdldoc.asmx?WSDL'', array(''trace'' => TRUE));

De esta forma, su solicitud será enviada (y, por lo tanto, aún fallará), pero puede inspeccionar el xml enviado posteriormente llamando a $client->__getLastRequest() .

Respuesta principal:

Para obtener acceso al XML generado antes / sin enviar la solicitud, necesitaría subclasificar el SoapClient para anular el método __doRequest() :

class SoapClientDebug extends SoapClient { public function __doRequest($request, $location, $action, $version, $one_way = 0) { // Add code to inspect/dissect/debug/adjust the XML given in $request here // Uncomment the following line, if you actually want to do the request // return parent::__doRequest($request, $location, $action, $version, $one_way); } }

Luego usaría esta clase extendida en lugar del SoapClient original mientras depura su problema.