【发布时间】:2019-04-12 09:42:02
【问题描述】:
使用 PHP,我需要在页脚中发送带有参数(哈希)的 SOAP 请求。我正在使用 SoapClient,但我无法弄清楚如何做到这一点,无论是在互联网搜索中,还是在 documentation 中。
这是我在 SoapUI 工具中用来测试的信封:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:abc="" xmlns:abc1="" xmlns:abc2="">
<soapenv:Header/>
<soapenv:Body>
<abc:Method>
<!--Optional:-->
<abc:request>
<abc1:Header>
<abc1:Username>Username</abc1:Username>
<abc1:Password>Password</abc1:Password>
<!--Optional:-->
<abc1:PublicKeyUid></abc1:PublicKeyUid>
</abc1:Header>
<abc1:Body>
<abc2:Id></abc2:Id>
</abc1:Body>
<abc1:Footer>
<abc1:Hash></abc1:Hash>
</abc1:Footer>
</abc:request>
</abc:Method>
</soapenv:Body>
</soapenv:Envelope>
有 The SoapHeader class 和 SoapClient::__setSoapHeaders 方法,但我没有找到与页脚相关的内容。
我无权访问服务器,应遵循上述结构。
我需要知道的是如何使用 SoapClient 发送页脚内的 HASH 参数。
提前感谢您的任何帮助或建议。
【问题讨论】:
-
正确使用 SOAP(假设 SOAP 服务器编写正确)不涉及使用 XML。
-
您基本上需要做的是创建
SoapClient的实例并将WSDL 传递给它的构造函数,然后调用其方法__getFunctions()和__getTypes()并检查它们返回的内容。描述可以使用刚刚创建的 SOAP 客户端调用的远程 SOAP 服务器的方法。不需要 XML。您可以使用 SOAPClient 对象上的常规方法调用来调用列出的方法。 -
@axiac。感谢您的评论!我知道它不涉及使用 XML,我编写了 XML 信封来显示预期的发送方式。我复制了我在 SoapUI 工具中使用的信封来测试 WSDL。
-
SoapHeader类处理信封 (<soapenv:Header/>) 中存在的 SOAP 标头。它与有效负载正文中的<abc1:Header>元素没有任何关系。 -
您显示的“页脚”位于 SOAP 请求的正文中,并且位于方法定义中。就 SOAP 客户端而言,您的方法采用单个参数
<request>,它可以是 XML 文档,也可以是具有三个子结构的结构。
标签: php footer soap-client