Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

USPS Module Help Please!


Guest

Recommended Posts

Please help, I'm new to osC, using 2.2, only USPS and on the USPS production server. Whenever the customer goes to checkout, no matter what has been selected in the Shipping Method when the customer goes to Confirm Order the Shipping Method has changed to Express Mail (the most expensive option). I've searched through the forum and found only one post with no replies except my own asking if the poster found a solution, but alas, nothing...

Thank you.

 

David

Link to comment
Share on other sites

  • 8 months later...
  • Replies 110
  • Created
  • Last Reply

Top Posters In This Topic

Please help, I'm new to osC, using 2.2, only USPS and on the USPS production server. Whenever the customer goes to checkout, no matter what has been selected in the Shipping Method when the customer goes to Confirm Order the Shipping Method has changed to Express Mail (the most expensive option). I've searched through the forum and found only one post with no replies except my own asking if the poster found a solution, but alas, nothing...

Thank you.

 

David

I am having this exact problem and have been unable to find the solution or cause either. Hope there is someone out there that has some insight.

Link to comment
Share on other sites

I am having the same issue and client lost tons fo sales because of it....

 

it was working fine before this. site has been up a bit then suddenly it is defaulting and called postal service and they say it isnt their issue... thinks something stinks

Edited by feerhei
Link to comment
Share on other sites

Over the weekend there has been posts in 2 threads regarding USPS changing their service names to upper case

Need help installing add ons/contributions, cleaning a hacked site or a bespoke development, check my profile

 

Virus Threat Scanner

My Contributions

Basic install answers.

Click here for Contributions / Add Ons.

UK your site.

Site Move.

Basic design info.

 

For links mentioned in old answers that are no longer here follow this link Useful Threads.

 

If this post was useful, click the Like This button over there ======>>>>>.

Link to comment
Share on other sites

Over the weekend there has been posts in 2 threads regarding USPS changing their service names to upper case

That is exactly what fixed my problem.

Here is what to change in your modules/usps.php

'EXPRESS' => 'Express Mail',

'FIRST CLASS' => 'First-Class Mail',

'PRIORITY' => 'Priority Mail',

'PARCEL' => 'Parcel Post'

at around line 46 of the code.

Link to comment
Share on other sites

That is exactly what fixed my problem.

Here is what to change in your modules/usps.php

'EXPRESS' => 'Express Mail',

'FIRST CLASS' => 'First-Class Mail',

'PRIORITY' => 'Priority Mail',

'PARCEL' => 'Parcel Post'

at around line 46 of the code.

 

Jerry, Thanks. But when i maked the above changes to usps.php, I then see the following displayed on checkout_shipping.php:

 

An error occured with the USPS shipping calculations.

If you prefer to use USPS as your shipping method, please contact the store owner.

 

Below is what my code looks like:

$this->types = array('EXPRESS' => 'Express Mail', 'FIRST CLASS' => 'First-Class Mail', 'PRIORITY' => 'Priority Mail', 'PARCEL' => 'Parcel Post', 'BPM' => 'Bound Printed Material', 'Library' => 'Library', 'Media' => 'Media Mail');

 

Anyone have ideas on what is causing the above error to shoppers?

 

Thanks,

David

Anthony David

AllThingsTrendy.com

Link to comment
Share on other sites

Jerry, Thanks. But when i maked the above changes to usps.php, I then see the following displayed on checkout_shipping.php:

 

An error occured with the USPS shipping calculations.

If you prefer to use USPS as your shipping method, please contact the store owner.

 

Below is what my code looks like:

$this->types = array('EXPRESS' => 'Express Mail', 'FIRST CLASS' => 'First-Class Mail', 'PRIORITY' => 'Priority Mail', 'PARCEL' => 'Parcel Post', 'BPM' => 'Bound Printed Material', 'Library' => 'Library', 'Media' => 'Media Mail');

 

Anyone have ideas on what is causing the above error to shoppers?

 

Thanks,

David

I had that problem before the capitalization one. What fixed it for me was calling USPS and activating my account for production use. I never did get it to work with the test server.

If you haven't already, you have to register first using www.uspswebtools.com. You'll receive an email with your user id and such. Then call them and activate your account and all of the an error occurred stuff should disappear.

Link to comment
Share on other sites

I had that problem before the capitalization one. What fixed it for me was calling USPS and activating my account for production use. I never did get it to work with the test server.

If you haven't already, you have to register first using www.uspswebtools.com. You'll receive an email with your user id and such. Then call them and activate your account and all of the an error occurred stuff should disappear.

 

Jerry, I have an account and have been live for years. Users only get the mentioned error after I make the suggested updates on the usps.php. If I don't capitalize as suggested, my shoppers don't get the error but they are stuck with only the Express mail option. In other words, the suggested fix does not work for me. I am using the USPS Methods v2.8b. Perhaps this is the problem????

 

David

Anthony David

AllThingsTrendy.com

Link to comment
Share on other sites

I had that problem before the capitalization one. What fixed it for me was calling USPS and activating my account for production use. I never did get it to work with the test server.

If you haven't already, you have to register first using www.uspswebtools.com. You'll receive an email with your user id and such. Then call them and activate your account and all of the an error occurred stuff should disappear.

There is an updated contribution in the contributions area.

Link to comment
Share on other sites

I have updated my UPSP module to 2.9 and made the suggested capitalization recommendations. My domestic US shoppers (no problem for international) still receive the following error.

 

