gpt4 book ai didi

SoapHeader 子节点中的 PHP 命名空间

转载 作者:IT王子 更新时间:2023-10-29 00:03:31 24 4
gpt4 key购买 nike

PHP SoapClient header 。我在获取子节点中的 namespace 时遇到问题。这是我正在使用的代码:

$security = new stdClass;
$security->UsernameToken->Password = 'MyPassword';
$security->UsernameToken->Username = 'MyUsername';
$header[] = new SOAPHeader('http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', 'Security', $security);
$client->__setSoapHeaders($header);

这是它生成的 XML:

<ns2:Security>
<UsernameToken>
<Password>MyPassword</Password>
<Username>MyUsername</Username>
</UsernameToken>
</ns2:Security>

这是我希望它生成的 XML:

<ns2:Security>
<ns2:UsernameToken>
<ns2:Password>MyPassword</ns2:Password>
<ns2:Username>MyUsername</ns2:Username>
</ns2:UsernameToken>
</ns2:Security>

我需要将 namespace 引用获取到 UsernameToken、Password 和 Username 节点中。非常感谢任何帮助。

谢谢。

最佳答案

Davidright answer .他也说得对,这需要太多的努力和思考。这是一个变体,它封装了任何使用此特定 wsse 安全 header 的人的丑陋之处。

清理客户端代码

$client = new SoapClient('http://some-domain.com/service.wsdl');
$client->__setSoapHeaders(new WSSESecurityHeader('myUsername', 'myPassword'));

以及实现...

class WSSESecurityHeader extends SoapHeader {

public function __construct($username, $password)
{
$wsseNamespace = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';
$security = new SoapVar(
array(new SoapVar(
array(
new SoapVar($username, XSD_STRING, null, null, 'Username', $wsseNamespace),
new SoapVar($password, XSD_STRING, null, null, 'Password', $wsseNamespace)
),
SOAP_ENC_OBJECT,
null,
null,
'UsernameToken',
$wsseNamespace
)),
SOAP_ENC_OBJECT
);
parent::SoapHeader($wsseNamespace, 'Security', $security, false);
}

}

关于SoapHeader 子节点中的 PHP 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13465168/

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