2014-09-24 42 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,虽然基于响应似乎是好的。