Jump to content
Sign in to follow this  
FoundSoul

USPS Methods broken with 1/4/10 price change implemented by the USPS

Recommended Posts

The patch on the CRE Forum states the code should now read

 

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

'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',

'EXPRESS MAIL INT FLAT RATE ENV' => 'Express Mail International 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');


Kym

Projects Director @ ozEworks.com

Share this post


Link to post
Share on other sites

$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',

'EXPRESS MAIL INT FLAT RATE ENV' => 'Express Mail International 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 Medium Flat Rate Box',

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

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

Edited by mysalon

Share this post


Link to post
Share on other sites

You have posted different code without explaining why ...

 

Could you please explain why you have different service names?


Kym

Projects Director @ ozEworks.com

Share this post


Link to post
Share on other sites

Service Names are now:

 

Global Express Guaranteed (GXG)

Global Express Guaranteed Non-Document Rectangular

Global Express Guaranteed Non-Document Non-Rectangular

USPS GXG Envelopes

Express Mail International

Express Mail International Flat Rate Envelope

Priority Mail International

Priority Mail International Large Flat Rate Box

Priority Mail International Medium Flat Rate Box

Priority Mail International Small Flat Rate Box

Priority Mail International Flat Rate Envelope

First-Class Mail International Package

First-Class Mail International Large Envelope


Kym

Projects Director @ ozEworks.com

Share this post


Link to post
Share on other sites

My code in usps.php was originally

 

		'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 ' . $this->PriorityFlatRateBoxType,
	'FIRST-CLASS MAIL INT' => 'First Class Mail International ' . $this->FirstClassIntType);

 

 

It is currently this and it works great!

 

		'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',
	'EXPRESS MAIL INT FLAT RATE ENV' => 'Express Mail International 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 Medium Flat Rate Box',
	'PRIORITY MAIL INT FLAT RATE BOX' => 'Priority Mail International Large Flat Rate Box',
	'FIRST-CLASS MAIL INT' => 'First-Class Mail International Package');

Share this post


Link to post
Share on other sites

we updated usps module http://addons.oscommerce.com/info/487

 

in general problem is because shipping services don't have unique code

and in admin when we select modules, we select titles and compare modules by title

so if usps change title then module doesn't work

 

if you just change $this->intl_types it will be not 100% fixed

 

current modules name are:

Global Express Guaranteed (GXG)

Global Express Guaranteed Non-Document Rectangular

Global Express Guaranteed Non-Document Non-Rectangular

USPS GXG Envelopes

Express Mail International

Express Mail International Flat Rate Envelope

Priority Mail International

Priority Mail International Large Flat Rate Box

Priority Mail International Medium Flat Rate Box

Priority Mail International Small Flat Rate Box

Priority Mail International Flat Rate Envelope

First-Class Mail International Package

First-Class Mail International Large Envelope

 

For custom module upgrade do next:

 

1. run sql query

ALTER TABLE `configuration` CHANGE `configuration_value` `configuration_value` TEXT  NOT NULL ,
CHANGE `set_function` `set_function` TEXT NULL DEFAULT NULL;

 

 

