2015-12-24 49 views
0

我已經創建了對soap服務的非wsdl調用。 _getLastResponse()返回預期的響應,但是當我print_r($result)時,我剛剛得到第一個節點。爲什麼當我print_r調用結果時,我的soap響應僅返回第一個元素

要查看與響應的測試頁轉到:http://primevaluationservices.com/myriad/test.php

下面是我的代碼:

$p = new StdClass(); 
$p->MDHeader = new StdClass(); 
$p->MDHeader->userid = "[email protected]"; 
$p->MDHeader->password = "prime123456"; 
$p->RECORDSET = new StdClass(); 
$p->RECORDSET->row->id = "0"; 

$client = new SoapClient(null, array('location' => "https://uat.myriadexchange.com/isocket/listUserInspections/", 
           'uri'  => "https://uat.myriadexchange.com/isocket/listUserInspections/", 
           'soap_version' => SOAP_1_1, 
           'features' => SOAP_USE_XSI_ARRAY_TYPE, 
           'use' => SOAP_LITERAL, 
           'style' => SOAP_DOCUMENT, 
           'trace' => 1, 
           'exceptions'=> 0)); 


$result = $client->_soapCall('test',$p); 
echo("<br>Dumping request headers:<br>" .$client->__getLastRequestHeaders()."<br>"); 
echo "<hr>"; 
echo("<b>Dumping request XML:<br>".htmlspecialchars($client->__getLastRequest())."<br>"); 
echo "<hr>"; 
echo("<br>Dumping response headers:<br>".$client->__getLastResponseHeaders()."<br>"); 
echo "<hr>"; 
echo("<br>Dumping response XML:<br>".htmlspecialchars(urldecode($client->__getLastResponse()))."<br>"); 
echo "<hr>"; 
echo("<br>Dumping response record:<br>"); 
print_r($result); 

這是我print_r($result)

Array ([userid] => [email protected] [password] => prime123456 [batchid] => 1234)

這是結果_getLastResponse()

的結果
<SOAP-ENV:Envelope xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><MDHeader><userid>[email protected]</userid><password>prime123456</password><batchid>1234</batchid></MDHeader><RECORDSET><ROW id='0'>%3CINSPECTIONS%3E%3CFOLDER_ID%3E835410936%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835221706%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835222299%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835222333%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835222368%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835222426%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835222460%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835222495%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835222520%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835222553%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835222587%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835222622%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835222647%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835222680%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835222714%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835222749%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835222774%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835222807%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835223569%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835223536%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835223603%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835224239%3C%2FFOLDER_ID%3E%3CFOLDER_ID%3E835353387%3C%2FFOLDER_ID%3E%3C%2FINSPECTIONS%3E</ROW></RECORDSET></SOAP-ENV:Body></SOAP-ENV:Envelope> 

任何幫助,將不勝感激。

回答

0

看起來像你的「測試」服務只是迴應發送的XML。它看起來像發送的XML有2個根元素,MDHeaderRECORDSET。我相信SOAP請求和響應應該只有1個根元素。看起來好像不是接收2個根元素失敗,_soapCall足夠寬容,它返回的結果僅包含第1個根元素及其後代。試試這個:

$p = new StdClass(); 
$p->MDHeader = new StdClass(); 
$p->MDHeader->userid = "[email protected]"; 
$p->MDHeader->password = "prime123456"; 
$p->MDHeader->RECORDSET = new StdClass(); 
$p->MDHeader->RECORDSET->row->id = "0"; 

這樣,一切都會在1根元素下,MDHeader

+0

毫無疑問,發回的請求和響應是正確的。我已經與供應商進行了驗證。這是與print_r顯示不正確的數組。 –

相關問題