An error occured with the USPS shipping calculations.

If you prefer to use USPS as your shipping method, please contact the store owner.

If I remove the suggested capitalization on usps.php, domestic shoppers can at least purchase with Express Mail service.

 

Essentially, I have updated to the latest contribution but still have the original problem. >_<

 

Problem #2 :huh:

After updating to version 2.9 I have lost the ability to force insurance coverage on purchases. Most of our sales are high dollar items that must be insured. Anyone know why this was removed and how to get it back?

 

Thanks for any help!

David

Anthony David

AllThingsTrendy.com

Link to comment
Share on other sites

Thanks everybody, you saved my arse again. That's what I love about Open Source community :) I wasn't the only one freaking out and whew...

 

All I did was edit my existing usps.php with the new stuff from the new contribution:

 

$this->types = array('EXPRESS' => 'EXPRESS', 'FIRST CLASS' => 'First-Class Mail', 'PRIORITY' => 'PRIORITY', 'PARCEL' => 'Parcel', 'BPM' => 'Bound Printed Material', 'LIBRARY' => 'Library', 'MEDIA' => 'Media Mail');

 

$this->intl_types = array('GLOBAL EXPRESS' => 'Global Express Guaranteed',

'GLOBAL EXPRESS NON-DOC RECT' => 'Global Express Guaranteed Non-Document Rectangular',

'GLOBAL EXPRESS NON-DOC NON-RECT' => 'Global Express Guaranteed Non-Document Non-Rectangular',

'EXPRESS MAIL INT' => 'Express Mail International (EMS)',

'EXPRESS MAIL INT FLAT RATE ENV' => 'Express Mail International (EMS) Flat Rate Envelope',

'PRIORITY MAIL INT' => 'Priority Mail International',

'PRIORITY MAIL INT FLAT RATE ENV' => 'Priority Mail International Flat Rate Envelope',

'PRIORITY MAIL INT FLAT RATE BOX' => 'Priority Mail International Flat Rate Box',

'FIRST-CLASS MAIL INT' => 'First-Class Mail International');

 

Then applied their update.sql:

 

UPDATE configuration

SET configuration_value = UPPER(configuration_value),

set_function='tep_cfg_select_multioption(array(''GLOBAL EXPRESS'', ''GLOBAL EXPRESS NON-DOC RECT'', ''GLOBAL EXPRESS NON-DOC NON-RECT'', ''EXPRESS MAIL INT'', ''EXPRESS MAIL INT FLAT RATE ENV'', ''PRIORITY MAIL INT'', ''PRIORITY MAIL INT FLAT RATE ENV'', ''PRIORITY MAIL INT FLAT RATE BOX'', ''FIRST-CLASS MAIL INT''), '

WHERE configuration_key='MODULE_SHIPPING_USPS_TYPES_INTL';

 

UPDATE configuration

SET configuration_value = UPPER(configuration_value),

set_function='tep_cfg_select_multioption(array(''EXPRESS'', ''PRIORITY'', ''FIRST CLASS'', ''PARCEL'', ''BPM'', ''LIBRARY'', ''MEDIA''), '

WHERE configuration_key='MODULE_SHIPPING_USPS_TYPES'

 

Seems like it fixed it. Tested Domestic and international orders. Nice of USPS to warn us eh?

 

J

Link to comment
Share on other sites

Thank you for the detailed fix here in the forums. Most people like to spend their time telling others that the information is somewhere else instead of saying where or what it is.

 

I was wondering why I was getting so many UPS and Express orders yesterday. I disabled express which made priority the only USPS option, and got it to work until I was able to look into this fix.

Link to comment
Share on other sites

Yes!!!! Thank you EVERYONE.... I finally figured out that I had not run the update script! duh!!! It's always the simple things. Finally back in business EXCEPT that I can not longer apply insurance for USPS orders. Anyone have a clue why this option is no longer available?

 

David

Anthony David

AllThingsTrendy.com

Link to comment
Share on other sites

Actually, I also having problems trying to create labels with click and ship. I'm getting:

We're sorry! We were unable to process your request. Please correct the error(s) indicated below:

We are unable to find any available service options for this label, please review your label and try again.

I'm getting this no matter what I put in for an address. Anyone else?

Link to comment
Share on other sites

Sounds like most people do not run the "update.sql". I am no expert in describing how that is done (done it before by winging it ) but I think many would appreciate what the routine is to do the sql update.

Edited by THOUGHTOUT
Link to comment
Share on other sites

Yes!!!! Thank you EVERYONE.... I finally figured out that I had not run the update script! duh!!! It's always the simple things. Finally back in business EXCEPT that I can not longer apply insurance for USPS orders. Anyone have a clue why this option is no longer available?

 

David

 

I finally got my insurance working again. I can post a copy of my usps.php here if you wish.

Dennis

Link to comment
Share on other sites

This hasn't worked for me....I modified the usps.php file and updated sql as explained above and it didn't work. So, I decided to uninstall and reinstall the USPS shipping module. Now I get this error message:

 

Warning: Cannot modify header information - headers already sent by (output started at /home/blowinin/public_html/includes/modules/shipping/usps.php:1285) in /home/blowinin/public_html/admin/includes/functions/general.php on line 18

 

Please help!

Link to comment
Share on other sites

This hasn't worked for me....I modified the usps.php file and updated sql as explained above and it didn't work. So, I decided to uninstall and reinstall the USPS shipping module. Now I get this error message:

 

