Я пытаюсь создать клиента, чтобы потреблять веб-сервис, и столкнулись с некоторыми странными проблемами. Вот мой код:Потребление SOAP webservice в PHP
$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 никогда не находит ничего. Это возвращаемый 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>
Я совсем n00b, когда речь идет о PHP, но, насколько я могу судить, это выглядит правильно (по крайней мере, близко). Я уверен, что я упускаю что-то явно очевидное.
Благодаря
Ваше первое исключение должно быть SoapFault. Является ли ответ на мыло тем, что вы получаете, когда вы vardump $ ratingList. Потому что я могу отлично контактировать с вашим XML-ответом. И насколько я знаю, DOMDocument не бросает никаких исключений. Но я могу ошибаться. Попробуйте удалить блок try-catch вокруг foreach. –
Спасибо за отзыв Михал. Кто-то на другом форуме предложил мне print_r переменную $ inventoryList, и я понял, что это объект. –