2. find next line (might you have different values for MODULE_SHIPPING_USPS_TYPES_INTL key, anyway you have to replace line with MODULE_SHIPPING_USPS_TYPES_INTL key)

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', 'GLBL EX, GLBL EX NONDOC RECT, GLBL EX NONDOC NON-RECT, EXPRESS INT, EXPRESS INT FLAT RATE ENV, PRIORITY INT, PRIORITY INT FLAT RATE ENV, PRIORITY INT FLAT RATE BOX, FIRST-CLASS INT', 'Select the international services to be offered:', '6', '0', 'tep_cfg_select_multioption(array(\'GLBL EX\', \'GLBL EX NONDOC RECT\', \'GLBL EX NONDOC NON-RECT\', \'EXPRESS INT\', \'EXPRESS INT FLAT RATE ENV\', \'PRIORITY INT\', \'PRIORITY INT FLAT RATE ENV\', \'PRIORITY INT FLAT RATE BOX\', \'FIRST-CLASS INT\'), ', now())");

 

and replace by

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', '', 'Select the international services to be offered:', '6', '15', 'tep_cfg_select_multioption(array(\'Global Express Guaranteed (GXG)\', \'Global Express Guaranteed Non-Document Rectangular\', \'Global Express Guaranteed Non-Document Non-Rectangular\',\'USPS GXG Envelopes\', \'Express Mail International\', \'Express Mail International Flat Rate Envelope\', \'Priority Mail International\', \'Priority Mail International Large Flat Rate Box\',\'Priority Mail International Medium Flat Rate Box\',\'Priority Mail International Small Flat Rate Box\',\'Priority Mail International Flat Rate Envelope\', \'First-Class Mail International Package\', \'First-Class Mail International Large Envelope\'), ',  now())");

 

3. find next line

foreach( explode(", ", MODULE_SHIPPING_USPS_TYPES_INTL) as $value ) $allowed_types[$value] = $this->intl_types[$value];

 

and replace it

 

$allowed_types = explode(', ',MODULE_SHIPPING_USPS_TYPES_INTL);

 

4. find next line

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

 

and replace it

if ( tep_not_null($method) && (isset($this->types[$method]) || in_array($method, explode(', ',MODULE_SHIPPING_USPS_TYPES_INTL))) ) {

Share this post


Link to post
Share on other sites

Can you explain why these other changes may be necessary? I edited my usps.php file as shown by chrisytsma and it appears to have fixed it in all instances.

 

I tried loading the 4.3.2 update, but a simple update would not work for my store system. Rather than go through the involved loading process and mess up something else, I tried chrisytsma's edits first and they worked.

Share this post


Link to post
Share on other sites

Can you explain why these other changes may be necessary? I edited my usps.php file as shown by chrisytsma and it appears to have fixed it in all instances.

 

I tried loading the 4.3.2 update, but a simple update would not work for my store system. Rather than go through the involved loading process and mess up something else, I tried chrisytsma's edits first and they worked.

 

to update module you have to uninstall old module then copy code and then setup new module

 

if chrisytsma updates is ok for you you can use it

 

chrisytsma and our update doesn't change how module works, It just change list international services to be offered which you can select in admin

 

our version has full list of modules

Share this post


Link to post
Share on other sites

I found that ozEworks is correct. The file changes as indicated must be made for Version 4.3.1 to function correctly.

Share this post


Link to post
Share on other sites

I installed the updated module when I went to edit it I got the following error

Fatal error: Call to undefined function tep_cfg_multiinput_list() in /home/directory/directory/catalog/admin/modules.php(225) : eval()'d code on line 1

If any one has some immediate replies to this error I would be most appreciative.

thanks


On your last day only you will have to approve or disaprove of how your life has been.

Share this post


Link to post
Share on other sites

I found this line 240 in catalog/modules/shipping/usps.php that has the code that created the error but I am not sure what to edit it to to correct it.

      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 ('Enter the USPS User ID', 'MODULE_SHIPPING_USPS_USERID', 'NONE, NONE', 'Enter the USPS USERID assigned to you. <u>You must contact USPS to have them switch you to the Production server.</u>  Otherwise this module will not work!', '6', '0', 'tep_cfg_multiinput_list(array(\'ID\', \'Password\'), ', now())");

Suggestions would be much appreciated. It is the "tep_cfg_multiinput_list that is causing the error.

thanks


On your last day only you will have to approve or disaprove of how your life has been.

Share this post


Link to post
Share on other sites

Ok my bad.

I should have read the installation instructions. The SQL update is in there


On your last day only you will have to approve or disaprove of how your life has been.

Share this post


Link to post
Share on other sites

Hello again,

I performed the 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';

And I am still getting the error

Fatal error: Call to undefined function tep_cfg_multi_input_list() in /directory/directory/public_html/catalog/admin/modules.php(225) : eval()'d code on line 1

Does anyone know if there was an update to this module in the past that included and edit to the admin/modules.php file?

Thanks


On your last day only you will have to approve or disaprove of how your life has been.

Share this post


Link to post
Share on other sites

What about the US Methods. I managed to get international shipping working and now my domestic US orders are giving me this error.

 

United States Postal Service

An error occured with the USPS shipping calculations.

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

 

 

I am assuming there were changes made to domestic shipping also.

 

USPS >:o(

 

Why? They shoot themselves in the foot because they ultimately don't get their postage when they do this stuff

Edited by mysalon

Share this post


Link to post
Share on other sites

Ok what a nightmare. Super pissed at usps now. If there was an alternative I'd switch to the other service in a heartbeat.

Current error.

Fatal error: Cannot redeclare tep_cfg_select_multioption() (previously declared in /home/directory/public_html/catalog/admin/includes/functions/general.php:798) in /home/directory/public_html/catalog/admin/includes/functions/general.php on line 1414

Seems that there is a conflict with superdownload shop contribution.

// USPS Methods 3.0
// Alias function for Store configuration values in the Administration Tool
 function tep_cfg_select_multioption($select_array, $key_value, $key = '') {
   for ($i=0; $i<sizeof($select_array); $i++) {
     $name = (($key) ? 'configuration[' . $key . '][]' : 'configuration_value');
     $string .= '<br><input type="checkbox" name="' . $name . '" value="' . $select_array[$i] . '"';
     $key_values = explode( ", ", $key_value);
     if ( in_array($select_array[$i], $key_values) ) $string .= ' CHECKED';
     $string .= '> ' . $select_array[$i];
   }
   $string .= '<input type="hidden" name="' . $name . '" value="--none--">';
   return $string;
 }

and

// BOF: WebMakers.com Added: Downloads Controller
// Alias function for array of configuration values in the Administration Tool
 function tep_cfg_select_multioption($select_array, $key_value, $key = '') {
   for ($i=0; $i<sizeof($select_array); $i++) {
     $name = (($key) ? 'configuration[' . $key . '][]' : 'configuration_value');
     $string .= '<br><input type="checkbox" name="' . $name . '" value="' . $select_array[$i] . '"';
     $key_values = explode( ", ", $key_value);
     if ( in_array($select_array[$i], $key_values) ) $string .= 'CHECKED';
     $string .= '> ' . $select_array[$i];
   } 
   return $string;
 }

Really some help on this would be nice.

Anyone have a list where tep_cfg_select_multioption is used in USPS methods so that I can change the name?

thanks


On your last day only you will have to approve or disaprove of how your life has been.

Share this post


Link to post
Share on other sites

Yes I can't figure out why the US Shipping was working Monday when I fixed the International one and now my US customers can't get shipping prices.

 

It may stem from a problem in my admin page. When I go to remove USPS by click remove button it is not there. I just ran the new USPS update and nothing was working after applying the files. So I went back to my previous code in admin\includes\modules\shipping\usps.php and placed that. At least I have internation shipping but no US Shipping is coming up.

 

 

Here is what I have in usps.php that is working for interantion but not US shipping

 

<?php

/*

$Id: usps.php 3.0 2008-03-01 04:59:07Z user $

++++ Original contribution by Brad Waite and Fritz Clapp ++++

++++ incorporating USPS revisions to service names ++++

Copyright 2008 osCommerce

Released under the GNU General Public License

*/

//LAST UPDATED: May 28th, 2008 by Greg Deeth

 

//Modified by Greg Deeth April 30, 2008 to use API v.3.0

//Modified by Greg Deeth May 12, 2008 for API Change

//Please refer to http://www.usps.com/webtools/_pdf/Rate-Calculators-v1-2.pdf for more information on RateV3 syntax.

 

 

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);

$this->GlobalTest;

 

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 Mail',

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

'PRIORITY' => 'Priority Mail',

'PARCEL' => 'Parcel Post',

'MEDIA' => 'Media Mail',

'BPM' => 'Bound Printed Material',

'LIBRARY' => 'Library'

);

 

 

 

 

/******************************************************************* */

//Added by Greg Deeth on May 12th, 2008

//INTERNATIONAL MAIL OPTIONS

//Change the values to the option you would like

 

//FIRST CLASS MAIL INTERNATIONAL OPTION:

$this->FirstClassIntType = 'Package'; //OPTIONS: 'Letters', 'Large Envelope', 'Package'

 

//PRIORITY FLAT-RATE BOX INTERNATIONAL OPTION:

$this->PriorityFlatRateBoxType = 'Flat-Rate Box'; //OPTIONS: 'Flat-Rate Box', 'Large Flat-Rate Box'

/****************************************************************** */

 

 

$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',

'EXPRESS MAIL INT FLAT RATE ENV' => 'Express Mail International 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 Medium Flat Rate Box',

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

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

 

 

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

$this->countryinsure = $this->country_maxinsure();

}

 

// 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);

}

 

