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.
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.
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
One thought on “UPS shipping API with php”
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