[nycphp-talk] UPS php code not working (followup)
tom at supertom.com
tom at supertom.com
Thu Jan 9 12:00:16 EST 2003
Just to follow up and document the fix, after scrutiny I found that UPS
changed the parameter from:
49_residential=2 (for commerical)
to
49_residential=NO
Having the '2' in there broke the whole thing. I'd like to find a better
way to do this, but at least it now works.
Thanks,
Tom
* I forgot the code in the previous email - code is below *
Hello All,
I have been using the following PHP code (found on the net somewhere) to
connect to the UPS site to calculate shipping. The code now returns "error"
for the shipping quote. When I assemble the string myself, I can see that
the program on the UPS site has in fact stopped working. Does anyone have
any information about this (when did it stop working, did they 'move' the
program, new code to use, etc.)?
Also, has anyone tried intershipper (www.intershipper.net) with PHP? What
are your experiences?
Thanks,
Tom
<?php
/*
Version: 0.06 (29 November, 1999)
UPS Shipping calculator. Much of this is re-organized stuff that was
borrowed from shawnblue at radiotakeover.com. I fixed a couple of bugs,
and optimized much of the code for speed (ie switch(), rather than
a bunch of if() statements, join(), rather than a lot of .=
statements, etc.. I tested this using the sample code below (using
various values for my paramaters), and it works pretty well. Happy
shipping.
Sample usage:
$rate = new Ups;
$rate->upsProduct("1DM"); // See upsProduct() function for codes
$rate->origin("08033", "US"); // Use ISO country codes!
$rate->dest("90210", "US"); // Use ISO country codes!
$rate->rate("RDP"); // See the rate() function for codes
$rate->container("CP"); // See the container() function for codes
$rate->weight("2");
$rate->rescom("RES"); // See the rescom() function for codes
$quote = $rate->getQuote();
echo $quote;
*/
class Ups {
function upsProduct($prod){
/*
1DM == Next Day Air Early AM
1DA == Next Day Air
1DP == Next Day Air Saver
2DM == 2nd Day Air Early AM
2DA == 2nd Day Air
3DS == 3 Day Select
GND == Ground
STD == Canada Standard
XPR == Worldwide Express
XDM == Worldwide Express Plus
XPD == Worldwide Expedited
*/
$this->upsProductCode = $prod;
}
function origin($postal, $country){
$this->originPostalCode = $postal;
$this->originCountryCode = $country;
}
function dest($postal, $country){
$this->destPostalCode = $postal;
$this->destCountryCode = $country;
}
function rate($foo){
switch($foo){
case "RDP":
$this->rateCode = "Regular+Daily+Pickup";
break;
case "OCA":
$this->rateCode = "On+Call+Air";
break;
case "OTP":
$this->rateCode = "One+Time+Pickup";
break;
case "LC":
$this->rateCode = "Letter+Center";
break;
case "CC":
$this->rateCode = "Customer+Counter";
break;
}
}
function container($foo){
switch($foo){
case "CP": // Customer Packaging
$this->containerCode = "00";
break;
case "ULE": // UPS Letter Envelope
$this->containerCode = "01";
break;
case "UT": // UPS Tube
$this->containerCode = "03";
break;
case "UEB": // UPS Express Box
$this->containerCode = "21";
break;
case "UW25": // UPS Worldwide 25 kilo
$this->containerCode = "24";
break;
case "UW10": // UPS Worldwide 10 kilo
$this->containerCode = "25";
break;
}
}
function weight($foo){
$this->packageWeight = $foo;
}
function rescom($foo){
switch($foo){
case "RES": // Residential Address
$this->resComCode = "1";
break;
case "COM": // Commercial Address
$this->resComCode = "2";
break;
}
}
function getQuote(){
$upsAction = "3"; // You want 3. Don't change unless you are
sure.
$url = join("&",
array("http://www.ups.com/using/services/rave/qcostcgi.cgi?accept_UPS_licens
e_agreement=yes",
"10_action=$upsAction",
"13_product=$this->upsProductCode",
"14_origCountry=$this->originCountryCode",
"15_origPostal=$this->originPostalCode",
"19_destPostal=$this->destPostalCode",
"22_destCountry=$this->destCountryCode",
"23_weight=$this->packageWeight",
"47_rateChart=$this->rateCode",
"48_container=$this->containerCode",
"49_residential=$this->resComCode"
)
);
$fp = fopen($url, "r");
while(!feof($fp)){
$result = fgets($fp, 500);
$result = explode("%", $result);
$errcode = substr($result[0], -1);
switch($errcode){
case 3:
$returnval = $result[8];
break;
case 4:
$returnval = $result[8];
break;
case 5:
$returnval = $result[1];
break;
case 6:
$returnval = $result[1];
break;
}
}
fclose($fp);
if(! $returnval) { $returnval = "error"; }
return $returnval;
}
}
?>
More information about the talk
mailing list