Получение статуса отслеживания заказов USPS с помощью PHP

Ошибка при попытке получить статус заказа USPS с использованием API отслеживания USPS.

Однако при запуске кода, который я построил на основе руководства USPS, я получаю следующую ошибку: " 80040B19XML Ошибка синтаксиса: проверьте XML-запрос, чтобы узнать, может ли он быть проанализирован. USPSCOM:: DoAuth"

Ссылка на руководство: https://www.usps.com/business/web-tools-apis/track-and-confirm-v1-3a.htm

Вот мой код:

$trackingNumber = 123456;
$url = "http://production.shippingapis.com/shippingAPI.dll";
$service = "TrackV2";
$xml = rawurlencode("
<trackrequest userid="MYID">
 
 </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);
//var_dump($result);
curl_close($ch);
$response = new SimpleXMLElement($result);
//print_r($result);
$deliveryStatus = $response->TrackResponse->TrackInfo->Status;
echo $deliveryStatus;

Что я делаю неправильно?

3 ответа

Хотя я уверен, что первоначальный автор решил проблему до сих пор, придя к этому примеру и обнаружив, что это не сработало, я решил, что рассмотрю проблемы:

Прежде всего обратимся к тому, что PHP преобразует номер отслеживания в научную нотацию, если номер отслеживания - все числа, как в приведенном выше примере (номер тестового трека, который я использовал, представлял собой всю числовую строку из 22 символов). Поэтому я заключил номера в одинарные кавычки, чтобы рассматривать их как строку, а не число. Эта проблема была обнаружена только после того, как был рассмотрен следующий.

для $xml, идентификатор должен быть заключен в двойные кавычки. Таким образом, код должен быть:

$xml = rawurlencode("
<trackrequest userid="MYID">
 
 </trackrequest>");

В результате этих двух изменений была исправлена ​​оригинальная проблема с плакатами. Надеюсь, это поможет любому, кто тоже спотыкается здесь.


Для получения информации из XML контента, в PHP вместо использования curl вы можете использовать simplexml_load_file

Это будет выглядеть так:

<!--?php
 $xml=simplexml_load_file('http://production.shippingapis.com/ShippingApi.dll?API=TrackV2&XML=<TrackFieldRequest USERID="MYID"-->') or die('Error: Cannot create object');
 echo $xml->TrackInfo->TrackSummary->Event."";
 echo $xml->TrackInfo->TrackSummary->EventDate."";
 echo $xml->TrackInfo->TrackSummary->EventTime;
?>


Просто чтобы Майк Б. ответил еще лучше, код может выглядеть следующим образом:

$xml = rawurlencode("");

licensed under cc by-sa 3.0 with attribution.