使用PHP连接到SOAP Web服务的标题

时间:2019-01-28 13:47:10

标签: php soap header

我正在尝试使用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服务。我已经尝试了以下几个教程,但是似乎无法正常工作。

1 个答案:

答案 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());
?>