USPS API для отслеживания поставок в Stack Overflow

У меня проблема. Я зарегистрировался на веб-сайте USPS и оттуда взял пользователя и прошел доступ к их API. Но когда я пытаюсь получить доступ к отслеживанию, я получаю в результате одну строку текста со всем результатом без форматирования XML

Сценарий, который я использую, это:

    $trackingNumber = $numtrack;
$url = "http://production.shippingapis.com/shippingAPI.dll";
$service = "TrackV2";
$xml = rawurlencode("<TrackRequest USERID='MYIDACCOUNT'><TrackID ID='".$trackingNumber."'></TrackID></TrackRequest>");
$request = $url . "?API=" . $service . "&XML=" . $xml;
// send the POST values to USPS
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$request);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// parameters to post

$result = curl_exec($ch);
curl_close($ch);

$response = new SimpleXMLElement($result);
print_r($result);
$deliveryStatus = $response->TrackResponse->TrackSummary->Status;
echo $deliveryStatus;

В результате я получаю

Ваш товар был доставлен в Италию в 10:51 5 июня 2015 года. Таможня
таможенная очистка завершена, 4 июня 2015 г., 17:29, ИТАЛИЯ
Оформление, 4 июня 2015 г., 11:20, ИТАЛИЯПроцесс через сортировку
Механизм, 4 июня 2015 г., 11:19, ИТАЛИЯDeparted, 3 июня 2015 г., 7:43
утра, Милан, ИТАЛИЯDeparted, 2 июня 2015 года, 15:34, Майами, США
СОСТОЯНИЯ, 2 июня 2015 года, 10:05, Майами, США
Через сортировочный центр, 1 июня 2015 г., 20:07, ISC MIAMI FL
(USPS) Прибыла на сортировочную установку, 1 июня 2015 г., 20:07, ISC MIAMI FL
(USPS) Покинул объект USPS, 1 июня 2015 г., 2:40, МАЙАМИ, Флорида
33112 Прибыло в USPS Origin Facility, 31 мая 2015 г., 11:22, МАЙАМИ,
FL 33112 Почтовое отделение, 30 мая 2015 года, 16:07, Бока-Ратон, Флорида
33431Принятие, 30 мая 2015 г., 12:27, BOCA RATON, FL
33431Перед отправкой информации в USPS, 29 мая 2015 г.

Как я могу получить XML, а затем экстраполировать нужную мне информацию? Я не могу выпрыгнуть.

3

Решение

Теги XML интерпретируются вашим браузером как теги HTML. Escape специальные символы, такие как < с htmlspecialchars если вы хотите передать XML пользователю:

echo htmlspecialchars($deliveryStatus);
1

Другие решения

Вы должны построить свой ответ XML:

Что-то вроде этого:

<?php
/*
SimpleXMLElement Object ( [TrackInfo] => SimpleXMLElement Object ( [@attributes] => Array ( [ID] => CV034836340US ) [TrackSummary] => Your item was delivered in ITALY at 10:51 am on June 5, 2015. [TrackDetail] => Array ( [0] => Customs clearance processing complete, June 4, 2015, 5:29 pm, ITALY [1] => Customs Clearance, June 4, 2015, 11:20 am, ITALY [2] => Processed Through Sort Facility, June 4, 2015, 11:19 am, ITALY... ) ) )
*/
//SIMULATION FROM YOUR OBJECT
$response = (object)array(
'TrackInfo'=>array('ID'=>12342432),
'TrackSummary'=>'Your item was delivered in ITALY at 10:51 am on June 5, 2015.',
'TrackDetail' => array('Customs clearance processing complete, June 4, 2015, 5:29 pm, ITALY','Customs Clearance, June 4, 2015, 11:20 am, ITALY','Processed Through Sort Facility, June 4, 2015, 11:19..., ITALY... ')
);


$string = '<?xml version="1.0" encoding="utf-8"?>
<TrackResponse>
<TrackInfo>'.(string)$response->TrackInfo['ID'].'</TrackInfo>
<TrackSummary>'.(string)$response->TrackSummary.'</TrackSummary>
<TrackDetail>';
foreach($response->TrackDetail as $detail){
$string .= '<detail>'.(string)$detail.'</detail>';
}
$string .='</TrackDetail>
</TrackResponse>';

header('Content-Type: application/xml; charset=utf-8');
echo $string
?>
1

Если это будет полезно для кого-то:

$deliveryStatus = $response->TrackInfo->TrackSummary;
echo $deliveryStatus;
0
По вопросам рекламы [email protected]