2012-04-24 181 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