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