4
我需要在调用soap接口(特别是zimbra接口)时将属性添加到代表函数/方法的标签中。将属性添加到PHP中的实际功能标签soapCall
我了解如何将属性添加到参数标记,但不是实际的方法标记。
例如,将它们添加到参数,人们可能会做这样的事情:
$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="[email protected]" />
</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序列化器的迭代,以便能够发现d请求。
嗨,我有同样的问题,你找到一个解决方案吗?谢谢 – Vincent 2015-06-02 00:40:34
@Vincent不幸的是,我只是继续为需要它的部分手动序列化肥皂。 – 2015-06-08 19:33:49
非常感谢您花时间回复,我最终也使用了相同的解决方案(不是很干净,但至少可以工作)。 – Vincent 2015-06-09 08:27:32