gpt4 book ai didi

php - 我怎样才能创建这样的 SOAP 头?

转载 作者:搜寻专家 更新时间:2023-10-31 20:56:34 27 4
gpt4 key购买 nike

对第 3 方应用程序进行一些 SOAP 调用。他们提供此 soap header 作为应用程序期望的示例。如何在 PHP 中创建这样的 SOAP header ?

<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>

我做了我认为正确的调用,并不断得到没有发送 header 的返回。

这是我的代码示例。

class SOAPStruct 
{
function __construct($user, $pass)
{
$this->Username = $user;
$this->Password = $pass;
}
}

$client = new SoapClient("http://www.example.com/service");

$auth = new SOAPStruct("username", "password");
$header = new SoapHeader("http://example.com/service", "TUsernameToken", $auth);

$client->__setSoapHeaders(array($header));
$client->__soapCall("GetSubscriptionGroupTypes", array(), NULL, $header)

这是我返回的 SOAP header 。 (它更多,但我删除了可能敏感的信息)

<SOAP-ENV:Header>
<ns2:TUsernameToken>
<Username>username</Username>
<Password>password</Password>
</ns2:TUsernameToken>
</SOAP-ENV:Header>

最佳答案

PHP 中的 SOAP header 处理实际上不是很灵活,我什至会说,尤其是在 header 中使用两个 namespace 将使得无法简单地通过使用 SoapHeader 来注入(inject) header >-某种类型的结构。

我认为处理此问题的最佳方法是通过在扩展 SoapClient 的自定义类中重写 SoapClient::__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);
}
}

请参阅SoapClient::__doRequest了解更多信息和一些示例。

关于php - 我怎样才能创建这样的 SOAP 头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/690262/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com