我编写了非常简单的代码来检索soap数据:
$wsdl = 'https://...';
$client = new SoapClient($wsdl, ['trace' => true]);
$soap_parameters = [
'leveranciernaam' => 'xxx',
'leveranciersleutel' => 'yyy',
'brinnummer' => 'zzzz',
'schooljaar' => 2012
];
$response = $client->getLeerlingen($soap_parameters);
令我惊讶的是,回归与使用基于Java的GUI应用程序时收到的回报不同。 PHP SoapClient响应中的某些字段始终缺失。
为了确保在转换为stdObjects时没有丢失内容,我使用了trace
选项并从$client->__getLastResponse();
中提取了实际的XMl
仍然没有那些领域 - 一直有数百条记录。
基于Windows Java的客户端响应:
<return>
<leerlingen>
<leerling>
<id>353226866</id>
<roepnaam>Evline</roepnaam>
...
<achternaam>Staalstra</achternaam>
<inschrijvingen>
<inschrijving>
<id>353226867</id>
<datumInschrijving>2007-08-20T00:00:00+02:00</datumInschrijving>
<schoolVanHerkomst>7138</schoolVanHerkomst>
<vervolgSchool>7138</vervolgSchool>
<onderwijsSoortBestemming>
<id>4085</id>
</onderwijsSoortBestemming>
</inschrijving>
</inschrijvingen>
</leerling>
...
</leerlingen>
<brins>
<brin>
<id>47187537</id>
<brinNummer>02YN02</brinNummer>
<schoolNaam>De Ambelt School V LZK</schoolNaam>
</brin>
...
</brins>
</return>
我得到的回应:
<return>
<leerlingen>
<leerling>
<id>353226866</id>
<roepnaam>Evline</roepnaam>
...
<achternaam>Staalstra</achternaam>
<inschrijvingen>
<inschrijving>
<id>353226867</id>
<datumInschrijving>2007-08-20T00:00:00+02:00</datumInschrijving>
<inschrijvingType>1766564</inschrijvingType>
</inschrijving>
</inschrijvingen>
</leerling>
...
</leerlingen>
</return>
PHP客户端没有(或没有正确解析)元素schoolVanHerkomst
中的任何元素vervolgSchool
,onderwijsSoortBestemming
和inschrijving
,它完全错过了brins
为简洁起见,我省略了其他工作得很好的深层嵌套元素
由于预期结果是动态的,因此WDSL(https://acceptatie.parnassys.net/bao/services/cxf/v1/generic?wsdl)不会定义输出。
发生了什么事?似乎PHP Soap客户端的可靠性低于Java Soap客户端