//BEGIN INSURANCE MODULE by Kevin Shelton

// divide the value of the order among the packages based on the order total or subtotal depending on whether or not you have configured to insure tax

if (MODULE_SHIPPING_USPS_INSURE_TAX == 'True') {

$costperpkg = $order->info['total'] / $shipping_num_boxes;

}

else {

$costperpkg = $order->info['subtotal'] / $shipping_num_boxes;

}

 

// retrieve the maximum allowed insurance for the destination country and if the package value exceeds it then set package value to the maximum allowed

$maxins = $this->countryinsure[$order->delivery['country']['iso_code_2']];

if ($costperpkg > $maxins) $costperpkg = $maxins;

 

// if insurance not allowed for destination or insurance is turned off add nothing to shipping cost

if (($maxins == 0) || (MODULE_SHIPPING_USPS_INSURE == 'False')) {

$insurance = 0;

}

 

// US and Canada share the same insurance calculation (though not the same maximum)

else if (($order->delivery['country']['iso_code_2'] == 'US') || ($order->delivery['country']['iso_code_2'] == 'CA')){

if ($costperpkg<=50) {

$insurance=MODULE_SHIPPING_USPS_INS1;

}

else if ($costperpkg<=100) {

$insurance=MODULE_SHIPPING_USPS_INS2;

}

else if ($costperpkg<=200) {

$insurance=MODULE_SHIPPING_USPS_INS3;

}

else if ($costperpkg<=300) {

$insurance=MODULE_SHIPPING_USPS_INS4;

}

else {

$insurance = MODULE_SHIPPING_USPS_INS4 + ((ceil($costperpkg/100) -3) * MODULE_SHIPPING_USPS_INS5);

}

}

 

// if insurance allowed and is not US or Canada then calculate international insurance

else {

if ($costperpkg<=50) {

$insurance=MODULE_SHIPPING_USPS_INS6;

}

else if ($costperpkg<=100) {

$insurance=MODULE_SHIPPING_USPS_INS7;

}

else if ($costperpkg<=200) {

$insurance=MODULE_SHIPPING_USPS_INS8;

}

else if ($costperpkg<=300) {

$insurance=MODULE_SHIPPING_USPS_INS9;

}

else {

$insurance = MODULE_SHIPPING_USPS_INS9 + ((ceil($costperpkg/100) - 3) * MODULE_SHIPPING_USPS_INS10);

}

}

//END INSURANCE MODULE

 

// usps doesn't accept zero weight

// Modified by Greg Deeth on May 27th 2008

$shipping_weight = ($shipping_weight < 0.0625 ? 0.0625 : $shipping_weight);

$shipping_pounds = floor ($shipping_weight);

$shipping_ounces = (16 * ($shipping_weight - floor($shipping_weight)));

$this->_setWeight($shipping_pounds, $shipping_ounces);

// Added by Kevin Chen (kkchen@uci.edu); Fixes the Parcel Post Bug July 1, 2004

// Refer to http://www.usps.com/webtools/htm/Domestic-Rates.htm documentation

// Thanks Ryan

// End Kevin Chen July 1, 2004

 

