6

USPS Tracking API を使用して USPS 注文のステータスを取得しようとすると、エラーがスローされます。

しかし、USPS のマニュアルに基づいて作成したコードを実行すると、次のエラーが表示されます

マニュアルへのリンク: 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>");

これら 2 つの変更を行うことで、ポスターの元の問題が解決されました。これが、ここでつまずいた人の助けになることを願っています。

于 2014-11-11T22:33:48.183 に答える
0

Mike B.の答えをさらに良くするために、コードは次のようになります。

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