really you would want to store the result of your ZoneShippingTotal() function into a session variable, then create a shipping rule that uses a flat rate calculation of $_SESSION['sessionName'] where session name is the session you create. and instead of manually adding it to the subtotal, let eCart do that for you.