2013-09-11 2 views
1

Я пытаюсь создать клиента, чтобы потреблять веб-сервис, и столкнулись с некоторыми странными проблемами. Вот мой код:Потребление 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, но, насколько я могу судить, это выглядит правильно (по крайней мере, близко). Я уверен, что я упускаю что-то явно очевидное.

Благодаря

+0

Ваше первое исключение должно быть SoapFault. Является ли ответ на мыло тем, что вы получаете, когда вы vardump $ ratingList. Потому что я могу отлично контактировать с вашим XML-ответом. И насколько я знаю, DOMDocument не бросает никаких исключений. Но я могу ошибаться. Попробуйте удалить блок try-catch вокруг foreach. –

+0

Спасибо за отзыв Михал. Кто-то на другом форуме предложил мне print_r переменную $ inventoryList, и я понял, что это объект. –

ответ

1

Оказывается, что SOAP-вызовов возвращает объект, вместо строки. Поэтому, когда я передавал переменную $ evaluationList функции $ xml.loadXML(), мне действительно нужно было передать свойство, содержащее xml. Например:

$xml->loadXML($assessmentList->GetAssessmentsReturn); 

Это сработало отлично.

Смежные вопросы