[英]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.