Получаване на статус на проследяване на USPS поръчки с PHP

Възниква грешка, когато се опитвате да извлечете състоянието на USPS поръчка с помощта на USPS Tracking API.

Въпреки това, когато изпълнявам кода, който създадох въз основа на ръководството на 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'>
    <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;

какво правя грешно


person user2509541    schedule 30.01.2014    source източник
comment
Опитахте ли да повторите стойността на $xml, за да видите дали е това, което мислите, че е?   -  person Orangepill    schedule 31.01.2014


Отговори (3)


Въпреки че съм сигурен, че първоначалният автор е разрешил проблема си досега, след като стигнах до този пример и установих, че не работи, реших, че ще се справя с проблемите:

Първото нещо, на което трябва да се обърне внимание, е, че PHP преобразува проследяващия номер в научна нотация, ако проследяващият номер е изцяло от числа, както в примера по-горе (тестовият проследяващ номер, който използвах, беше изцяло цифров низ от 22 знака). Така че затворих числата в единични кавички, за да го третирам като низ вместо число. Този проблем беше открит едва след отстраняването на следващия.

за $xml идентификаторът трябва да бъде ограден в двойни кавички. Така че кодът трябва да бъде:

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

Извършването на тези две промени разреши първоначалния проблем с плакатите. Надявам се това да помогне на всеки, който също се спъва тук.

person Mike B.    schedule 11.11.2014
comment
Страхотно, @Mike B., ти си човекът, от който има нужда... готов да отговориш година по-късно, за да се увериш, че е в протокола. Къде е медала, Е?? Палец нагоре - person Cyprus106; 08.01.2015

За получаване на подробности от XML съдържание, в PHP, вместо да използвате curl, можете да използвате simplexml_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;
?>
person Pradeep Kumar Prabaharan    schedule 23.06.2017

Само за да направим отговора на Mike B. още по-добър, кодът може да е така:

$xml = rawurlencode("<TrackRequest USERID='MYID'><TrackID ID='$trackingNumber'></TrackID></TrackRequest>");
person alexey_gusev    schedule 28.02.2015