Php 如何创建这样的soap头?
对第三方应用程序执行一些SOAP调用。它们提供这个soap头作为应用程序期望的示例。如何在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-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);
}
}