6

尝试使用 USPS Tracking API 检索 USPS 订单的状态时引发错误。

但是,在运行我根据 USPS 手册构建的代码时,出现以下错误:“ 80040B19XML Syntax Error: Please check the XML request to see if it can be parsed.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'>
    <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);
//var_dump($result);
curl_close($ch);

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

我究竟做错了什么?

4

3 回答 3

14

虽然我确信原作者现在已经解决了他们的问题,但来到这个例子并发现它不起作用我想我会解决这些问题:

首先要解决的是,如果跟踪号是上面示例中的所有数字,PHP 会将跟踪号转换为科学计数法(我使用的测试跟踪号是 22 个字符的全数字字符串)。因此,我将数字用单引号括起来,以将其视为字符串而不是数字。这个问题是在解决下一个问题后才发现的。

对于 $xml,ID 需要用双引号括起来。所以代码应该是:

$xml = rawurlencode("
<TrackRequest USERID='MYID'>
    <TrackID ID=\"".$trackingNumber."\"></TrackID>
    </TrackRequest>");

进行这两项更改解决了海报的原始问题。希望这可以帮助任何在这里绊倒的人。

于 2014-11-11T22:33:48.183 回答
1

要从XML内容中获取详细信息,您可以使用inPHP而不是使用curlsimplexml_load_file

它会像:

<?php
    $xml=simplexml_load_file('http://production.shippingapis.com/ShippingApi.dll?API=TrackV2&XML=<TrackFieldRequest USERID="MYID"><TrackID ID="'.$trackingNumber.'"></TrackID></TrackFieldRequest>') or die('Error: Cannot create object');
    echo $xml->TrackInfo->TrackSummary->Event."<br>";
    echo $xml->TrackInfo->TrackSummary->EventDate."<br>";
    echo $xml->TrackInfo->TrackSummary->EventTime;
?>
于 2017-06-23T10:26:11.093 回答
0

为了让 Mike B. 的回答更好,代码可能是这样的:

$xml = rawurlencode("<TrackRequest USERID='MYID'><TrackID ID='$trackingNumber'></TrackID></TrackRequest>");
于 2015-02-28T12:40:48.393 回答