加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

在PHP中处理SOAP标头

发布时间:2020-12-13 21:35:54 所属栏目:PHP教程 来源:网络整理
导读:我正在构建(在 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:APIKeyE4C5B
我正在构建(在 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处理Heartbeat消息没问题 – $server-> addFunction(“Heartbeat”);工作良好.但是,我希望能够处理< ns1:Header>的内容. enclosure – 所以我可以验证API密钥和站点ID,以确保它们应该是什么.

我看了here,(当然还有其他地方),但响应者似乎错过了问题的重点.有谁知道我如何访问标题元素来验证?我是否像在身体中使用方法一样为Header添加函数? ($服务器 – >调用addFunction( “头”);?)

首先十分感谢.

解决方法

找到了!这是你做的.

创建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密钥和站点ID,因此我创建了一个私有变量,如果API密钥和站点ID正确,则该变量设置为true.类中的所有其他函数在继续之前检查该变量是否为true,如果不是,则抛出SOAPFault.

希望这有助于在Google上遇到此问题的任何人.

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

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

编辑/ P.P.S.:无论出于何种原因,简单地调用$server-> addFunction(“Header”)对我来说都不起作用 – 我在尝试上面的setClass方法之前先尝试过.只是与人们对决.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读