PHP SoapClient缺少数据

PHP SoapClient缺少数据,php,soap,zend-framework2,soap-client,Php,Soap,Zend Framework2,Soap Client,我使用的是SoapClient(zend2),但由于某些原因,无法获得完整的数据答案 $client = new \SoapClient($host); $result = $client->getInvoice(); $result var_dump: ["ListInvoiceResult"] => object(stdClass)#282 (4) { ["Status"] => int(1) ["ErrorCode"] => NULL ["ErrorMessage

我使用的是SoapClient(zend2),但由于某些原因,无法获得完整的数据答案

$client = new \SoapClient($host);
$result = $client->getInvoice();
$result 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>

12741
1 | FA | 2011 | 00633
2011.01.31
2011.01.31

嗯,看起来很奇怪。但是所有其他方法都会返回完整的数据,甚至是可变发票号。

我认为您应该尝试在SoapClient中使用classmap选项,或者检查您映射的类,例如:

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

$server = new SoapClient("books.wsdl", array('classmap' => array('book' => "MyBook")));
class WS_ListInvoiceResult {
public $Status;
public $ErrorCode;
public $ErrorMessage;
public $Invoice;
}

class WS_Invoice {
public $ID;
public $Date;
public $DateSales;
public $InvoiceNumber;
}
在您的情况下,您应该为ListInvoiceResult和Invoice类建模,例如:

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

$server = new SoapClient("books.wsdl", array('classmap' => array('book' => "MyBook")));
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没有帮助,尽管基于响应,它看起来还可以