I've noted zc156 since I'm chasing an issue on a site with zc156c installed, but the question is still valid for zc157+.
Notice that the zc157c version of the order.php class (lines 312 thru 326):
Code:
$shipping_module_code = '';
// A shipping-module's 'code', if present in the session, **must** contain a '_' character, separating
// the shipping module's name from the selected method, e.g. 'module_method'. That '_' cannot be the first
// character of the 'code' value.
//
// If that's not the case, issue a PHP Notice and reset the shipping to its unselected state.
//
if (isset($_SESSION['shipping'])) {
if (!empty($_SESSION['shipping']['id']) && strpos((string)$_SESSION['shipping']['id'], '_')) {
$shipping_module_code = $_SESSION['shipping']['id'];
} else {
trigger_error('Malformed value for session-based shipping module; customer will need to re-select: ' . json_encode($_SESSION['shipping']), E_USER_NOTICE);
unset($_SESSION['shipping']);
}
}
... defaults that shipping_module_code to a blank string if the session's shipping information isn't set, which ultimately leads to a 0-value shipping being applied. Can anyone identify a scenario where a valid order doesn't have a shipping selection registered in $_SESSION['shipping']?
Bookmarks