2012-04-24 183 views
2

我嘗試建立以下SOAP請求:PHP SOAP請求不正確

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <CheckSomething xmlns="http://service.mydomain.com/"> 
     <User> 
     <username>user123</username> 
     <password>geheim</password> 
     </User> 
     <ItemXY>something</ItemXY> 
    </CheckSomething> 
    </soap:Body> 
</soap:Envelope> 

這是我的PHP代碼

$soapClient = new SoapClient("http://service.mydomain.com/Services.asmx?wsdl",array("trace" => 1)); 
$Param = array (
    'username' => "user123", 
    'password' => "geheim" 
); 
$info = $soapClient->__call("CheckSomething", array("User" => $Param,"ItemXY" => "something")); 
echo "Request :\n".htmlspecialchars($soapClient->__getLastRequest()) ."\n"; 

結果是:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://service.mydomain.com/"> 
<SOAP-ENV:Body> 
<ns1:CheckSomething/> 
<param1>something</param1> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

這是WSDL本服務部分:

<s:element name="CheckSomething"> 
    <s:complexType> 
    <s:sequence> 
     <s:element minOccurs="0" maxOccurs="1" name="User" type="tns:Validation"/> 
     <s:element minOccurs="0" maxOccurs="1" name="ItemXY" type="s:string"/> 
    </s:sequence> 
    </s:complexType> 
</s:element> 

任何人都可以幫助我形成正確的SOAP請求嗎?

如何在結果中刪除ns1標記給出正確的Array User和ItemXY?

+0

看起來像你nedd來修改你的wsdl文件 – 2012-04-24 11:44:13

+0

我無法訪問wsdl文件,這個文件來自一個客戶 – kockiren 2012-04-24 11:53:24

+0

所以你的請求不執行? soap客戶端可以很好地使用SoapClient和預定義的WSDL文件。 – 2012-04-25 04:30:09

回答

5

後,我修改PHP代碼:

$soapClient = new SoapClient("http://service.mydomain.com/Services.asmx?wsdl",array("trace" => 1)); 
$user_param = array (
    'username' => "user123", 
    'password' => "geheim" 
); 
$service_param = array (
    'User' => $user_param, 
    "ItemXY" => "something" 
); 

$info = $soapClient->__call("CheckSomething", array($service_param)); 
echo "Request :\n".htmlspecialchars($soapClient->__getLastRequest()) ."\n"; 

它的作品!

+0

感謝您的回覆。對於讀者來說:有時只是將你的參數數組包裝到數組中就足夠了。 – 2015-08-20 19:42:30