php - 将属性添加到 PHP soapCall 中的实际功能标记

标签 php soap soap-client

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

我了解如何将属性添加到 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 执行此操作,我担心 future 开发人员的代码可读性和可移植性,我不希望有人必须学习使用我自己的 SOAP 序列化程序迭代才能发送请求。

最佳答案

看起来上面的代码中缺少一个结束双引号。

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

另请参阅这篇文章以了解替代方法。 PHP SoapVar Object Attribute?

关于php - 将属性添加到 PHP soapCall 中的实际功能标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15481095/

相关文章:

java - 从消息响应中删除 soap header

php - 根据PHP中另一列的顺序对MySQL数据库中的项目进行排序

wcf - 使用 WCF 发送签名请求并接收未签名响应

javascript - 将数组值从 php 复制到 javascript

delphi - 如何在调用Web服务期间防止对话框(基本身份验证提示)

java - 使用 Apache CXF 生成的 SOAP Web 服务的错​​误处理和重试机制

php - 总是在 soap 客户端 php 中收到作为无效 session token 的响应

php - 如何缓存 php soapclient 响应?

php - MySql select by score desc - 当有多个总分时....奇怪

javascript - 如何在 php 中从 javascript 解码序列化 url