Main menu
WalkswithMeAPI PHPUPS shipping API with php

UPS shipping API with php

Calculating the shipping cost for different UPS services with ups shipping api is pretty simple the following code can be used. First you have to signup on the UPS for getting your API key,UPS username , password and a UPS account number.

UPS Developer Kit

Ups Shipping APi registration

When you get these credential from UPS site, now you can simply get the different ups methods shipping prices.

create a file with ups.php and have the following codes.


<?php
class upsRate {
var $AccessLicenseNumber;
var $UserId;
var $Password;
var $shipperNumber;
var $credentials;
function setCredentials($access,$user,$pass,$shipper) {
$this->AccessLicenseNumber = $access;
$this->UserID = $user;
$this->Password = $pass;
$this->shipperNumber = $shipper;
$this->credentials = 1;
}
// Define the function getRate() - no parameters
function getRate($PostalCode,$dest_zip,$service,$length,$width,$height,$weight) {
if ($this->credentials != 1) {
print 'Please set your credentials with the setCredentials function';
die();
}
$data ="<?xml version=\"1.0\"?>
<AccessRequest xml:lang=\"en-US\">
<AccessLicenseNumber>$this->AccessLicenseNumber</AccessLicenseNumber>
<UserId>$this->UserID</UserId>
<Password>$this->Password</Password>
</AccessRequest>
<?xml version=\"1.0\"?>
<RatingServiceSelectionRequest xml:lang=\"en-US\">
<Request>
<TransactionReference>
<CustomerContext>Bare Bones Rate Request</CustomerContext>
<XpciVersion>1.0001</XpciVersion>
</TransactionReference>
<RequestAction>Rate</RequestAction>
<RequestOption>Rate</RequestOption>
</Request>
<PickupType>
<Code>01</Code>
</PickupType>
<Shipment>
<Shipper>
<Address>
<PostalCode>$PostalCode</PostalCode>
<CountryCode>US</CountryCode>
</Address>
<ShipperNumber>$this->ShipperNumber</ShipperNumber>
</Shipper>
<ShipTo>
<Address>
<PostalCode>$dest_zip</PostalCode>
<CountryCode>US</CountryCode>
<ResidentialAddressIndicator/>
</Address>
</ShipTo>
<ShipFrom>
<Address>
<PostalCode>$PostalCode</PostalCode>
<CountryCode>US</CountryCode>
</Address>
</ShipFrom>
<Service>
<Code>$service</Code>
</Service>
<Package>
<PackagingType>
<Code>02</Code>
</PackagingType>
<Dimensions>
<UnitOfMeasurement>
<Code>IN</Code>
</UnitOfMeasurement>
<Length>$length</Length>
<Width>$width</Width>
<Height>$height</Height>
</Dimensions>
<PackageWeight>
<UnitOfMeasurement>
<Code>LBS</Code>
</UnitOfMeasurement>
<Weight>$weight</Weight>
</PackageWeight>
</Package>
</Shipment>
</RatingServiceSelectionRequest>";
$ch = curl_init("https://www.ups.com/ups.app/xml/Rate");
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. ' -->'; // THIS LINE IS FOR DEBUG PURPOSES ONLY-IT WILL SHOW IN HTML COMMENTS
$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();
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') {
$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['RATINGSERVICESELECTIONRESPONSE']['RATEDSHIPMENT']['TOTALCHARGES']['MONETARYVALUE'];
}
}
?>

Then create file with calculate_ups_shipping_price.php and have the following codes.


<?php
require_once("ups.php");
$ups = new upsRate();
$ups->setCredentials(UPS_ACCOUNT_API_KEY,ACCOUNT_NAME,ACCOUNT_PASSWORD,ACCOUNT_NUMBER);
$result    = $ups->getRate($from_zip,$destination_zip,$services,$length,$width,$height,$weight);
echo "Price".$result;
 
?>

When you set up the account credential for the ups with setCredentials() now you can simply pass the required parameters to getRate()  The above ups.php file is set up for the US you can simply change if you required the default weight unit in US is pound (LBS) and dimension unit is inch (IN) for other countries you can set the default units.Also remember that product weight do not exceed 170lbs.For the package size calculation check here.

For the ups service codes check here. codes are follows.
01 – UPS Next Day Air
02 – UPS Second Day Air
03 – UPS Ground
07 – UPS Worldwide Express
08 – UPS Worldwide Expedited
11 – UPS Standard
12 – UPS Three-Day Select
13 – Next Day Air Saver
14 – UPS Next Day Air Early AM
54 – UPS Worldwide Express Plus
59 – UPS Second Day Air AM
65 – UPS Saver

 

 

 

3 thoughts on “UPS shipping API with php

  1. I am using this type of its working correctly. Now suppose i need to know all possible services are there between from and to zipcode and their estimated time.Please help me ASAP

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

 

FacebookTwitterGoogle+RSS