I have 4 shipping methods.

The old customer gets only 2 methods. I've created the same customer with another email. It gets all 4 shipping methods.

I dived into code and DB table sales_flat_quote_shipping_rate.

Sorting by address_id we have: for old customer: 2 rate records; for the same new customer: 4 rate records.

Why does it happens? and where is rate record created?


I doesn't depends on address. It depends on product. If product has filled weight then customer cannot see some shipping methods. Now the question is why?)

  • maybe you have restrictions on the shipping address for carrier availability. Try with a different address for the first customer that gets only 2 shipping methods. (change the state, or country or city...or all of them) – Marius Jun 11 '13 at 12:04
  • I did it - doesn't help. Anyway I have two similar customers with only different email. – Anthony Jun 11 '13 at 12:05
  • What shipping methods do you use? – mageUz Jun 12 '13 at 5:56
  • Custom methods. Its based on freedelivery methods – Anthony Jun 12 '13 at 8:50
  • Maybe 2 customers have different products with differs weight? Or some shopping cart price rules affects – mageUz Jun 12 '13 at 11:41

The reason was in proccessAdditionalValidation function in Mage_Shipping_Model_Carrier_Abstract class:

         * Processing additional validation to check is carrier applicable.
         * @param Mage_Shipping_Model_Rate_Request $request
         * @return Mage_Shipping_Model_Carrier_Abstract|Mage_Shipping_Model_Rate_Result_Error|boolean
        public function proccessAdditionalValidation(Mage_Shipping_Model_Rate_Request $request)
            $maxAllowedWeight = (float) $this->getConfigData('max_package_weight');
            $error = null;
            $showMethod = $this->getConfigData('showmethod');
            foreach ($request->getAllItems() as $item) {
                if ($item->getProduct() && $item->getProduct()->getId()) {

// here I got true

                    if ($item->getProduct()->getWeight() > $maxAllowedWeight) {                         $error = Mage::getModel('shipping/rate_result_error');
                        $errorMsg = $this->getConfigData('specificerrmsg');
                        $error->setErrorMessage($errorMsg?$errorMsg:Mage::helper('shipping')->__('The shipping module is not available.'));
            if (null !== $error && $showMethod) {
                return $error;
            } elseif (null !== $error) {
                return false;
            return $this;

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.