2010-03-16 9 views
7

Jest wiele pytań dotyczących PHP i SOAP. Ale nie znalazłem odpowiedzi na moją sytuację.PHP I SOAP. Zmień kopertę

So. Używam do tego PHP SoapClient i WSDL. Obiekt wysyła to:

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

Ale muszę to:

<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> 

pytanie. Jak mogę to zrobić ze standardową klasą PHP SoapClient?

Dziękuję.

+0

Myślę, że to oznacza, że ​​Twój WSDL jest niepoprawny? Czy utworzyłeś również kawałek serwera SOAP? – Clutch

+0

Nie, WSDL jest poprawny, ponieważ inna biblioteka (kontrolka ActiveX dla C#) działa poprawnie i wysyła prawdziwy obszar nazw. Nie mogę zmienić serwera SOAP. Potrzebuję go użyć, aby uzyskać dostęp do funkcji serwisowych. – Oleg

+0

Jeśli uważasz, że powoduje to problem w komunikowaniu się z usługą SOAP, może to być niepoprawne założenie. Twój błąd może być związany z brakującymi właściwościami w wiadomości, tak jak mi się właśnie zdarzyło. – bytespider

Odpowiedz

5

mogę szukać odpowiedzi w 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(...); 
?> 

Ten kod Koperta zmiana życzenie. I potrzeba serwera ASP SOAP.