NYCPHP Meetup

NYPHP.org

[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