在PHP中使用SOAP Web服务
我试图构建一个客户端来使用Web服务,但遇到了一些奇怪的问题。这是我的密码:在PHP中使用SOAP Web服务,php,xml,web-services,soap,Php,Xml,Web Services,Soap,我试图构建一个客户端来使用Web服务,但遇到了一些奇怪的问题。这是我的密码: $securityCode = "A7D5B7D8-73E2-44D2-A6F8-4ACFB91843BF"; // The security code has been changed to an invalid code to prevent unwanted "visitors". $ProphecyConnect = new SoapClient("http://test.prophecyhealth.com/
$securityCode = "A7D5B7D8-73E2-44D2-A6F8-4ACFB91843BF"; // The security code has been changed to an invalid code to prevent unwanted "visitors".
$ProphecyConnect = new SoapClient("http://test.prophecyhealth.com/ProphecyConnect/ProphecyConnectXML.cfc?wsdl");
try
{
$params = array(SecurityCode => $securityCode, AssessmentID => -1, AssessmentType => "Test");
$assessmentList = $ProphecyConnect->__soapCall("GetAssessments", array($params));
}
catch(Exception $exception)
{
var_dump($exception);
}
$xml = new DOMDocument();
$xml->loadXML( $assessmentList );
try
{
foreach($xml->getElementsByTagName("assessment") as $assessment)
{
foreach($assessment->childNodes as $node)
{
printf(
"Name: %s - Type: %s - Value: %s\n",
$node->nodeName,
$node->nodeType,
urlencode($node->nodeValue)
);
}
}
}
catch(Exception $ex)
{
echo "Something happened.";
var_dump($ex);
}
我的问题是getElementByTagName从未找到任何东西。这是从Web服务返回的XML:
<object>
<success>true</success>
<count>3</count>
<assessments>
<assessment>
<assessmentid><![CDATA[123]]></assessmentid>
<assessmentname><![CDATA[Cardiac Cath Lab V1]]></assessmentname>
<assessmenttype><![CDATA[Test]]></assessmenttype>
<costpoints><![CDATA[1]]></costpoints>
<numberofquestions><![CDATA[23]]></numberofquestions>
<timelimit><![CDATA[1380]]></timelimit>
</assessment>
<assessment>
<assessmentid><![CDATA[456]]></assessmentid>
<assessmentname><![CDATA[Cardiac Progressive Care Exam A V1]]></assessmentname>
<assessmenttype><![CDATA[Test]]></assessmenttype>
<costpoints><![CDATA[1]]></costpoints>
<numberofquestions><![CDATA[75]]></numberofquestions>
<timelimit><![CDATA[4500]]></timelimit>
</assessment>
<assessment>
<assessmentid><![CDATA[789]]></assessmentid>
<assessmentname><![CDATA[Cardiac Progressive Care Exam B V1]]></assessmentname>
<assessmenttype><![CDATA[Test]]></assessmenttype>
<costpoints><![CDATA[1]]></costpoints>
<numberofquestions><![CDATA[75]]></numberofquestions>
<timelimit><![CDATA[4500]]></timelimit>
</assessment>
</assessments>
</object>
真的
3.
说到PHP,我相当喜欢n00b,但就我所知,这看起来是正确的(至少很接近)。我肯定我错过了一些显而易见的东西
谢谢,原来SOAP调用返回的是一个对象,而不是字符串。因此,当我将$assessmentList变量传递给$xml.loadXML()函数时,实际上需要传递包含xml的属性。就像这样:
$xml->loadXML($assessmentList->GetAssessmentsReturn);
这非常有效。结果表明,SOAP调用返回的是一个对象,而不是字符串。因此,当我将$assessmentList变量传递给$xml.loadXML()函数时,实际上需要传递包含xml的属性。就像这样:
$xml->loadXML($assessmentList->GetAssessmentsReturn);
这非常有效。您的第一个异常应该是SoapFault。是您在vardump$assessmentList时得到的soap响应。因为我可以完美地循环到您的xml响应。据我所知,DOMDocument不会抛出任何异常。但我可能错了。试着移除foreach周围的Try-catch块。谢谢你的回复。另一个论坛上有人建议我打印$assessmentList变量,我发现它是一个对象。您的第一个异常应该是SoapFault。是您在vardump$assessmentList时得到的soap响应。因为我可以完美地循环到您的xml响应。据我所知,DOMDocument不会抛出任何异常。但我可能错了。试着移除foreach周围的Try-catch块。谢谢你的回复。另一个论坛上有人建议我打印$assessmentList变量,我发现它是一个对象。