skip to Main Content

I found a couple of PHP Classes online that utilizes the UPS Tracking API, but the problem is that I don’t get the whole route… I only get the status (saying if it was already delivered or not — along with a lot more info that I don’t need for what I’m doing).

I know it’s possible because I see a lot of sites doing it all the time such as this one:

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

(Not to mention eBay, Amazon, etc).

Again I am using the UPS Tracking API with the following URL:
https://www.ups.com/ups.app/xml/Track (along with the XML payloads, etc)

Thank you.

3

Answers


  1. I wrote the following to display line by line UPS status for my customers on our site.

     $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>
    
    Login or Signup to reply.
  2. there’s no standard way of getting statues, you’ll have to parse the UPS website

    Login or Signup to reply.
  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);
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search