我需要向.NET Web服务(* .asmx)发送SOAP请求。我正在创建一个WSDL SoapClient对象,我需要发一个__soapCall发送2个参数:LoginName和Password。 XML应该是类似于工作的例子,但是创建的XML的参数都很混乱。
这是代码:
$client = new SoapClient("https://server/service.asmx?WSDL",array("trace"=>1,'soap_version' => SOAP_1_2));
$client->__setCookie('ticket',$ticket);
$param= array('LoginName'=>'name','Password'=> base64_encode('123456'));
$client->__soapCall('AddPlayer', $param);
echo "REQUEST:\n" . htmlentities($sweepStakesClient->__getLastRequest()) . "\n";
也尝试过:
$param = array(new SoapParam('name','LoginName'),new SoapParam(base64_encode('123456'),'Password'));
Echo返回:
REQUEST: <?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://server.com/Service">
<env:Body>
<ns1:AddPlayer/>
<Password>MTIyMzQ1NTY=</Password>
</env:Body>
</env:Envelope>
我需要它像:
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<AddPlayer xmlns="http://server.com/Service">
<request>
<LoginName>name</LoginName>
<Password>MTIyMzQ1NTY=</Password>
</request>
</AddPlayer>
</soap12:Body>
</soap12:Envelope>
答案 0 :(得分:0)
请注意php.net上提供的有关您在此处使用的方法的文档,SoapClient::__soapCall()
:
这是一个用于进行SOAP调用的低级API函数。通常,在WSDL模式下,SOAP函数可以作为SoapClient对象的方法调用。当soapaction未知时,此方法在非WSDL模式下非常有用,uri与默认值或发送和/或接收SOAP标头时不同。
您处于WSDL模式,因此您根本不需要使用它。而是直接调用该方法:
$client->AddPlayer('name', 'MTIyMzQ1NTY');
调试时,应该看到它与方法名称和两个参数匹配。如果不是,则回退到SoapClient::__call()
并再次使用带有命名参数的数组作为第二个参数。但是用命名方法做WSDL样式会更舒服。