Я работаю над проектом, где мне нужно получить некоторые данные из webservices и вам нужно показать его на экране с помощью PHP.Только первый элемент ответа видимый - php
Когда я исполняю WebService в SoapUI я получаю такой ответ:
<soapenv:Envelope xmlns:ns="http://schemas.test.nl/are/planning/business/1.0" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<header xmlns="http://schemas.cordys.com/General/1.0/">
<msg-id>00505600-0646-11e5-fcef-ea885aa59f6e</msg-id>
</header>
</soapenv:Header>
<soapenv:Body>
<tonenbeschikbaarheidportaalresponse xmlns="http://schemas.test.nl/are/planning/business/1.0">
<tonenbeschikbaarheidportaalresult>
<beschikbaarheidslijst starttime="06:00:00.0">
<day daycode="sun">
<available>0</available>
<starttimedate>2016-03-06T05:00:00.0</starttimedate>
</day>
<day daycode="mon">
<available>0</available>
<starttimedate>2016-03-07T05:00:00.0</starttimedate>
</day>
<day daycode="tue">
<available>0</available>
<starttimedate>2016-03-08T05:00:00.0</starttimedate>
</day>
<day daycode="wed">
<available>0</available>
<starttimedate>2016-03-09T05:00:00.0</starttimedate>
</day>
<day daycode="thu">
<available>0</available>
<starttimedate>2016-03-10T05:00:00.0</starttimedate>
</day>
<day daycode="fri">
<available>0</available>
<starttimedate>2016-03-11T05:00:00.0</starttimedate>
</day>
<day daycode="sat">
<available>1</available>
<starttimedate>2016-03-12T05:00:00.0</starttimedate>
</day>
</beschikbaarheidslijst>
<beschikbaarheidslijst starttime="07:00:00.0">
<day daycode="sun">
<available>0</available>
<starttimedate>2016-03-06T06:00:00.0</starttimedate>
</day>
<day daycode="mon">
<available>0</available>
<starttimedate>2016-03-07T06:00:00.0</starttimedate>
</day>
<day daycode="tue">
<available>0</available>
<starttimedate>2016-03-08T06:00:00.0</starttimedate>
</day>
<day daycode="wed">
<available>0</available>
<starttimedate>2016-03-09T06:00:00.0</starttimedate>
</day>
<day daycode="thu">
<available>0</available>
<starttimedate>2016-03-10T06:00:00.0</starttimedate>
</day>
<day daycode="fri">
<available>0</available>
<starttimedate>2016-03-11T06:00:00.0</starttimedate>
</day>
<day daycode="sat">
<available>1</available>
<starttimedate>2016-03-12T06:00:00.0</starttimedate>
</day>
</beschikbaarheidslijst>
</tonenbeschikbaarheidportaalresult>
</tonenbeschikbaarheidportaalresponse>
</soapenv:Body>
</soapenv:Envelope>
Что мне нужно, это то, что я могу цикл по каждому beschikbaarheidslijst (список наличия на голландском языке).
Проблема в том, что ответ в моем коде почти пуст (или невидим): Я проверил, дал ли веб-сервис в другой системе ответ со значениями и сделал это.
$beschikbaarheid = $response[1];
var_dump($beschikbaarheid);
Выход: объекта (StdClass) # 51 (1) { [ "tonenbeschikbaarheidportaalresult"] => объект (StdClass) # 52 (0) { } }
Также с print_r остальные объекты являются невидимыми:
$beschikbaarheid = $response[1];
print_r($beschikbaarheid);
Выход: StdClass Объект ( [Тонен beschikbaarheidportaalresult] => StdClass Object ( ) )
Я хочу, чтобы петля через ответ $, но наличие мест код не попасть. $ item - NULL.
foreach($beschikbaarheid->tonenbeschikbaarheidportaalresult->children('http://schemas.test.nl/are/planning/business/1.0')->beschikbaarheidslijst as $item)
{
echo '<pre>';
var_dump(get_object_vars($item)); // gives NULL
echo '</pre>';
$data[] = get_object_vars($item);
}
Когда я извлекаю детей («http://schemas.test.nl/are/planning/business/1.0») -> тогда я получаю уведомление, так что пространство имен должно быть правильным:
Notice: Undefined property: stdClass::$beschikbaarheidslijst in D:\xampp\htdocs\prive\CCP\includes\inc_formulieren.php on line 187
Можете ли вы сказать мне, как я могу петлю через beschikbaarheidslijst элементов ? Должен ли я что-то сделать с атрибутом starttime = "06: 00: 00.0"?
<beschikbaarheidslijst starttime="06:00:00.0">
Получаю ответ на мыло из webservice.
$response = call_service($serviceOperation, $request, $entiteit, $backend);
echo '<pre> response from webservice ';
var_dump($response);
echo '</pre>';
response from webservice array(2) {
[0]=>
int(0)
[1]=>
object(stdClass)#51 (1) {
["tonenbeschikbaarheidportaalresult"]=>
object(stdClass)#52 (0) {
}
}
}
обслуживание вызовов с использованием SoapClient и расширения:
class SoapClientNG extends \SoapClient
{
public function __doRequest($req, $location, $action, $version = SOAP_1_1)
{
$xml = explode("\r\n", parent::__doRequest($req, $location, $action, $version));
$response = preg_replace('/^(\x00\x00\xFE\xFF|\xFF\xFE\x00\x00|\xFE\xFF|\xFF\xFE|\xEF\xBB\xBF)/', "", $xml[5]);
return $response;
}
}
function call_service($serviceOperation, $request, $entiteit, $backend)
{
$error = 0;
$soapClient = getSoapClient($entiteit, $backend);
try {
$response = $soapClient->__call($serviceOperation, array($request));
}
catch (SoapFault $fault) {
$error = 1;
$response = $fault->faultcode."-".$fault->faultstring;
}
return array($error, $response);
}
решения в сочетании с ответом Винсент:
я увидел, что мой ответ был объектом, но когда я напечатанной __getLastResponse () Я получил XML. http://php.net/manual/en/soapclient.getlastresponse.php
$response = $soapClient->__getLastResponse();
Когда я использую это в ответе Винсента я вижу значение на моем экране:
$xml = simplexml_load_string($response);
$xml->registerXPathNamespace('list', 'http://schemas.test.nl/are/planning/business/1.0');
foreach ($xml->xpath('//list:beschikbaarheidslijst') as $list_object)
{
print_r($list_object);
}
ответ вы получаете в XML проверить http://php.net/manual/en/function.xml-parse-into-struct.php вручную –
@RahulSingh это был объект, но теперь это XML и он работает. – massie