Solución:
Observación inicial: Para utilizar el __getLastRequest()
método correctamente, debe establecer la opción ‘seguimiento’ en verdadero en la construcción del cliente:
$client = new SoapClient('wsdldoc.asmx?WSDL', array('trace' => TRUE));
De esta manera, tu solicitud todavía será enviado (y, por lo tanto, aún fallan), pero puede inspeccionar el xml enviado después llamando $client->__getLastRequest()
.
Respuesta principal:
Para acceder al XML generado antes / sin enviando la solicitud, necesitaría subclasificar el SoapClient para anular el __doRequest()
método:
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.
Encontré este hilo mientras trabajaba en el mismo problema, y estaba molesto porque estaba usando clases que ya extendían la clase SoapClient () y no quería jugar demasiado con ella. Sin embargo, si agrega la etiqueta “excepciones” => 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.