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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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']; | |
} | |
} | |
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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: