【问题标题】:Adding attributes to the actual function tag in PHP soapCall在 PHP soapCall 中为实际的函数标签添加属性
【发布时间】:2013-03-07 00:59:52
【问题描述】:

我需要在对soap接口(特别是zimbra接口)的调用中向表示函数/方法的标记添加属性。

我了解如何将属性添加到 parameter 标签,但不了解实际的方法标签。

例如,要将它们添加到参数中,可以执行以下操作:

    $var = new SoapVar('<account by="name">' . $account . '</account>', XSD_ANYXML);
    $params = array(new SoapParam($var, 'account'));

    try {
        $result = $this->SoapClient->__soapCall(
            "GetAccountInfoRequest", $params, null, $header
        );
    } catch (SoapFault $fault) {
        return false;
    } 

这将生成以下预期的 XML:

<body>
    <GetAccountInfoRequest>
        <account by="name">*someAccountName*</account>
    </GetAccountInfoRequest>
</body>

但是当需要向实际的方法标记添加属性时会发生什么,例如在Zimbra setPasswordRequest 中。

该请求需要 XML,与以下内容不同:

<body>
    <SetPasswordRequest id="someAccountId" newPassword="s3cr3tP@ss" />
</body>

也就是简单的表示方法的标签,带有属性和0个参数。

我尝试了以下方法(无济于事):

    $var = new SoapVar('<SetPasswordRequest id="'.$accountInfo->id
        .' newPassword="'.$newPass.'"/>', XSD_ANYXML);
    $params = array(new SoapParam($var, 'SetPasswordRequest'));

    try {
        $result = $this->SoapClient->__soapCall(
            "SetPasswordRequest", $params, null, $header
        );
    } catch (SoapFault $fault) {
        return false;
    }

这让我很懊恼的是,它创建了一个嵌套标签,如下所示:

<body>
    <ns1:SetPasswordRequest>
        <SetPasswordRequest id="5329ee70-fb5b-4fa1-a6cb-4c5a3f7f8a91 newPassword="DpJsPX3w?"/>
    </ns1:SetPasswordRequest>
</body>

目前,我正在为这样的请求手动序列化soap XML,并使用curl发送它,但是必须有一种方法可以使用SoapClient来做到这一点,我担心未来开发人员的代码可读性和可移植性,我不希望有人为了能够发送请求而不得不学习使用我自己的 SOAP 序列化程序迭代。

【问题讨论】:

  • 您好,我也遇到了同样的问题,您找到解决方案了吗?谢谢
  • @Vincent 很遗憾没有,我只是继续手动序列化肥皂以获取所需的部分。
  • 非常感谢您花时间回复,我最终也使用了相同的解决方案(不是很干净,但至少它有效)。

标签: php soap soap-client


【解决方案1】:

上面的代码中似乎缺少右双引号。

$var = new SoapVar('<SetPasswordRequest id="'.$accountInfo->id
        .'" newPassword="'.$newPass.'"/>', XSD_ANYXML);
    $params = array(new SoapParam($var, 'SetPasswordRequest'));

另请参阅此帖子以获取替代方法。 PHP SoapVar Object Attribute?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-04
    • 2021-05-15
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多