PHP SOAP为什么没有发送参数?

时间:2015-07-02 18:39:48

标签: php xml soap

我需要向.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>

1 个答案:

答案 0 :(得分:0)

请注意php.net上提供的有关您在此处使用的方法的文档,SoapClient::__soapCall()

  

这是一个用于进行SOAP调用的低级API函数。通常,在WSDL模式下,SOAP函数可以作为SoapClient对象的方法调用。当soapaction未知时,此方法在非WSDL模式下非常有用,uri与默认值或发送和/或接收SOAP标头时不同。

您处于WSDL模式,因此您根本不需要使用它。而是直接调用该方法:

$client->AddPlayer('name', 'MTIyMzQ1NTY');

调试时,应该看到它与方法名称和两个参数匹配。如果不是,则回退到SoapClient::__call()并再次使用带有命名参数的数组作为第二个参数。但是用命名方法做WSDL样式会更舒服。