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
    Commented Jun 11, 2013 at 12:04
  • I did it - doesn't help. Anyway I have two similar customers with only different email.
    – Anthony
    Commented Jun 11, 2013 at 12:05
  • What shipping methods do you use?
    – mageUz
    Commented Jun 12, 2013 at 5:56
  • Custom methods. Its based on freedelivery methods
    – Anthony
    Commented Jun 12, 2013 at 8:50
  • Maybe 2 customers have different products with differs weight? Or some shopping cart price rules affects
    – mageUz
    Commented Jun 12, 2013 at 11:41

1 Answer 1


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 and acknowledge you have read our privacy policy.

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