Php 如何创建这样的soap头?

Php 如何创建这样的soap头?,php,soap,Php,Soap,对第三方应用程序执行一些SOAP调用。它们提供这个soap头作为应用程序期望的示例。如何在PHP中创建这样的SOAP头 <SOAP-ENV:Header> <NS1:Security xsi:type="NS2:Security" xmlns:NS1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:NS2="urn:dkWSValueObj

对第三方应用程序执行一些SOAP调用。它们提供这个soap头作为应用程序期望的示例。如何在PHP中创建这样的SOAP头

<SOAP-ENV:Header>
    <NS1:Security xsi:type="NS2:Security" xmlns:NS1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:NS2="urn:dkWSValueObjects">
        <NS2:UsernameToken xsi:type="NS2:TUsernameToken">
            <Username xsi:type="xsd:string">XXXX</Username> 
            <Password xsi:type="xsd:string">XXX</Password> 
        </NS2:UsernameToken>
    </NS1:Security>
</SOAP-ENV:Header>
这是我得到的SOAP标题。(更多,但我删除了可能敏感的信息)


用户名
密码

PHP中的SOAP头处理实际上不是很灵活,我甚至可以说,特别是在头中使用两个名称空间,将使得仅使用某种类型的
SoapHeader
-构造就无法插入头

我认为处理这个问题的最佳方法是通过在扩展了
SoapClient
的自定义类中重写
SoapClient::\uu doRequest()
来自己塑造XML请求

class My_SoapClient extends SoapClient
{
    public function __doRequest($request, $location, $action, $version, $one_way = 0)
    {
        $xmlRequest = new DOMDocument('1.0');
        $xmlRequest->loadXML($request);

        /*
         * Do your processing using DOM 
         * e.g. insert security header and so on
         */

        $request = $xmlRequest->saveXML();
        return parent::__doRequest($request, $location, $action, $version, $one_way);
    }
}

请参阅以获取更多信息和一些示例。

我最终创建了自己的标题,但使用了nuSOAP,但您的回答为我指明了正确的方向。:)难道没有用于SOAP处理的PHP库,可以从web服务的WSDL/XSD生成PHP对象和服务接口吗?我正在PHP中使用SOAP客户端库。
<SOAP-ENV:Header>
    <ns2:TUsernameToken>
        <Username>username</Username> 
        <Password>password</Password> 
    </ns2:TUsernameToken>
</SOAP-ENV:Header>
class My_SoapClient extends SoapClient
{
    public function __doRequest($request, $location, $action, $version, $one_way = 0)
    {
        $xmlRequest = new DOMDocument('1.0');
        $xmlRequest->loadXML($request);

        /*
         * Do your processing using DOM 
         * e.g. insert security header and so on
         */

        $request = $xmlRequest->saveXML();
        return parent::__doRequest($request, $location, $action, $version, $one_way);
    }
}