if (in_array('Display weight', explode(', ', MODULE_SHIPPING_USPS_OPTIONS))) {

function round_up($valueIn, $places=0) {

if ($places < 0) { $places = 0; }

$mult = pow(10, $places);

return (ceil($valueIn * $mult) / $mult);

}

$shiptitle = ' (' . $shipping_num_boxes . ' x ' . $shipping_weight . 'lbs)' . ' (' . round_up($shipping_pounds, 4) . 'lbs, ' . round_up($shipping_ounces, 4) . 'oz)';

} 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];

 

 

if (MODULE_SHIPPING_DMSTC_INSURANCE_OPTION == 'Force Insurance') {

$methods[] = array('id' => $type,

'title' => $title,

'cost' => ($cost + $insurance + MODULE_SHIPPING_USPS_HANDLING) * $shipping_num_boxes);

}

else {

$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 Mail, Priority Mail, Priority FltRt Envelope, Priority FltRt Box, First-Class Mail, Parcel Post, Bound Printed Matter, Media Mail,', 'Select the domestic services to be offered:', '6', '0', 'tep_cfg_select_multioption(array(\'Express Mail\', \'Priority Mail\', \'Priority FltRt Envelope\', \'Priority FltRt Box\', \'First-Class Mail\', \'Parcel Post\',\'Bound Printed Matter\',\'Media Mail\'), ', now())");

//You can add Global Express services here, but be aware that if this line below is too long,

//it will create an install error.

//If this line is changed, you must uninstall and reinstall this module for the changes to take effect.

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', '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', '0', 'tep_cfg_select_multioption(array(\'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', '0', 'tep_cfg_select_multioption(array(\'Display weight\', \'Display transit time\'), ', 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 Insurance Options', 'MODULE_SHIPPING_DMSTC_INSURANCE_OPTION', 'None', 'Select how you want to offer USPS Domestic Insurance.', '6', '0', 'tep_cfg_select_option(array(\'None\', \'Buyers Option Does not work yet\', \'Force Insurance\'), ', 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 ('International Insurance Options', 'MODULE_SHIPPING_INTL_INSURANCE_OPTION', 'None', 'Select how you want to offer USPS International Insurance. International Insurance is calculated automatically by USPS for certain mailing types.', '6', '0', 'tep_cfg_select_option(array(\'None\', \'Buyers Option Does not work yet\', \'Force Insurance\'), ', now())");

 

//configuration values for insurance

tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, date_added) values ('US/Canada $.01-$50.00', 'MODULE_SHIPPING_USPS_INS1', '1.70', 'US/Canada insurance for totals $.01-$50.00', '6', '0', 'currencies->format', now())");

tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, date_added) values ('US/Canada $50.01-$100.00', 'MODULE_SHIPPING_USPS_INS2', '2.15', 'US/Canada insurance for totals $50.01-$100', '6', '0', 'currencies->format', now())");

tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, date_added) values ('US/Canada $100.01-$200.00', 'MODULE_SHIPPING_USPS_INS3', '2.60', 'US/Canada insurance for totals $100.01-$200', '6', '0', 'currencies->format', now())");

tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, date_added) values ('US/Canada $200.01-$300.00', 'MODULE_SHIPPING_USPS_INS4', '4.60', 'US/Canada insurance for totals $200.01-$300', '6', '0', 'currencies->format', now())");

tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, date_added) values ('US/Canada per $100 over $300', 'MODULE_SHIPPING_USPS_INS5', '.95', 'US/Canada insurance for every $100 over $300 (add)', '6', '0', 'currencies->format', now())");

/*tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, date_added) values ('International $.01-$50.00', 'MODULE_SHIPPING_USPS_INS6', '2.40', 'International insurance for totals $.01-$50.00', '6', '0', 'currencies->format', now())");

tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, date_added) values ('International $50.01-$100.00', 'MODULE_SHIPPING_USPS_INS7', '3.30', 'International insurance for totals $50.01-$100', '6', '0', 'currencies->format', now())");

tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, date_added) values ('International $100.01-$200.00', 'MODULE_SHIPPING_USPS_INS8', '4.20', 'International insurance for totals $100.01-$200', '6', '0', 'currencies->format', now())");

tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, date_added) values ('International $200.01-$300.00', 'MODULE_SHIPPING_USPS_INS9', '5.10', 'International insurance for totals $200.01-$300', '6', '0', 'currencies->format', now())");

tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, date_added) values ('International per $100 over $300', 'MODULE_SHIPPING_USPS_INS10', '.90', 'International insurance for every $100 over $300 (add)', '6', '0', 'currencies->format', 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 ('Insure Packages', 'MODULE_SHIPPING_USPS_INSURE', 'True', 'Insure packages shipped by USPS?', '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, set_function, date_added) values ('Insure Tax', 'MODULE_SHIPPING_USPS_INSURE_TAX', 'True', 'Insure tax on packages shipped by USPS?', '6', '0', 'tep_cfg_select_option(array(\'True\', \'False\'), ', 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_DMSTC_INSURANCE_OPTION', 'MODULE_SHIPPING_INTL_INSURANCE_OPTION', 'MODULE_SHIPPING_USPS_TYPES', 'MODULE_SHIPPING_USPS_TYPES_INTL', 'MODULE_SHIPPING_USPS_INS1', 'MODULE_SHIPPING_USPS_INS2', 'MODULE_SHIPPING_USPS_INS3','MODULE_SHIPPING_USPS_INS4', 'MODULE_SHIPPING_USPS_INS5', /*'MODULE_SHIPPING_USPS_INS6', 'MODULE_SHIPPING_USPS_INS7', 'MODULE_SHIPPING_USPS_INS8', 'MODULE_SHIPPING_USPS_INS9', 'MODULE_SHIPPING_USPS_INS10', 'MODULE_SHIPPING_USPS_INSURE', */'MODULE_SHIPPING_USPS_INSURE_TAX');

}

 