Warning: Cannot modify header information - headers already sent by (output started at /home/blowinin/public_html/includes/modules/shipping/usps.php:1285) in /home/blowinin/public_html/admin/includes/functions/general.php on line 18

 

Please help!

 

 

***ok, now i've taken some spaces out of the bottom of the usps.php and am not getting the error message anymore, but when I go to my admin to try to install the usps module again, it's there, but it won't open the module. What did I mess up?

Link to comment
Share on other sites

No matter what I do, I get an error message on the checkout:

 

An error occured with the USPS shipping calculations

 

I have done all of the above steps, including the database update.

 

I have even removed and installed the module in the admin. However, in the summary after I added the user/password, it just says Array for all the shipping type options. Any ideas?

Link to comment
Share on other sites

I am now at a point where my entire website is down because of this problem! I get an error message on the website and in the admin that says: Fatal error:

 

Cannot redeclare class usps in /home/blowinin/public_html/includes/modules/shipping/usps.php on line 14

 

Here's my USPS.php:

 

<?php
/*
 $Id: usps.php,v 1.47 2003/04/08 23:23:42 dgw_ Exp $
 ++++ modified as USPS Methods 2.7 03/26/04 by Brad Waite and Fritz Clapp ++++
 ++++ incorporating USPS revisions to service names ++++
 osCommerce, Open Source E-Commerce Solutions
 http://www.oscommerce.com

 Copyright (c) 2003 osCommerce

 Released under the GNU General Public License
*/

 class usps {
var $code, $title, $description, $icon, $enabled, $countries;

// class constructor
function usps() {
  global $order;

  $this->code = 'usps';
  $this->title = MODULE_SHIPPING_USPS_TEXT_TITLE;
  $this->description = MODULE_SHIPPING_USPS_TEXT_DESCRIPTION;
  $this->sort_order = MODULE_SHIPPING_USPS_SORT_ORDER;
  $this->icon = DIR_WS_ICONS . 'shipping_usps.gif';
  $this->tax_class = MODULE_SHIPPING_USPS_TAX_CLASS;
  $this->enabled = ((MODULE_SHIPPING_USPS_STATUS == 'True') ? true : false);

  if ( ($this->enabled == true) && ((int)MODULE_SHIPPING_USPS_ZONE > 0) ) {
	$check_flag = false;
	$check_query = tep_db_query("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_SHIPPING_USPS_ZONE . "' and zone_country_id = '" . $order->delivery['country']['id'] . "' order by zone_id");
	while ($check = tep_db_fetch_array($check_query)) {
	  if ($check['zone_id'] < 1) {
		$check_flag = true;
		break;
	  } elseif ($check['zone_id'] == $order->delivery['zone_id']) {
		$check_flag = true;
		break;
	  }
	}

	if ($check_flag == false) {
	  $this->enabled = false;
	}
  }

  $this->types = array('EXPRESS' => 'EXPRESS', 'FIRST CLASS' => 'First-Class Mail', 'PRIORITY' => 'PRIORITY', 'PARCEL' => 'Parcel', 'BPM' => 'Bound Printed Material', 'LIBRARY' => 'Library', 'MEDIA' => 'Media Mail');

  /*
  $this->intl_types = array('GXG Document' => 'Global Express Guaranteed Document Service',
							'GXG Non-Document' => 'Global Express Guaranteed Non-Document Service',
							'Express' => 'Global Express Mail (EMS)',
							'Priority Lg' => 'Global Priority Mail - Flat-rate Envelope (Large)',
							'Priority Sm' => 'Global Priority Mail - Flat-rate Envelope (Small)',
							'Priority Var' => 'Global Priority Mail - Variable Weight (Single)',
							'Airmail Letter' => 'Airmail Letter-post',
							'Airmail Parcel' => 'Airmail Parcel Post',
							'Surface Letter' => 'Economy (Surface) Letter-post',
							'Surface Post' => 'Economy (Surface) Parcel Post');
  */

	   $this->intl_types = array('GLOBAL EXPRESS' => 'Global Express Guaranteed',
			'GLOBAL EXPRESS NON-DOC RECT' => 'Global Express Guaranteed Non-Document Rectangular',
			'GLOBAL EXPRESS NON-DOC NON-RECT' => 'Global Express Guaranteed Non-Document Non-Rectangular',
			'EXPRESS MAIL INT' => 'Express Mail International (EMS)',
			'EXPRESS MAIL INT FLAT RATE ENV' => 'Express Mail International (EMS) Flat Rate Envelope',
			'PRIORITY MAIL INT' => 'Priority Mail International',
			'PRIORITY MAIL INT FLAT RATE ENV' => 'Priority Mail International Flat Rate Envelope',
			'PRIORITY MAIL INT FLAT RATE BOX' => 'Priority Mail International Flat Rate Box',
			'FIRST-CLASS MAIL INT' => 'First-Class Mail International');

  $this->countries = $this->country_list();
}

// class methods
function quote($method = '') {
  global $order, $shipping_weight, $shipping_num_boxes, $transittime;

  if ( tep_not_null($method) && (isset($this->types[$method]) || in_array($method, $this->intl_types)) ) {
	$this->_setService($method);
  }

  $this->_setContainer('None');
  $this->_setSize('REGULAR');

// usps doesnt accept zero weight
  $shipping_weight = ($shipping_weight < 0.1 ? 0.1 : $shipping_weight);
  $shipping_pounds = floor ($shipping_weight);
  $shipping_ounces = round(16 * ($shipping_weight - floor($shipping_weight)));
  $this->_setWeight($shipping_pounds, $shipping_ounces);

// Added by Kevin Chen ([email protected]); Fixes the Parcel Post Bug July 1, 2004
// Refer to http://www.usps.com/webtools/htm/Domestic-Rates.htm documentation
// Thanks Ryan
  if($shipping_pounds > 35 || $shipping_ounces < 6){
  $this->_setMachinable('False');
	}
  else{
  $this->_setMachinable('True');
  }
// End Kevin Chen July 1, 2004

  if (in_array('Display weight', explode(', ', MODULE_SHIPPING_USPS_OPTIONS))) {
	$shiptitle = ' (' . $shipping_num_boxes . ' x ' . $shipping_weight . 'lbs)';
  } else {
	$shiptitle = '';
  }

  $uspsQuote = $this->_getQuote();

  if (is_array($uspsQuote)) {
	if (isset($uspsQuote['error'])) {
	  $this->quotes = array('module' => $this->title,
							'error' => $uspsQuote['error']);
	} else {
	  $this->quotes = array('id' => $this->code,
							'module' => $this->title . $shiptitle);

	  $methods = array();
	  $size = sizeof($uspsQuote);
	  for ($i=0; $i<$size; $i++) {
		list($type, $cost) = each($uspsQuote[$i]);

		$title = ((isset($this->types[$type])) ? $this->types[$type] : $type);
		if(in_array('Display transit time', explode(', ', MODULE_SHIPPING_USPS_OPTIONS)))	$title .= $transittime[$type];

		$methods[] = array('id' => $type,
						   'title' => $title,
						   'cost' => ($cost + MODULE_SHIPPING_USPS_HANDLING) * $shipping_num_boxes);
	  }

	  $this->quotes['methods'] = $methods;

	  if ($this->tax_class > 0) {
		$this->quotes['tax'] = tep_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
	  }
	}
  } else {
	$this->quotes = array('module' => $this->title,
						  'error' => MODULE_SHIPPING_USPS_TEXT_ERROR);
  }

  if (tep_not_null($this->icon)) $this->quotes['icon'] = tep_image($this->icon, $this->title);

  return $this->quotes;
}

function check() {
  if (!isset($this->_check)) {
	$check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_USPS_STATUS'");
	$this->_check = tep_db_num_rows($check_query);
  }
  return $this->_check;
}

function install() {
  tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Enable USPS Shipping', 'MODULE_SHIPPING_USPS_STATUS', 'True', 'Do you want to offer USPS shipping?', '6', '0', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
  tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Enter the USPS User ID', 'MODULE_SHIPPING_USPS_USERID', 'NONE', 'Enter the USPS USERID assigned to you.', '6', '0', now())");
  tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Enter the USPS Password', 'MODULE_SHIPPING_USPS_PASSWORD', 'NONE', 'See USERID, above.', '6', '0', now())");
  tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Which server to use', 'MODULE_SHIPPING_USPS_SERVER', 'production', 'An account at USPS is needed to use the Production server', '6', '0', 'tep_cfg_select_option(array(\'test\', \'production\'), ', now())");
  tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Handling Fee', 'MODULE_SHIPPING_USPS_HANDLING', '0', 'Handling fee for this shipping method.', '6', '0', now())");
  tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Tax Class', 'MODULE_SHIPPING_USPS_TAX_CLASS', '0', 'Use the following tax class on the shipping fee.', '6', '0', 'tep_get_tax_class_title', 'tep_cfg_pull_down_tax_classes(', now())");
  tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Shipping Zone', 'MODULE_SHIPPING_USPS_ZONE', '0', 'If a zone is selected, only enable this shipping method for that zone.', '6', '0', 'tep_get_zone_class_title', 'tep_cfg_pull_down_zone_classes(', now())");
  tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort Order', 'MODULE_SHIPPING_USPS_SORT_ORDER', '0', 'Sort order of display.', '6', '0', now())");
  tep_db_query("insert into " . TABLE_CONFIGURATION . " ( configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Domestic Shipping Methods', 'MODULE_SHIPPING_USPS_TYPES', 'EXPRESS, PRIORITY, FIRST CLASS, PARCEL, BMP, LIBRARY, MEDIA,', 'Select the domestic services to be offered:', '6', '14', 'tep_cfg_select_multioption(array(\'EXPRESS\', \'PRIORITY\', \'FIRST CLASS\', \'PARCEL\',\'BPM\',\'LIBRARY\',\'MEDIA\'), ',  now())");
  /*
  tep_db_query("insert into " . TABLE_CONFIGURATION . "  (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Int\'l Shipping Methods', 'MODULE_SHIPPING_USPS_TYPES_INTL', 'GXG Document, GXG Non-Document, Express, Priority Lg, Priority Sm, Priority Var, Airmail Letter, Airmail Parcel, Surface Letter, Surface Post', 'Select the international services to be offered:', '6', '15', 'tep_cfg_select_multioption(array(\'GXG Document\', \'GXG Non-Document\', \'Express\', \'Priority Lg\', \'Priority Sm\', \'Priority Var\', \'Airmail Letter\', \'Airmail Parcel\', \'Surface Letter\', \'Surface Post\'), ',  now())");
  */
  tep_db_query("insert into " . TABLE_CONFIGURATION . "  (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Int\'l Shipping Methods', 'MODULE_SHIPPING_USPS_TYPES_INTL', 'GLOBAL EXPRESS,GLOBAL EXPRESS NON-DOC RECT, GLOBAL EXPRESS NON-DOC NON-RECT, EXPRESS MAIL INT, EXPRESS MAIL INT FLAT RATE ENV, PRIORITY MAIL INT, PRIORITY MAIL INT FLAT RATE ENV, PRIORITY MAIL INT FLAT RATE BOX, FIRST-CLASS MAIL INT', 'Select the international services to be offered:', '6', '15', 'tep_cfg_select_multioption(array(\'GLOBAL EXPRESS\', \'GLOBAL EXPRESS NON-DOC RECT\', \'GLOBAL EXPRESS NON-DOC NON-RECT\', \'EXPRESS MAIL INT\', \'EXPRESS MAIL INT FLAT RATE ENV\', \'PRIORITY MAIL INT\', \'PRIORITY MAIL INT FLAT RATE ENV\', \'PRIORITY MAIL INT FLAT RATE BOX\', \'FIRST-CLASS MAIL INT\'), ',  now())");
  tep_db_query("insert into " . TABLE_CONFIGURATION . " ( configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('USPS Options', 'MODULE_SHIPPING_USPS_OPTIONS', 'Display weight, Display transit time', 'Select from the following the USPS options.', '6', '16', 'tep_cfg_select_multioption(array(\'Display weight\', \'Display transit time\'), ',  now())");
}

function remove() {
  tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
}

function keys() {
  return array('MODULE_SHIPPING_USPS_STATUS', 'MODULE_SHIPPING_USPS_USERID', 'MODULE_SHIPPING_USPS_PASSWORD', 'MODULE_SHIPPING_USPS_SERVER', 'MODULE_SHIPPING_USPS_HANDLING', 'MODULE_SHIPPING_USPS_TAX_CLASS', 'MODULE_SHIPPING_USPS_ZONE', 'MODULE_SHIPPING_USPS_SORT_ORDER', 'MODULE_SHIPPING_USPS_OPTIONS', 'MODULE_SHIPPING_USPS_TYPES', 'MODULE_SHIPPING_USPS_TYPES_INTL');
}

function _setService($service) {
  $this->service = $service;
}

function _setWeight($pounds, $ounces=0) {
  $this->pounds = $pounds;
  $this->ounces = $ounces;
}

function _setContainer($container) {
  $this->container = $container;
}

function _setSize($size) {
  $this->size = $size;
}

function _setMachinable($machinable) {
  $this->machinable = $machinable;
}

function _getQuote() {
  global $order, $transittime;

  if(in_array('Display transit time', explode(', ', MODULE_SHIPPING_USPS_OPTIONS))) $transit = TRUE;

  if ($order->delivery['country']['id'] == SHIPPING_ORIGIN_COUNTRY) {
	$request  = '<RateRequest USERID="' . MODULE_SHIPPING_USPS_USERID . '" PASSWORD="' . MODULE_SHIPPING_USPS_PASSWORD . '">';
	$services_count = 0;

	if (isset($this->service)) {
	  $this->types = array($this->service => $this->types[$this->service]);
	}

	$dest_zip = str_replace(' ', '', $order->delivery['postcode']);
	if ($order->delivery['country']['iso_code_2'] == 'US') $dest_zip = substr($dest_zip, 0, 5);

	reset($this->types);
	$allowed_types = explode(", ", MODULE_SHIPPING_USPS_TYPES);

	while (list($key, $value) = each($this->types)) {

  if ( !in_array($key, $allowed_types) ) continue;

	  $request .= '<Package ID="' . $services_count . '">' .
				  '<Service>' . $key . '</Service>' .
				  '<ZipOrigination>' . SHIPPING_ORIGIN_ZIP . '</ZipOrigination>' .
				  '<ZipDestination>' . $dest_zip . '</ZipDestination>' .
				  '<Pounds>' . $this->pounds . '</Pounds>' .
				  '<Ounces>' . $this->ounces . '</Ounces>' .
				  '<Container>' . $this->container . '</Container>' .
				  '<Size>' . $this->size . '</Size>' .
				  '<Machinable>' . $this->machinable . '</Machinable>' .
				  '</Package>';

	  if($transit){
		$transitreq  = 'USERID="' . MODULE_SHIPPING_USPS_USERID .
					 '" PASSWORD="' . MODULE_SHIPPING_USPS_PASSWORD . '">' .
					 '<OriginZip>' . STORE_ORIGIN_ZIP . '</OriginZip>' .
					 '<DestinationZip>' . $dest_zip . '</DestinationZip>';

		switch ($key) {
		  case 'EXPRESS':  $transreq[$key] = 'API=ExpressMail&XML=' .
						   urlencode( '<ExpressMailRequest ' . $transitreq . '</ExpressMailRequest>');
						   break;
		  case 'PRIORITY': $transreq[$key] = 'API=PriorityMail&XML=' .
						   urlencode( '<PriorityMailRequest ' . $transitreq . '</PriorityMailRequest>');
						   break;
		  case 'PARCEL':   $transreq[$key] = 'API=StandardB&XML=' .
						   urlencode( '<StandardBRequest ' . $transitreq . '</StandardBRequest>');
						   break;
		  default:		 $transreq[$key] = '';
						   break;
		}
	  }

	  $services_count++;
	}
	$request .= '</RateRequest>';

	$request = 'API=Rate&XML=' . urlencode($request);
  } else {
	$request  = '<IntlRateRequest USERID="' . MODULE_SHIPPING_USPS_USERID . '" PASSWORD="' . MODULE_SHIPPING_USPS_PASSWORD . '">' .
				'<Package ID="0">' .
				'<Pounds>' . $this->pounds . '</Pounds>' .
				'<Ounces>' . $this->ounces . '</Ounces>' .
				'<MailType>Package</MailType>' .
				'<Country>' . $this->countries[$order->delivery['country']['iso_code_2']] . '</Country>' .
				'</Package>' .
				'</IntlRateRequest>';

	$request = 'API=IntlRate&XML=' . urlencode($request);
  }

  switch (MODULE_SHIPPING_USPS_SERVER) {
	case 'production': $usps_server = 'production.shippingapis.com'; //'stg-production.shippingapis.com'; // or  stg-secure.shippingapis.com //'production.shippingapis.com';
					   $api_dll = 'shippingapi.dll'; //'shippingapi.dll';
					   break;
	case 'test':
	default:		   $usps_server = 'testing.shippingapis.com';
					   $api_dll = 'ShippingAPITest.dll';
					   break;
  }

  $body = '';

  $http = new httpClient();
  if ($http->Connect($usps_server, 80)) {
	$http->addHeader('Host', $usps_server);
	$http->addHeader('User-Agent', 'osCommerce');
	$http->addHeader('Connection', 'Close');

	if ($http->Get('/' . $api_dll . '?' . $request)) $body = $http->getBody();
//  mail('[email protected]','USPS rate quote response',$body,'From: <[email protected]>');
	if ($transit && is_array($transreq) && ($order->delivery['country']['id'] == STORE_COUNTRY)) {
	  while (list($key, $value) = each($transreq)) {
		if ($http->Get('/' . $api_dll . '?' . $value)) $transresp[$key] = $http->getBody();
	  }
	}

	$http->Disconnect();

  } else {
	return false;
  }

  $response = array();
  while (true) {
	if ($start = strpos($body, '<Package ID=')) {
	  $body = substr($body, $start);
	  $end = strpos($body, '</Package>');
	  $response[] = substr($body, 0, $end+10);
	  $body = substr($body, $end+9);
	} else {
	  break;
	}
  }

  $rates = array();
  if ($order->delivery['country']['id'] == SHIPPING_ORIGIN_COUNTRY) {
	if (sizeof($response) == '1') {
	  if (ereg('<Error>', $response[0])) {
		$number = ereg('<Number>(.*)</Number>', $response[0], $regs);
		$number = $regs[1];
		$description = ereg('<Description>(.*)</Description>', $response[0], $regs);
		$description = $regs[1];

		return array('error' => $number . ' - ' . $description);
	  }
	}

	$n = sizeof($response);
	for ($i=0; $i<$n; $i++) {
	  if (strpos($response[$i], '<Postage>')) {
		$service = ereg('<Service>(.*)</Service>', $response[$i], $regs);
		$service = $regs[1];
		$postage = ereg('<Postage>(.*)</Postage>', $response[$i], $regs);
		$postage = $regs[1];

		$rates[] = array($service => $postage);

		if ($transit) {
		  switch ($service) {
			case 'EXPRESS':	 $time = ereg('<MonFriCommitment>(.*)</MonFriCommitment>', $transresp[$service], $tregs);
								$time = $tregs[1];
								if ($time == '' || $time == 'No Data') {
								  $time = '1 - 2 ' . MODULE_SHIPPING_USPS_TEXT_DAYS;
								} else {
								  $time = 'Tomorrow by ' . $time;
								}
								break;
			case 'PRIORITY':	$time = ereg('<Days>(.*)</Days>', $transresp[$service], $tregs);
								$time = $tregs[1];
								if ($time == '' || $time == 'No Data') {
								  $time = '2 - 3 ' . MODULE_SHIPPING_USPS_TEXT_DAYS;
								} elseif ($time == '1') {
								  $time .= ' ' . MODULE_SHIPPING_USPS_TEXT_DAY;
								} else {
								  $time .= ' ' . MODULE_SHIPPING_USPS_TEXT_DAYS;
								}
								break;
			case 'PARCEL':	  $time = ereg('<Days>(.*)</Days>', $transresp[$service], $tregs);
								$time = $tregs[1];
								if ($time == '' || $time == 'No Data') {
								  $time = '4 - 7 ' . MODULE_SHIPPING_USPS_TEXT_DAYS;
								} elseif ($time == '1') {
								  $time .= ' ' . MODULE_SHIPPING_USPS_TEXT_DAY;
								} else {
								  $time .= ' ' . MODULE_SHIPPING_USPS_TEXT_DAYS;
								}
								break;
			case 'First Class': $time = '2 - 5 ' . MODULE_SHIPPING_USPS_TEXT_DAYS;
								break;
			default:			$time = '';
								break;
		  }
		  if ($time != '') $transittime[$service] = ' (' . $time . ')';
		}
	  }
	}
  } else {
	if (ereg('<Error>', $response[0])) {
	  $number = ereg('<Number>(.*)</Number>', $response[0], $regs);
	  $number = $regs[1];
	  $description = ereg('<Description>(.*)</Description>', $response[0], $regs);
	  $description = $regs[1];

	  return array('error' => $number . ' - ' . $description);
	} else {
	  $body = $response[0];
	  $services = array();
	  while (true) {
		if ($start = strpos($body, '<Service ID=')) {
		  $body = substr($body, $start);
		  $end = strpos($body, '</Service>');
		  $services[] = substr($body, 0, $end+10);
		  $body = substr($body, $end+9);
		} else {
		  break;
		}
	  }
	  $allowed_types = array();
	  foreach( explode(", ", MODULE_SHIPPING_USPS_TYPES_INTL) as $value ) $allowed_types[$value] = $this->intl_types[$value];

	  $size = sizeof($services);
	  for ($i=0, $n=$size; $i<$n; $i++) {
		if (strpos($services[$i], '<Postage>')) {
		  $service = ereg('<SvcDescription>(.*)</SvcDescription>', $services[$i], $regs);
		  $service = $regs[1];
		  $postage = ereg('<Postage>(.*)</Postage>', $services[$i], $regs);
		  $postage = $regs[1];
		  $time = ereg('<SvcCommitments>(.*)</SvcCommitments>', $services[$i], $tregs);
		  $time = $tregs[1];
		  $time = preg_replace('/Weeks$/', MODULE_SHIPPING_USPS_TEXT_WEEKS, $time);
		  $time = preg_replace('/Days$/', MODULE_SHIPPING_USPS_TEXT_DAYS, $time);
		  $time = preg_replace('/Day$/', MODULE_SHIPPING_USPS_TEXT_DAY, $time);

		  if( !in_array($service, $allowed_types) ) continue;
		  if (isset($this->service) && ($service != $this->service) ) {
			continue;
		  }

		  $rates[] = array($service => $postage);
	  if ($time != '') $transittime[$service] = ' (' . $time . ')';
		}
	  }
	}
  }

  return ((sizeof($rates) > 0) ? $rates : false);
}

function country_list() {
  $list = array('AF' => 'Afghanistan',
				'AL' => 'Albania',
				'DZ' => 'Algeria',
				'AD' => 'Andorra',
				'AO' => 'Angola',
				'AI' => 'Anguilla',
				'AG' => 'Antigua and Barbuda',
				'AR' => 'Argentina',
				'AM' => 'Armenia',
				'AW' => 'Aruba',
				'AU' => 'Australia',
				'AT' => 'Austria',
				'AZ' => 'Azerbaijan',
				'BS' => 'Bahamas',
				'BH' => 'Bahrain',
				'BD' => 'Bangladesh',
				'BB' => 'Barbados',
				'BY' => 'Belarus',
				'BE' => 'Belgium',
				'BZ' => 'Belize',
				'BJ' => 'Benin',
				'BM' => 'Bermuda',
				'BT' => 'Bhutan',
				'BO' => 'Bolivia',
				'BA' => 'Bosnia-Herzegovina',
				'BW' => 'Botswana',
				'BR' => 'Brazil',
				'VG' => 'British Virgin Islands',
				'BN' => 'Brunei Darussalam',
				'BG' => 'Bulgaria',
				'BF' => 'Burkina Faso',
				'MM' => 'Burma',
				'BI' => 'Burundi',
				'KH' => 'Cambodia',
				'CM' => 'Cameroon',
				'CA' => 'Canada',
				'CV' => 'Cape Verde',
				'KY' => 'Cayman Islands',
				'CF' => 'Central African Republic',
				'TD' => 'Chad',
				'CL' => 'Chile',
				'CN' => 'China',
				'CX' => 'Christmas Island (Australia)',
				'CC' => 'Cocos Island (Australia)',
				'CO' => 'Colombia',
				'KM' => 'Comoros',
				'CG' => 'Congo (Brazzaville),Republic of the',
				'ZR' => 'Congo, Democratic Republic of the',
				'CK' => 'Cook Islands (New Zealand)',
				'CR' => 'Costa Rica',
				'CI' => 'Cote d\'Ivoire (Ivory Coast)',
				'HR' => 'Croatia',
				'CU' => 'Cuba',
				'CY' => 'Cyprus',
				'CZ' => 'Czech Republic',
				'DK' => 'Denmark',
				'DJ' => 'Djibouti',
				'DM' => 'Dominica',
				'DO' => 'Dominican Republic',
				'TP' => 'East Timor (Indonesia)',
				'EC' => 'Ecuador',
				'EG' => 'Egypt',
				'SV' => 'El Salvador',
				'GQ' => 'Equatorial Guinea',
				'ER' => 'Eritrea',
				'EE' => 'Estonia',
				'ET' => 'Ethiopia',
				'FK' => 'Falkland Islands',
				'FO' => 'Faroe Islands',
				'FJ' => 'Fiji',
				'FI' => 'Finland',
				'FR' => 'France',
				'GF' => 'French Guiana',
				'PF' => 'French Polynesia',
				'GA' => 'Gabon',
				'GM' => 'Gambia',
				'GE' => 'Georgia, Republic of',
				'DE' => 'Germany',
				'GH' => 'Ghana',
				'GI' => 'Gibraltar',
				'GB' => 'Great Britain and Northern Ireland',
				'GR' => 'Greece',
				'GL' => 'Greenland',
				'GD' => 'Grenada',
				'GP' => 'Guadeloupe',
				'GT' => 'Guatemala',
				'GN' => 'Guinea',
				'GW' => 'Guinea-Bissau',
				'GY' => 'Guyana',
				'HT' => 'Haiti',
				'HN' => 'Honduras',
				'HK' => 'Hong Kong',
				'HU' => 'Hungary',
				'IS' => 'Iceland',
				'IN' => 'India',
				'ID' => 'Indonesia',
				'IR' => 'Iran',
				'IQ' => 'Iraq',
				'IE' => 'Ireland',
				'IL' => 'Israel',
				'IT' => 'Italy',
				'JM' => 'Jamaica',
				'JP' => 'Japan',
				'JO' => 'Jordan',
				'KZ' => 'Kazakhstan',
				'KE' => 'Kenya',
				'KI' => 'Kiribati',
				'KW' => 'Kuwait',
				'KG' => 'Kyrgyzstan',
				'LA' => 'Laos',
				'LV' => 'Latvia',
				'LB' => 'Lebanon',
				'LS' => 'Lesotho',
				'LR' => 'Liberia',
				'LY' => 'Libya',
				'LI' => 'Liechtenstein',
				'LT' => 'Lithuania',
				'LU' => 'Luxembourg',
				'MO' => 'Macao',
				'MK' => 'Macedonia, Republic of',
				'MG' => 'Madagascar',
				'MW' => 'Malawi',
				'MY' => 'Malaysia',
				'MV' => 'Maldives',
				'ML' => 'Mali',
				'MT' => 'Malta',
				'MQ' => 'Martinique',
				'MR' => 'Mauritania',
				'MU' => 'Mauritius',
				'YT' => 'Mayotte (France)',
				'MX' => 'Mexico',
				'MD' => 'Moldova',
				'MC' => 'Monaco (France)',
				'MN' => 'Mongolia',
				'MS' => 'Montserrat',
				'MA' => 'Morocco',
				'MZ' => 'Mozambique',
				'NA' => 'Namibia',
				'NR' => 'Nauru',
				'NP' => 'Nepal',
				'NL' => 'Netherlands',
				'AN' => 'Netherlands Antilles',
				'NC' => 'New Caledonia',
				'NZ' => 'New Zealand',
				'NI' => 'Nicaragua',
				'NE' => 'Niger',
				'NG' => 'Nigeria',
				'KP' => 'North Korea (Korea, Democratic People\'s Republic of)',
				'NO' => 'Norway',
				'OM' => 'Oman',
				'PK' => 'Pakistan',
				'PA' => 'Panama',
				'PG' => 'Papua New Guinea',
				'PY' => 'Paraguay',
				'PE' => 'Peru',
				'PH' => 'Philippines',
				'PN' => 'Pitcairn Island',
				'PL' => 'Poland',
				'PT' => 'Portugal',
				'QA' => 'Qatar',
				'RE' => 'Reunion',
				'RO' => 'Romania',
				'RU' => 'Russia',
				'RW' => 'Rwanda',
				'SH' => 'Saint Helena',
				'KN' => 'Saint Kitts (St. Christopher and Nevis)',
				'LC' => 'Saint Lucia',
				'PM' => 'Saint Pierre and Miquelon',
				'VC' => 'Saint Vincent and the Grenadines',
				'SM' => 'San Marino',
				'ST' => 'Sao Tome and Principe',
				'SA' => 'Saudi Arabia',
				'SN' => 'Senegal',
				'YU' => 'Serbia-Montenegro',
				'SC' => 'Seychelles',
				'SL' => 'Sierra Leone',
				'SG' => 'Singapore',
				'SK' => 'Slovak Republic',
				'SI' => 'Slovenia',
				'SB' => 'Solomon Islands',
				'SO' => 'Somalia',
				'ZA' => 'South Africa',
				'GS' => 'South Georgia (Falkland Islands)',
				'KR' => 'South Korea (Korea, Republic of)',
				'ES' => 'Spain',
				'LK' => 'Sri Lanka',
				'SD' => 'Sudan',
				'SR' => 'Suriname',
				'SZ' => 'Swaziland',
				'SE' => 'Sweden',
				'CH' => 'Switzerland',
				'SY' => 'Syrian Arab Republic',
				'TW' => 'Taiwan',
				'TJ' => 'Tajikistan',
				'TZ' => 'Tanzania',
				'TH' => 'Thailand',
				'TG' => 'Togo',
				'TK' => 'Tokelau (Union) Group (Western Samoa)',
				'TO' => 'Tonga',
				'TT' => 'Trinidad and Tobago',
				'TN' => 'Tunisia',
				'TR' => 'Turkey',
				'TM' => 'Turkmenistan',
				'TC' => 'Turks and Caicos Islands',
				'TV' => 'Tuvalu',
				'UG' => 'Uganda',
				'UA' => 'Ukraine',
				'AE' => 'United Arab Emirates',
				'UY' => 'Uruguay',
				'UZ' => 'Uzbekistan',
				'VU' => 'Vanuatu',
				'VA' => 'Vatican City',
				'VE' => 'Venezuela',
				'VN' => 'Vietnam',
				'WF' => 'Wallis and Futuna Islands',
				'WS' => 'Western Samoa',
				'YE' => 'Yemen',
				'ZM' => 'Zambia',
				'ZW' => 'Zimbabwe');

  return $list;
}
 }
?>

 

Please, please, please help! my site is TOTALLY down!!!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...