[英]PHP SOAP / Understanding WSDL
弄清楚了,請參閱下面的更新。
我正在嘗試通過PHP使用特定的Web服務(嘗試了本機和Zend SOAP客戶端),並且它僅返回失敗狀態。
我懷疑它與retrieveMemberInfo方法調用(authBean,memberInfoBean)中的多個bean有關。
有人可以看看WSDL並為我指出通過PHP客戶端進行此特定方法調用的正確方向嗎?
這是我到目前為止的內容:
$service = new SoapClient('https://qa.everbridge.net/ws3/services/WebServices3?wsdl');
$result = $service->retrieveMemberInfo(array('loginId', 'orgName', 'password'), array('firstname', 'lastname'));
var_dump($result);
更新資料
問題不在於最初想到的WSDL調用。 這是在retrieveMemberInfo方法調用中使用的參數的格式。 這是正確返回SOAP響應的完整解決方案:
$params->authBean->loginId = 'username';
$params->authBean->orgName = 'orgName';
$params->authBean->password = 'password';
$params->memberInfoBean->firstName = 'firstName';
$params->memberInfoBean->lastName = 'lastName';
$service = new SoapClient('https://qa.everbridge.net/ws3/services/WebServices3?wsdl');
$result = $service->retrieveMemberInfo($params);
var_dump($result);
現在,我只需要弄清楚如何解析返回的stdObject。
感謝您的協助。
這顯然是PHP中的錯誤。 該文件未完全讀取。 WSDL本身沒有錯。
XML解析錯誤是這樣的:
object(LibXMLError)#1 (6) { ["level"]=> int(3) ["code"]=> int(5) ["column"]=> int(5) ["message"]=> string(41) "Extra content at the end of the document " ["file"]=> string(56) "https://qa.everbridge.net/ws3/services/WebServices3?wsdl" ["line"]=> int(537) }
537行恰好在文件末尾之前。
我建議您將此報告到http://bugs.php.net/
問題似乎在該方法調用之前出現:
致命錯誤:未捕獲的SoapFault異常:[WSDL] SOAP錯誤:解析WSDL:無法從' https://qa.everbridge.net/ws3/services/WebServices3?wsdl '加載:文檔末尾的其他內容在/.../wsdl.php:2中的堆棧跟蹤:#0 /.../wsdl.php(2):SoapClient-> SoapClient(' https://qa.ever ...')#1 {main }在第2行的/.../wsdl.php中拋出
<?php
$service = new SoapClient('https://qa.everbridge.net/ws3/services/WebServices3?wsdl');
//$result = $service->retrieveMemberInfo(array('loginId', 'orgName', 'password'), array('firstname', 'lastname'));
echo '<pre>';
var_dump($result);
echo '</pre>';
?>
我使用wget從該URL提取,在返回的文檔末尾沒有發現任何其他異常。 我並不是很了解WSDL,但是我會跟蹤此錯誤的原因。
更新:
確認Artefacto的發現后,我有動力嘗試解決方法:
$curl = curl_init('https://qa.everbridge.net/ws3/services/WebServices3?wsdl');
curl_setopt($curl,CURLOPT_RETURNTRANSFER, true);
$wsdl_string = curl_exec($curl);
file_put_contents('/var/tmp/wsdl.xml',$wsdl_string);
try
{
$service = new SoapClient('/var/tmp/wsdl.xml');
$result = $service->retrieveMemberInfo(array('loginId', 'orgName', 'password'), array('firstname', 'lastname'));
print '<pre>';
var_dump($result);
print '</pre>';
}
catch (Exception $e)
{
print '<pre>';
var_dump(libxml_get_last_error());
print '</pre>';
}
當然,請刪除調試代碼。 您可能還需要在使用后刪除該臨時文件。
我嘗試使用PHP錯誤提交中提供的示例在本地復制它。
$tmpWsdlPath = tempnam(sys_get_temp_dir(), 'wsdl');
copy("https://qa.everbridge.net/ws3/services/WebServices3?wsdl", $tmpWsdlPath);
$service = new SoapClient($tmpWsdlPath);
$result = $service->retrieveMemberInfo(array('loginId', 'orgName', 'password'), array('firstName', 'lastName'));
它正確獲取WSDL文件並將其寫入temp文件夾。 它是整個文件。
它仍然返回失敗狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.