function round_up($valueIn, $places=0) {

if ($places < 0) { $places = 0; }

$mult = pow(10, $places);

return (ceil($valueIn * $mult) / $mult);

}

 

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;

 

//RateRequest changed to RateV3Request by Greg Deeth April 30, 2008

if ($order->delivery['country']['id'] == SHIPPING_ORIGIN_COUNTRY) {

$request = '<RateV3Request 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;

 

/********************************************************************** */

//DOMESTIC MAIL OPTIONS

//For Options list, go to page 9 of document: http://www.usps.com/webtools/_pdf/Rate-Calculators-v1-2.pdf

 

//$this->size ='Regular' //Set default value of Regular unless different value is applied below

 

//FIRST CLASS MAIL OPTIONS

if ($key == 'First-Class Mail'){

//WEIGHT THRESHOLD OPTIONS (LETTER is changed to FLAT automatically by USPS when over 3.5oz)

if($this->pounds == 0 && $this->ounces <= 3.5){

//IF WEIGHT MATCHES STATEMENT, THEN:

//IF YOU DO/DON'T WANT MACHINABLE THRESHOLD, REMOVE/ADD COMMENT MARKS AT BEGINNING OF LINE "//"

$this->machinable = 'true'; //OPTIONS: 'true', 'false'

//IF YOU DO/DON'T WANT CONTAINER THRESHOLD, REMOVE/ADD COMMENT MARKS AT BEGINNING OF LINE "//"

$this->FirstClassMailType = 'LETTER'; //OPTIONS: 'LETTER, 'FLAT', 'PARCEL'

}

else{

//IF WEIGHT DOES NOT MATCH STATEMENT, THEN:

//IF YOU DO/DON'T WANT MACHINABLE THRESHOLD, REMOVE/ADD COMMENT MARKS AT BEGINNING OF LINE "//"

$this->machinable = 'false'; //OPTIONS: 'true', 'false'

//IF YOU DO/DON'T WANT CONTAINER THRESHOLD, REMOVE/ADD COMMENT MARKS AT BEGINNING OF LINE "//"

$this->FirstClassMailType = 'FLAT'; //OPTIONS: 'LETTER, 'FLAT', 'PARCEL'

}

}

//PRIORITY MAIL OPTIONS

if ($key == 'Priority Mail'){

$this->container = ''; //OPTIONS: '', 'FLAT RATE BOX', 'FLAT RATE ENVELOPE'

$this->size = 'REGULAR';

}

 

//PRIORITY MAIL FLAT-RATE OPTIONS

//ENVELOPE

if ($key == 'Priority FltRt Envelope'){

$key = 'Priority Mail'; //DO NOT CHANGE

$this->container = 'FLAT RATE ENVELOPE'; //OPTIONS: 'FLAT RATE ENVELOPE', 'FLAT RATE BOX'

$this->size = 'REGULAR';

}

//BOX

if ($key == 'Priority FltRt Box'){

$key = 'Priority Mail'; //DO NOT CHANGE

$this->container = 'FLAT RATE BOX'; //OPTIONS: 'FLAT RATE BOX', 'FLAT RATE ENVELOPE'

$this->size = 'LARGE';

}

 

//EXPRESS MAIL OPTIONS

if ($key == 'Express Mail'){

$this->container = ''; //OPTIONS: '', 'FLAT RATE ENVELOPE'

$this->size = 'REGULAR'; //OPTIONS: 'REGULAR', 'LARGE'

}

 

//PARCEL POST OPTIONS

if ($key == 'Parcel Post'){

//WEIGHT THRESHOLD OPTIONS (DEFAULT MACHINABLE: WEIGHT<70lbs WEIGHT CANNOT EXCEED 70lbs ANYWAY)

if($this->pounds <= 70 && $this->ounces <= 0){

//IF WEIGHT MATCHES STATEMENT, THEN:

//IF YOU DO/DON'T WANT MACHINABLE THRESHOLD, REMOVE/ADD COMMENT MARKS AT BEGINNING OF LINE "//"

$this->machinable = 'true'; //OPTIONS: 'true', 'false'

//IF YOU DO/DON'T WANT SIZE THRESHOLD, REMOVE/ADD COMMENT MARKS AT BEGINNING OF LINE "//"

$this->size = 'REGULAR'; //OPTIONS: 'REGULAR', 'LARGE', 'OVERSIZE'

}

else{

//IF WEIGHT DOES NOT MATCH STATEMENT, THEN:

//IF YOU DO/DON'T WANT MACHINABLE THRESHOLD, REMOVE/ADD COMMENT MARKS AT BEGINNING OF LINE "//"

$this->machinable = 'true'; //OPTIONS: 'true', 'false'

//IF YOU DO/DON'T WANT SIZE THRESHOLD, REMOVE/ADD COMMENT MARKS AT BEGINNING OF LINE "//"

$this->size = 'REGULAR'; //OPTIONS: 'REGULAR', 'LARGE', 'OVERSIZE'

}

}

 

//BPM OPTIONS

if ($key == 'Bound Printed Matter'){

$this->size = 'REGULAR'; //OPTIONS: 'REGULAR', 'LARGE'

}

 

//MEDIA MAIL OPTIONS

if ($key == 'Media Mail'){

$this->size = 'REGULAR'; //OPTIONS: 'REGULAR, 'LARGE'

}

 

//LIBRARY MAIL OPTIONS

 

/*************************************************************************** */

 

$request .= '<Package ID="' . $services_count . '">' .

'<Service>' . $key . '</Service>' .

'<FirstClassMailType>' . $this->FirstClassMailType . '</FirstClassMailType>' .

'<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>' .

//'<ValueOfContents>' . $order->info['total'] . '</ValueOfContents>' .

'</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 Mail': $transreq[$key] = 'API=ExpressMail&XML=' .

urlencode( '<ExpressMailRequest ' . $transitreq . '</ExpressMailRequest>');

break;

case 'Priority Mail': $transreq[$key] = 'API=PriorityMail&XML=' .

urlencode( '<PriorityMailRequest ' . $transitreq . '</PriorityMailRequest>');

break;

case 'Parcel Post': $transreq[$key] = 'API=StandardB&XML=' .

urlencode( '<StandardBRequest ' . $transitreq . '</StandardBRequest>');

break;

default: $transreq[$key] = '';

break;

}

}

 

 

$services_count++;

}

$request .= '</RateV3Request>'; //'</RateRequest>'; //Changed by Greg Deeth April 30, 2008

 

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

} else {

$request = '<IntlRateRequest USERID="' . MODULE_SHIPPING_USPS_USERID . '" PASSWORD="' . MODULE_SHIPPING_USPS_PASSWORD . '">' .

'<Package ID="0">' .

'<Pounds>' . $this->pounds . '</Pounds>' .

'<Ounces>' . round ($this->ounces) . '</Ounces>' .

 

'<MailType>Package</MailType>' .

'<ValueOfContents>' . $order->info['total'] . '</ValueOfContents>' .

'<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 = 'stg-production.shippingapis.com'; //Fixed by Greg Deeth April 30, 2008

$api_dll = 'shippingapitest.dll'; //'shippingapi.dll'; //Fixed by Greg Deeth April 30, 2008

break;

}

 

$body = '';

 

if (!class_exists('httpClient')) {

include('includes/classes/http_client.php');

}

 

$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('user@localhost.com','USPS rate quote response',$body,'From: <user@localhost.com>');

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();

$rates_sorter = 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], '<Rate>')) {

$service = ereg('<MailService>(.*)</MailService>', $response[$i], $regs);

$service = $regs[1];

$postage = ereg('<Rate>(.*)</Rate>', $response[$i], $regs);

$postage = $regs[1];

$insurance = ereg('<Insurance>(.*)</Insurance>', $response[$i], $regs);

$insurance = $regs[1];

 

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

$rates_sorter[] = $postage;

 

if ($transit) {

switch ($service) {

case 'Express Mail': $time = ereg('<MonFriCommitment>(.*)</MonFriCommitment>', $transresp[$service], $tregs);

$time = $tregs[1];

if ($time == '' || $time == 'No Data') {

$time = 'Estimated 1 - 2 ' . MODULE_SHIPPING_USPS_TEXT_DAYS;

} else {

$time = 'Tomorrow by ' . $time;

}

break;

case 'Express Mail Flat-Rate Envelope': $time = ereg('<MonFriCommitment>(.*)</MonFriCommitment>', $transresp[$service], $tregs);

$time = $tregs[1];

if ($time == '' || $time == 'No Data') {

$time = 'Estimated 1 - 2 ' . MODULE_SHIPPING_USPS_TEXT_DAYS;

} else {

$time = 'Tomorrow by ' . $time;

}

break;

case 'Priority Mail': $time = ereg('<Days>(.*)</Days>', $transresp[$service], $tregs);

$time = $tregs[1];

if ($time == '' || $time == 'No Data') {

$time = 'Estimated 1 - 3 ' . MODULE_SHIPPING_USPS_TEXT_DAYS;

} elseif ($time == '1') {

$time .= ' ' . MODULE_SHIPPING_USPS_TEXT_DAY;

} else {

$time .= ' ' . MODULE_SHIPPING_USPS_TEXT_DAYS;

}

break;

case 'Priority Mail Flat-Rate Envelope': $time = ereg('<Days>(.*)</Days>', $transresp[$service], $tregs);

$time = $tregs[1];

if ($time == '' || $time == 'No Data') {

$time = 'Estimated 1 - 3 ' . MODULE_SHIPPING_USPS_TEXT_DAYS;

} elseif ($time == '1') {

$time .= ' ' . MODULE_SHIPPING_USPS_TEXT_DAY;

} else {

$time .= ' ' . MODULE_SHIPPING_USPS_TEXT_DAYS;

}

break;

case 'Priority Mail Flat-Rate Box': $time = ereg('<Days>(.*)</Days>', $transresp[$service], $tregs);

$time = $tregs[1];

if ($time == '' || $time == 'No Data') {

$time = 'Estimated 1 - 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 Post': $time = ereg('<Days>(.*)</Days>', $transresp[$service], $tregs);

$time = $tregs[1];

if ($time == '' || $time == 'No Data') {

$time = 'Estimated 2 - 9 ' . 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 Mail': $time = 'Estimated 1 - 5 ' . MODULE_SHIPPING_USPS_TEXT_DAYS;

break;

default: $time = '';

break;

case 'Media Mail': $time = 'Estimated 2 - 9 ' . MODULE_SHIPPING_USPS_TEXT_DAYS;

break;

default: $time = '';

break;

case 'Bound Printed Matter': $time = 'Estimated 2 - 9 ' . 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);

$time = ' (' . $time . ') ';

 

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

if (isset($this->service) && ($service != $this->service) ) {

continue;

}

 

if (strpos($services[$i], '<Insurance>')) {

$iinsurance = ereg('<Insurance>(.*)</Insurance>', $services[$i], $regs);

$iinsurance = $regs[1];

if (MODULE_SHIPPING_INTL_INSURANCE_OPTION == 'Force Insurance') {

$postage = $postage + $iinsurance;

if ($iinsurance > 0) {

$time = ($time . ' ~~' . MODULE_SHIPPING_USPS_TEXT_INSURED . ' $' . $order->info['total'] . '~~');

}

}

}

 

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

$rates_sorter[] = $postage;

 

if ($time != '') $transittime[$service] = $time;

}

}

}

}

//Sort Rates

//print_r($GlobalTest);

asort($rates_sorter);

$sorted_rates = array();

foreach (array_keys($rates_sorter) as $key){

$sorted_rates[] = $rates[$key];

}

 

return ((sizeof($sorted_rates) > 0) ? $sorted_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;

}

 

// Set up list of maximum allowed insurance values

 

function country_maxinsure() {

$list = array('AF' => 0,

'AL' => 0,

'DZ' => 2185,

'AD' => 5000,

'AO' => 0,

'AI' => 415,

'AG' => 60,

'AR' => 5000,

'AM' => 1350,

'AW' => 830,

'AU' => 3370,

'AT' => 5000,

'AZ' => 5000,

'BS' => 2795,

'BH' => 0,

'BD' => 5000,

'BB' => 220,

'BY' => 1323,

'BE' => 5000,

'BZ' => 1600,

'BJ' => 170,

'BM' => 440,

'BT' => 440,

'BO' => 0,

'BA' => 5000,

'BW' => 145,

'BR' => 5000,

'VG' => 165,

'BN' => 4405,

'BG' => 1030,

'BF' => 530,

'MM' => 4045,

'BI' => 790,

'KH' => 0,

'CM' => 5000,

'CA' => 675,

'CV' => 0,

'KY' => 0,

'CF' => 4405,

'TD' => 440,

'CL' => 0,

'CN' => 1130,

'CX' => 3370,

'CC' => 3370,

'CO' => 0,

'KM' => 690,

'CG' => 1685,

'ZR' => 0,

'CK' => 980,

'CR' => 0,

'CI' => 5000,

'HR' => 5000,

'CU' => 0,

'CY' => 5000,

'CZ' => 5000,

'DK' => 5000,

'DJ' => 880,

'DM' => 0,

'DO' => 0,

'TP' => 0,

'EC' => 0,

'EG' => 1685,

'SV' => 0,

'GQ' => 0,

'ER' => 0,

'EE' => 2020,

'ET' => 1000,

'FK' => 510,

'FO' => 5000,

'FJ' => 600,

'FI' => 5000,

'FR' => 5000,

'GF' => 5000,

'PF' => 1015,

'GA' => 485,

'GM' => 2575,

'GE' => 1350,

'DE' => 5000,

'GH' => 5000,

'GI' => 5000,

'GB' => 857,

'GR' => 5000,

'GL' => 5000,

'GD' => 350,

'GP' => 5000,

'GT' => 0,

'GN' => 875,

'GW' => 21,

'GY' => 10,

'HT' => 0,

'HN' => 0,

'HK' => 5000,

'HU' => 5000,

'IS' => 5000,

'IN' => 2265,

'ID' => 0,

'IR' => 0,

'IQ' => 0,

'IE' => 5000,

'IL' => 0,

'IT' => 5000,

'JM' => 0,

'JP' => 5000,

'JO' => 0,

'KZ' => 5000,

'KE' => 815,

'KI' => 0,

'KW' => 1765,

'KG' => 1350,

'LA' => 0,

'LV' => 1350,

'LB' => 440,

'LS' => 440,

'LR' => 440,

'LY' => 0,

'LI' => 5000,

'LT' => 5000,

'LU' => 5000,

'MO' => 4262,

'MK' => 2200,

'MG' => 675,

'MW' => 50,

'MY' => 1320,

'MV' => 0,

'ML' => 950,

'MT' => 5000,

'MQ' => 5000,

'MR' => 635,

'MU' => 270,

'YT' => 5000,

'MX' => 0,

'MD' => 1350,

'MC' => 5000,

'MN' => 440,

'MS' => 2200,

'MA' => 5000,

'MZ' => 0,

'NA' => 4405,

'NR' => 220,

'NP' => 0,

'NL' => 5000,

'AN' => 830,

'NC' => 1615,

'NZ' => 980,

'NI' => 440,

'NE' => 810,

'NG' => 205,

'KP' => 0,

'NO' => 0,

'OM' => 575,

'PK' => 270,

'PA' => 0,

'PG' => 445,

'PY' => 0,

'PE' => 0,

'PH' => 270,

'PN' => 0,

'PL' => 1350,

'PT' => 5000,

'QA' => 2515,

'RE' => 5000,

'RO' => 5000,

'RU' => 5000,

'RW' => 0,

'SH' => 170,

'KN' => 210,

'LC' => 400,

'PM' => 5000,

'VC' => 130,

'SM' => 5000,

'ST' => 440,

'SA' => 0,

'SN' => 865,

'YU' => 5000,

'SC' => 0,

'SL' => 0,

'SG' => 4580,

'SK' => 5000,

'SI' => 4400,

'SB' => 0,

'SO' => 440,

'ZA' => 1760,

'GS' => 510,

'KR' => 5000,

'ES' => 5000,

'LK' => 35,

'SD' => 0,

'SR' => 535,

'SZ' => 560,

'SE' => 5000,

'CH' => 5000,

'SY' => 3080,

'TW' => 1350,

'TJ' => 1350,

'TZ' => 230,

'TH' => 1350,

'TG' => 2190,

'TK' => 295,

'TO' => 515,

'TT' => 930,

'TN' => 2200,

'TR' => 880,

'TM' => 675,

'TC' => 0,

'TV' => 4715,

'UG' => 0,

'UA' => 5000,

'AE' => 5000,

'UY' => 0,

'UZ' => 5000,

'VU' => 0,

'VA' => 5000,

'VE' => 0,

'VN' => 0,

'WF' => 1615,

'WS' => 295,

'YE' => 0,

'ZM' => 540,

'ZW' => 600,

'US' => 5000);

 

return $list;

}

}

