2014-09-24 75 views
0

我使用的是SoapClient的(zend2),但由於某些原因,無法獲得完整的數據回答PHP SoapClient的缺失數據

$client = new \SoapClient($host); 
$result = $client->getInvoice(); 

$導致的var_dump:

["ListInvoiceResult"] => object(stdClass)#282 (4) { 
["Status"] => int(1) 
["ErrorCode"] => NULL 
["ErrorMessage"] => string(0) "" 
["Invoice"] => array(1436) { 
[0] => object(stdClass)#283 (3) { 
["ID"] => int(12741) 
["Date"] => string(10) "2011.01.31" 
["DateSales"] => string(10) "2011.01.31" 
} 

上述目的失蹤可變InvoiceNumber

但是當我打電話__getLastResponse方法,我已經收到了完整的數據與InvoiceNumber

<p1:Invoice> 
<p1:ID>12741</p1:ID> 
<p1:InvoiceNumber>1|FA|2011|00633</p1:InvoiceNumber> 
<p1:Date>2011.01.31</p1:Date> 
<p1:DateSales>2011.01.31</p1:DateSales> 
</p1:Invoice> 

嗯。看起來很奇怪。但是,所有其他方法返回完整的數據,甚至可變發票編號..

回答

0

我想你應該嘗試使用SoapClient類的類映射選項,也可以查看映射類,例如:

class MyBook { 
public $title; 
public $author; 
} 

$server = new SoapClient("books.wsdl", array('classmap' => array('book' => "MyBook"))); 

你的情況你應該模擬ListInvoiceResult和發票類如:

class WS_ListInvoiceResult { 
public $Status; 
public $ErrorCode; 
public $ErrorMessage; 
public $Invoice; 
} 

class WS_Invoice { 
public $ID; 
public $Date; 
public $DateSales; 
public $InvoiceNumber; 
} 

,並連接到SOAP API這樣:

$server = new SoapClient("wsdl path", array('classmap' => array("ListInvoiceResult" => "WS_ListInvoiceResult", "Invoice" => "WS_Invoice"))); 

如果這無助於嘗試檢查您的WSDL,雖然基於響應似乎是好的。