【问题标题】:PHP - How to set footer in SoapClientPHP - 如何在 SoapClient 中设置页脚
【发布时间】: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 classSoapClient::__setSoapHeaders 方法,但我没有找到与页脚相关的内容。

我无权访问服务器,应遵循上述结构。

我需要知道的是如何使用 SoapClient 发送页脚内的 HASH 参数。

提前感谢您的任何帮助或建议。

【问题讨论】:

  • 正确使用 SOAP(假设 SOAP 服务器编写正确)不涉及使用 XML。
  • 您基本上需要做的是创建SoapClient 的实例并将WSDL 传递给它的构造函数,然后调用其方法__getFunctions()__getTypes() 并检查它们返回的内容。描述可以使用刚刚创建的 SOAP 客户端调用的远程 SOAP 服务器的方法。不需要 XML。您可以使用 SOAPClient 对象上的常规方法调用来调用列出的方法。
  • @axiac。感谢您的评论!我知道它不涉及使用 XML,我编写了 XML 信封来显示预期的发送方式。我复制了我在 SoapUI 工具中使用的信封来测试 WSDL。
  • SoapHeader 类处理信封 (&lt;soapenv:Header/&gt;) 中存在的 SOAP 标头。它与有效负载正文中的&lt;abc1:Header&gt; 元素没有任何关系。
  • 您显示的“页脚”位于 SOAP 请求的正文中,并且位于方法定义中。就 SOAP 客户端而言,您的方法采用单个参数 &lt;request&gt;,它可以是 XML 文档,也可以是具有三个子结构的结构。

标签: php footer soap-client


【解决方案1】:

正如IMSoPaxiac 所评论的,页脚(&lt;abc1: Footer&gt;) 只是信封主体的子结构,而不是标准的XML 信封元素。我没有意识到这一点,所以我没有在文档中找到它。

所以要将 HASH 发送到请求的结构,我需要在 body 元素上传递一个多维数组。代码如下所示:

$arrParameters = [
    'request'=>[
        'Header'=>[
            'Username'=>$strUsername,
            'Password'=>$strPassword
        ],
        'Body'=>[
            ...
        ],
        'Footer'=>[
            'Hash'=>$strHash
        ]
    ]
];

$SoapClient = new SoapClient(<WSDL URL>);

$resp = $SoapClient->method($arrParameters);


谢谢IMSoPaxiac

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    相关资源
    最近更新 更多