在PHP中处理SOAP标头
我正在构建(在
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方法之前先尝试过.只是与人们对决. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |