Pages

October 5, 2014

UPS Shipping Rate Calculation API – Part 1


R
 ecently, I was working on the ups shipping rate calculation API. It was an e-commerce site using UPS Shipping service delivering its order.

First of all working with UPS shipping rate calculation API is simple. You first need to register yourself on ups site. You will get username, password and API key and UPS account number.

Now create a file with ‘ups_shipping_process.php’ name, and put following code in it.
<?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 another file with `calculate_shipping_cost_ups.php` and put following code in it.
<?php
require_once("ups_shipping_process.php");
$ups = new upsRate();
$ups->setCredentials(UPS_ACCOUNT_KEY,UPS_USERNAME, UPS_PASSWORD, UPS_ACCOUNT_NO);
$result = $ups->getRate($from_zip,$destination_zip,$services,$length,$width,$height,$weight);
echo "Shipping Rate: ".$result;
?>
Set your credentials you got from UPS registration by calling ‘setCredentials()’ method, Replacing UPS_ACCOUNT_KEY, UPS_USERNAME, UPS_PASSWORD, UPS_ACCOUNT_NO with your real information.
You can set your Country, ZIP code, and measurement UNIT (i.e.  LBS or KG for weight and IN for dimension)
Below are the option for the shipping method, you might wants to use in your for user selection.
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
For Advance Configuration of the UPS Shipping Rate Calculation visit:

Kindle Apps