3

UPS Tracking API を利用する PHP クラスをオンラインでいくつか見つけましたが、問題は、ルート全体を取得できないことです... ステータスのみを取得します (配送済みかどうかを確認するだけです。私がやっていることには必要のない多くの情報)。

次のような多くのサイトが常にそれを行っているのを見ているので、それが可能であることはわかっています。

http://www.packagetrackr.com/track/1Z0766Y54242241130

(eBay、Amazon などは言うまでもありません)。

ここでも、UPS Tracking API を次の URL で使用しています: https://www.ups.com/ups.app/xml/Track (XML ペイロードなどと共に)

ありがとうございました。

4

3 に答える 3

3
<?php 

class upstraking 
{
    function upstrack($trackingno,$account_data)
    {
        $trackingno='1Z12345E1512345676';
        $data ="<?xml version=\"1.0\"?>
        <AccessRequest xml:lang='en-US'>
        <AccessLicenseNumber>".$account_data['access_lic_no']."</AccessLicenseNumber>
        <UserId>".$account_data['username']."</UserId>
        <Password>".$account_data['password']."</Password>
        </AccessRequest>
        <?xml version=\"1.0\"?>
        <TrackRequest>
        <Request>
        <TransactionReference>
        <CustomerContext>
        <InternalKey>blah</InternalKey>
        </CustomerContext>
        <XpciVersion>1.0</XpciVersion>
        </TransactionReference>
        <RequestAction>Track</RequestAction>
        </Request>
        <TrackingNumber>$trackingno</TrackingNumber>
        </TrackRequest>";
        $ch = curl_init("https://www.ups.com/ups.app/xml/Track");
curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch,CURLOPT_POST,1);
        curl_setopt($ch,CURLOPT_TIMEOUT, 60);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
        $result=curl_exec ($ch);
        // echo '<!-- '. $result. ' -->';
        $data = strstr($result, '<?');
        $xml_parser = xml_parser_create();
        xml_parse_into_struct($xml_parser, $data, $vals, $index);
        xml_parser_free($xml_parser);
        $params = array();
        $level = array();
        #print_r($vals);#die();
        foreach ($vals as $xml_elem) {
        if ($xml_elem['type'] == 'open') {
            if (array_key_exists('attributes',$xml_elem)) {
                    list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);
            } else {
                    $level[$xml_elem['level']] = $xml_elem['tag'];
            }
        }
        if ($xml_elem['type'] == 'complete') {
            if(isset($xml_elem['value']) && $xml_elem['value'] != '') {
                $start_level = 1;
                $php_stmt = '$params';
                while($start_level < $xml_elem['level']) {
                    $php_stmt .= '[$level['.$start_level.']]';
                    $start_level++;
                }
                $php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];';
                eval($php_stmt);
            }

     }
}
curl_close($ch);
//return $params;

    print_r($params); // this array will return full information of tracking

//die();
$table = "";
$table .= "<table class='pure-table pure-table-horizontal' border='1'>";
$table .= "<th>PIN</th>";
$table .= "<th>Date</th>";
$table .= "<th>Description</th>";
$table .= "<th>Address</th>";
//$table .= "<th>Signatory Name</th>";
//$table .= "<th>Event Type</th>";
$table .= "</tr>";

if($params['TRACKRESPONSE']['RESPONSE']['RESPONSESTATUSDESCRIPTION']=='Success')
{
    $shipment=$params['TRACKRESPONSE']['SHIPMENT'];
    $address_arr=$shipment['PACKAGE']['ACTIVITY']['ACTIVITYLOCATION']['ADDRESS'];
    $address=$address_arr['CITY'].', '.$address_arr['STATEPROVINCECODE'].', '.$address_arr['COUNTRYCODE'];

    $table .= "<tr>";
    $table .= "<td>".$shipment['PACKAGE']['TRACKINGNUMBER']."</td>";
    $table .= "<td>".$shipment['PACKAGE']['ACTIVITY']['DATE'] . "</td>";
    $table .= "<td>".$shipment['PACKAGE']['ACTIVITY']['STATUS']['STATUSTYPE']['DESCRIPTION'] . "</td>";
    $table .= "<td>".$address."</td>";

    $table .= "</tr>";
}

$table .= "</table>";
echo $table;
    }
}


$obj_upstraking = new upstraking();
$account_data = array();
$account_data['access_lic_no']='accesskey';
$account_data['username']='upsusername';
$account_data['password']='password';
$obj_upstraking->upstrack($trackingno='1Z12345E1512345676',$account_data);
于 2014-07-22T18:01:46.703 に答える
3

彫像を取得する標準的な方法はありません。UPS の Web サイトを解析する必要があります。

于 2012-11-02T00:38:46.873 に答える
1

私は、私たちのサイトで顧客のUPSステータスを1行ずつ表示するために次のように書きました。

 $tracking_url = 'http://wwwapps.ups.com/WebTracking/track?track=yes&trackNums='.$insert_tracking_number_here;
 include('simple_html_dom.php');
 $html = file_get_html($tracking_url);
 foreach($html->find('th') as $e)
        $e->outertext = '';
        $html->save();
        $method = $html->find('a.service', 0)->innertext;
        echo 'Your Order #: '.$ordernumber.' was shipped on '.$shipdate.' via '.$method.'.<P></P>';
        $delivery_check = $html->find('dt', 0)->innertext;
        $is_delivered = strpos($delivery_check, 'Delivered On');
        $delivery = $html->find('dd', 8)->innertext;
        if ($is_delivered===false) {
            echo '<b>Scheduled delivery: '.$delivery.'.</b><P></P>';
        } else {
            echo '<b>Delivered on: '.$delivery.'</b><P></P>';
        }
        echo 'Below is the current information for tracking number '.$tracking.'.<P></P><br>'; ?>
        <table border="0"><tr><td colspan="6"><hr></td></tr>
        <tr>
        <td class="text10b" width="230">LOCATION</td>
        <td class="text10b" width="80">DATE</td>
        <td class="text10b" width="100">LOCAL TIME</td>
        <td class="text10b" width="230">ACTIVITY</td>
        </tr>
        <tr><td colspan="6"><hr></td></tr>
        <?php foreach($html->find('table.dataTable') as $service) echo $service->innertext;?>
        <tr><td colspan="6"><hr></td></tr></table>
于 2012-09-20T08:23:58.747 に答える