?>

Share this post


Link to post
Share on other sites

Well I seem to have gotten it to work sort of but there are no options to select an international shipping method.

Domestic Shipping Methods

Priority Mail, First-Class Mail, Media Mail

 

Domstic First-Class Threshold

0, 3.5, 3.5, 10, 10, 13, 0, 13

 

Domstic Priority Mail Threshold

0, 70, 0, 70, 0, 70

 

Domstic Other Mail Threshold

0, 0, 0, 70, 0, 70, 0, 0, 0, 0, 0, 70, 0, 70

 

Int'l Shipping Methods

 

 

US/Canada $.01-$50.00

$1.75

 

US/Canada $50.01-$100.00

$2.25

 

US/Canada $100.01-$200.00

$2.75

 

US/Canada $200.01-$300.00

$4.70

 

US/Canada per $100 over $300

$1.00

 

Insure Tax

False


On your last day only you will have to approve or disaprove of how your life has been.

Share this post


Link to post
Share on other sites

Sounds like a database problem.

 

Go into your database and check your data is right. Sometimes you can end up with duplicate records which can confuse things. Otherwise sounds like data missing.

 

I know at some stage (not sure it was USPS) I have had to increase field size to store content of shipping modules.


Kym

Projects Director @ ozEworks.com

Share this post


Link to post
Share on other sites

Hi,

 

I've installed update and international is working fine.

One thing I've run across that is still not working however - Priority Mail Flat Rate envelope is no longer including the handling fee.

Anyone got an idea why it suddenly stopped working? I get the base rate quote, but no longer the handling fee thats set in module. I was until this change by USPS.

Ideas?

 

thanks,

Share this post


Link to post
Share on other sites

Ok Figured out resolution for my issue with handling fees.

Sharing for others -

 

Appears service name changed on a couple domestic rates as well.

 

I made 2 changes to $service switch.

 

Search for "switch ($service) {"

 

Remove the hyphen from the following:

case 'Priority Mail Flat-Rate Envelope':

 

so it appears:

case 'Priority Mail Flat Rate Envelope':

 

 

Change on box rate:

case 'Priority Mail Flat-Rate Box':

 

to

case 'Priority Mail Medium Flat Rate Box':

 

 

this fixed all my handling issues.

Share this post


Link to post
Share on other sites

Appears service name changed on a couple domestic rates as well.

 

I made 2 changes to $service switch.

 

...

 

Change on box rate:

case 'Priority Mail Flat-Rate Box':

 

to

case 'Priority Mail Medium Flat Rate Box':

This was not enough for my installation. It looked good on the first checkout screen, where you select your shipping type. However, on the checkout confirmation, it came up with the wrong shipping type (I had three options). I did a search and replace of *ALL* "Priority Mail Flat-Rate Box" to "Priority Mail Medium Flat Rate Box". That fixed it.

Share this post


Link to post
Share on other sites

Hello,

I have managed to get this working for all cases. I must say that neither the code posted in the contribution nor the updates posted here are entirely correct. I used the contribution then updated it with the code post in this thread.

However the error that the options to select international shipping methods is still not showing on the admin configuration page and when I select edit for the module I still get the error

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')' in /home/directory/directory/catalog/admin/modules.php(225) : eval()'d code on line 1

I had to insert the international shipping methods by hand in myphp admin. It would be nice to get a final correct edit of this posted to the contribution page. I am willing to give my code to anyone willing to work on that. I would also be nice to get a fix in place to be able to sort this out from the oscommerce admin the next time that USPS screws us.

Cheers


On your last day only you will have to approve or disaprove of how your life has been.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×