我正在尝试使用php连接到SOAP Web服务。我对使用php很陌生。
我可以连接到服务,下面的测试返回Web服务所有可用功能的列表。
$url = "http://...client_ip.../dkServiceDefault/dkWSItemsCGI.exe/wsdl/IItemService";
$client = new SoapClient($url);
var_dump($client->__getFunctions());
如果我尝试访问这些功能之一(例如NumberOfModifiedItems),则会收到一条错误消息,指出需要提供带有用户名和密码的SOAP标头。
根据SOAP服务的文档,标头需要如下所示:
<soap:Header>
<q1:BasicSecurity id="h_id1" xmlns:q1="urn:dkWSValueObjects">
<Username xsi:type="xsd:string">username</Username>
<Password xsi:type="xsd:string">password</Password>
</q1:BasicSecurity>
</soap:Header>
如何在php中创建此标头?如何将其附加到SoapClient?我有一个用户名和密码,但是我不知道如何创建确切的标头以发送到Web服务。我已经尝试了以下几个教程,但是似乎无法正常工作。
答案 0 :(得分:1)
您可以使用SoapHeader类和SoapClient::__setSoapHeaders方法传递SOAP标头:
<?php
$url = "http://...client_ip.../dkServiceDefault/dkWSItemsCGI.exe/wsdl/IItemService";
$client = new SoapClient($url);
$namespace = "urn:dkWSValueObjects";
$authentication = array(
'Username' => 'yourname',
'Password' => 'yourpassword'
);
$header = new SoapHeader($namespace, 'BasicSecurity', $authentication, false);
$client->__setSoapHeaders($header);
var_dump($client->__getFunctions());
?>