Я называю webservice с использованием PHP 5.3.1, и мой запрос выглядит так:
<?php $client = new SoapClient('the API wsdl'); $param = array( 'LicenseKey' => 'a guid' ); $result = $client->GetUnreadIncomingMessages($param); echo "<pre>"; print_r($result); echo "</pre>"; ?>
Вот ответ, который я верну:
stdClass Object ( [GetUnreadIncomingMessagesResult] => stdClass Object ( [SMSIncomingMessage] => Array ( [0] => stdClass Object ( [FromPhoneNumber] => the number [IncomingMessageID] => message ID [MatchedMessageID] => [Message] => Hello there [ResponseReceiveDate] => 2012-09-20T20:42:14.38 [ToPhoneNumber] => another number ) [1] => stdClass Object ( [FromPhoneNumber] => the number [IncomingMessageID] => [MatchedMessageID] => [Message] => hello again [ResponseReceiveDate] => 2012-09-20T20:42:20.69 [ToPhoneNumber] => another number ) ) ) )
Чтобы получить данные, которые вы хотите получить, вам необходимо перемещаться по нескольким вложенным объектам. Объекты имеют тип stdClass. Я понимаю, что вы можете получить доступ к вложенным объектам в stdClass, но я собираюсь передать их в массивы, чтобы упростить индексирование.
Итак, начните с:
<?php $client = new SoapClient('the API wsdl'); $param = array('LicenseKey' => 'a guid'); $result = $client->GetUnreadIncomingMessages($param);
Теперь у вас есть $ result vavialble типа stdClass. У этого объекта есть и один объект типа stdClass, называемый GetUnreadIncomingMessagesResult. Этот объект, в свою очередь, содержит массив под названием «SMSIncomingMessage». Этот массив содержит переменное количество объектов stdClass, которые содержат нужные данные.
Итак, мы делаем следующее:
$outterArray = ((array)$result); $innerArray = ((array)$outterArray['GetUnreadIncomingMessagesResult']); $dataArray = ((array)$innerArray['SMSIncomingMessage']);
Теперь у нас есть массив, содержащий каждый объект, из которого мы хотим извлечь данные. Поэтому мы перебираем этот массив, чтобы получить объект-держатель, отбрасываем объект-хранилище в массив и извлекаем необходимую информацию. Вы делаете это следующим образом:
foreach($dataArray as $holdingObject) { $holdingArray = ((array)$holdingObject); $phoneNum = $holdingArray['FromPhoneNumber']; $message = $holdingArray['Message']; echo"<div>$fphone</div> <div>$message</div>"; } ?>
Это должно дать вам результат, который вы ищете. Вы можете настроить, где вы индексируете holdArray, чтобы получить любую конкретную информацию, которую вы ищете.
Полный код выглядит так:
<?php $client = new SoapClient('the API wsdl'); $param = array('LicenseKey' => 'a guid'); $result = $client->GetUnreadIncomingMessages($param); $outterArray = ((array)$result); $innerArray = ((array)$outterArray['GetUnreadIncomingMessagesResult']); $dataArray = ((array)$innerArray['SMSIncomingMessage']); foreach($dataArray as $holdingObject) { $holdingArray = ((array)$holdingObject); $phoneNum = $holdingArray['FromPhoneNumber']; $message = $holdingArray['Message']; echo"<div>$fphone</div> <div>$message</div>"; } ?>