Come eseguire il debug di Soap in PHP?

Sto provando a fare una richiesta SOAP con PHP su un server, ma tutto quello che sto ottenendo è "Imansible connettersi all'host" quando è in esecuzione

$this->client->__soapCall("aMethod()", [$request_param_arrays])); 

Penso che il WSDL vada bene, dal momento che posso raggiungerlo nel mio browser e quando è in esecuzione

 $this->client->__getFunctions(); 

Ricevo un elenco di funzioni disponibili (come specificato in questo wsdl).

Ho bisogno di un certificato per effettuare chiamate SOAP a quel server, quindi forse questo è il problema? Ma non so come posso eseguire il debug di ciò che causa questo errore "Imansible connettersi all'host".

Qualche idea su cosa può causare questo errore o come posso trovare il problema?

Il mio codice finora:

 public function __construct($url, $wsdl = null) { $this->wsdl = $wsdl != null ? $wsdl : $url . '?wsdl'; $this->client = new SoapClient($this->wsdl, arrays( "trace" => "1", "local_cert" => realpath(__DIR__ . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . "..") . "cert.pfx", "passphrase" => "admin", )); Log::info(sprintf("New SoapClient created with WSDL: '%s'", $this->wsdl)); } 

Successivamente ho usato SoapUI per eseguire il debug di un po 'di più su questi problemi relativi a SOAP. SoapUI mi ha dato un'exception "SSL Handshake". Si è rivelato essere un certificato di chiave privata non valido che non corrispondeva al certificato di chiave pubblica sul server SOAP a cui mi stavo connettendo.

Però, continuo a non vedere come posso eseguire il debug di problemi come questo in PHP. Qualche idea? Fammi sapere.

Il modo più semplice e migliore per eseguire il debug di una richiesta SOAP consiste nel creare un'estensione SOAP (vedere commenti) che registra la richiesta SOAP non elaborata e la risposta SOAP non elaborata da un servizio Web o client di servizi Web utilizzando le seguenti funzioni della class SoapClient:

 SoapClient::__getLastRequestHeaders SoapClient::__getLastRequest SoapClient::__getLastResponseHeaders SoapClient::__getLastResponse 

Non dimenticare, per farlo funzionare, devi creare il tuo object SoapClient con l'opzione di traccia triggersta:

 $client = new MySoapClient($wsdlUrl, arrays('trace' => 1)); 

Un suggerimento aggiuntivo per lo sviluppo di soluzioni SOAP in PHP è quello di pulire la cartella tmp quando il contratto WSDL cambia (vedere il path della cartella tmp in phpinfo ()) per forzare PHP SoapClient a scaricare nuovamente i file WSDL e XSD usando i file memorizzati nella cache (fino a quando non scadenza).

Oltre a SoapUI puoi anche usare un proxy di tracing intermedio come Charles come descritto qui . Lo svantaggio di questo metodo piuttosto efficiente è che si aggiungono più livelli e quindi è probabile che si presentino nuovi problemi.

Esistono anche debugger SOAP commerciali che valgono la pena, come XML Spy SOAP Debugger o SOAPSonar che esegue validation e invocazione. In each caso, SoapUI è sempre un buon compagno.

Le informazioni di base sull'errore si possono trovare anche nel registro php e nel registro del server web. Assicurati di aver triggersto la logging completa / chiara del text.