2010-03-16 15 views
7

Ci sono molte domande su PHP e SOAP. Ma non ho trovato risposta sulla mia situazione.PHP E SAPONE. Cambia busta

Così. Io uso PHP SoapClient e WSDL per questo. Oggetto invia questo:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.site.com"><SOAP-ENV:Body> 

Ma ho bisogno di questo:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body> 

domanda. Come posso farlo con la classe PHP standard SoapClient?

Grazie.

+0

Penso che il tuo WSDL sia errato? Hai creato anche il pezzo del server SOAP? – Clutch

+0

No, WSDL è corretto, perché un'altra libreria (controllo ActiveX per C#) funziona correttamente e invia uno spazio dei nomi vero. Non riesco a cambiare il server SOAP. Ho bisogno di usarlo per accedere alle funzioni di servizio. – Oleg

+0

Se si ritiene che ciò stia causando un problema nella comunicazione con il servizio SOAP, potrebbe essere un'ipotesi errata. Il tuo errore potrebbe essere correlato a proprietà mancanti nel tuo messaggio, come è appena successo a me. – bytespider

risposta

5

I Cerca risposta nella php.net

<?php 
class MSSoapClient extends SoapClient { 

    function __doRequest($request, $location, $action, $version) { 
     $namespace = "http://tempuri.com"; 

     $request = preg_replace('/<ns1:(\w+)/', '<$1 xmlns="'.$namespace.'"', $request, 1); 
     $request = preg_replace('/<ns1:(\w+)/', '<$1', $request); 
     $request = str_replace(array('/ns1:', 'xmlns:ns1="'.$namespace.'"'), array('/', ''), $request); 

     // parent call 
     return parent::__doRequest($request, $location, $action, $version); 
    } 
} 

$client = new MSSoapClient(...); 
?> 

Questo codice cambiamento Busta a richiesta. E ha bisogno del server ASP SOAP.

Problemi correlati