gpt4 book ai didi

php - 在 PHP 中处理 SOAP header

转载 作者:可可西里 更新时间:2023-11-01 00:27:48 27 4
gpt4 key购买 nike

我正在构建(用 PHP)一个 SOAP 服务器,该服务器由其 WSDL 配置为接受如下所示的消息:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://my.awesome.namespace/">
<SOAP-ENV:Header>
<ns1:Header>
<ns1:APIKey>E4C5BDE0-48DC-543C-1CA3-8E55C63F8E60</ns1:APIKey>
<ns1:SiteID>111</ns1:SiteID>
</ns1:Header>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:Heartbeat>
<ns1:Message>Hello world.</ns1:Message>
</ns1:Heartbeat>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

让我的 SOAPServer 处理心跳消息没有问题 - $server->addFunction("Heartbeat");工作正常。但是,我希望能够处理 <ns1:Header> 的内容附件 - 这样我就可以验证 API key 和站点 ID 以确保它们是它们应该的样子。

我看了here ,(当然还有其他地方),但响应者似乎错过了问题的重点。有谁知道我如何访问 header 元素进行验证?我是否像在正文中添加方法一样为 Header 添加函数? ($server->addFunction("Header");?)

非常感谢。

最佳答案

找到了!这就是您要做的。

创建您的 SOAP 服务器:

$server = new SoapServer($your_wsdl,$any_options);
$server->setClass($name_of_your_class);
$server->handle($location_of_request_data);

$name_of_your_class 中命名的类, 除了包含 $your_wsdl 中定义的每项服务的功能外, 还应该包含一个以你在 <SOAP-ENV:Header> 中的任何内容命名的函数标签外壳。我有<ns1:Header> , 所以我的函数被命名为 Header .把你需要的任何逻辑放在那里。对我来说,我想验证 API key 和站点 ID,因此我创建了一个私有(private)变量,如果 API key 和站点 ID 正确,则变量设置为 true。该类中的所有其他函数在继续之前检查该变量是否为真,如果不是,则返回 SOAPFault。被抛出。

希望这对在 Google 上遇到此问题的任何人有所帮助。

P.S.:对于 $server->setClass() 中定义的类中的函数,不要忘记它们必须按照 WSDL 中定义的顺序接受参数。这把我绊倒了。

祝所有其他 PHP/SOAP 开发人员好运 - 似乎我们都需要它。

编辑/P.P.S.:无论出于何种原因,只需调用 $server->addFunction("Header")对我不起作用 - 我在尝试 setClass 之前先尝试过上面的方法。只是提醒大家。

关于php - 在 PHP 中处理 SOAP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1948897/

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