Magento2: "Please specify a shipping method" Exception

Created on 14 Jun 2016  路  23Comments  路  Source: magento/magento2

Steps to reproduce

  1. Install Magento from develop branch.
  2. Install 3rd test shipping provider
  3. Able to show rate in checkout page
  4. Able to choose payment methods
  5. Click on "Place order"
  6. Exception is throwed "Please specify a shipping method"

    Expected result

  7. Should go to success page

    Actual result

  8. Exception is throwed "Please specify a shipping method"

I searched for the string and in file \vendor\magento\module-quote\Model\QuoteValidator.php line 53
the $method variable is null

My collectrates in shipping adapter is
$method = $this->_rateMethodFactory->create();

        $method->setCarrier($this->_code);
        $method->setCarrierTitle($this->getConfigData('name'));

        $method->setMethod('express_method');
        $method->setMethodTitle($this->getConfigData('express_title'));

        $method->setPrice($this->getConfigData('express_price'));
        $method->setCost($this->getConfigData('express_price'));

        $result->append($method);

I noticed that when I remove the underscore symple and change $method->setMethod('express_method'); to $method->setMethod('expressmethod');
the checkout went through successfully.

I wonder can I use "_" symbol in function setmethod? I don't have this problem in magento 1

Shipping Fixed in 2.2.x Fixed in 2.3.x Cannot Reproduce Format is not valid bug report

Most helpful comment

@magento-engcom-team I think it would be worth adding documentation for maximum carrier + rate name length. Otherwise, it becomes quite an obtuse error when creating custom shipping methods.

All 23 comments

I need to modify my code to this , and checkout went through

        $code = str_ireplace('_','',strtolower($code) );
        $method = $this->_rateMethodFactory->create();
$method->setMethod($code);

I have remove underscore too, but no success.

The error message ("Please specify a shipping method") still showing

@lutpiero you may need to covert string to lower also

Same as yours, but still no luck

I found that we can't use long name :( try that

Hi @vphat28! Please specify what 3rd party shipping provider do you use?

hi @dyushkin it's just my custom test shipping with offline payment

I have also been experiencing this with our Meanbee Royal Mail extension for Magento 2.

After adding a log line to \vendor\magento\module-quote\Model\QuoteValidator.php. I also can see that a method code is fetched but no rate.

The logging suggests that the method code has been truncated and so when it tries to find a rate it is unable.

Royal Mail Method: meanbee_royalmail_firstclasssignedforsma {"is_exception":false} []

The code above should be "meanbee_royalmail_firstclasssignedforsmall".

When I change the Carrier code to "rm" and therefore the shipping code reduces to "rm_firstclasssignedforsmall" without being truncated, the PayPal Express order with review step enabled works.

Hi @vphat28
Unfortunately, we can not reproduce the issue on clean Magento installation. But looks like you found a solution for your issue.

@magento-engcom-team I think it would be worth adding documentation for maximum carrier + rate name length. Otherwise, it becomes quite an obtuse error when creating custom shipping methods.

@bobbyshaw, do you know which is the maximum length allowed?

I'm not 100% but I think it's 40 characters.

Thank you!

Thank you @vphat28 ! I've had the same issue. Removing underscore solved it.

@magento-engcom-team Have you tried it on magento 2.2.0 ? (I didn't have this issue at 2.1.9)

The issue is persistend in 2.1.9 - my shipping extension has the underscore - after remove everything works as expected. Thanks vphat28

Longer shipping method code cause issue. After minimized shipping method worked for me too.

@vphat28, thanks for kind info.

I have the same problem with underscore in my shipping carrier code and rate (Magento 2.2.5).
This issue is only for logged in customers.

@magento-engcom-team - I found code responsible for this issue and I in my opinion it isn't good idea do explode on shipping method code in method responsible for save payment information \Magento\Checkout\Model\PaymentInformationManagement::savePaymentInformation method:

https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Model/PaymentInformationManagement.php#L118

    if ($shippingAddress && $shippingAddress->getShippingMethod()) {
        $shippingDataArray = explode('_', $shippingAddress->getShippingMethod());
        $shippingCarrier = array_shift($shippingDataArray);
        $shippingAddress->setLimitCarrier($shippingCarrier);
    }

I have solution for it and I will upload pull request soon.

idziakjakub is correct. That behavior is identical to issues we are having with a carrier code containing an underscore.

Hi @vphat28. Thank you for your report.
The issue has been fixed in magento/magento2#18689 by @idziakjakub in 2.3-develop branch
Related commit(s):

The fix will be available with the upcoming 2.3.1 release.

Hi @vphat28. Thank you for your report.
The issue has been fixed in magento/magento2#18870 by @gelanivishal in 2.2-develop branch
Related commit(s):

The fix will be available with the upcoming 2.2.8 release.

Hi @vphat28. Thank you for your report.
The issue has been fixed in magento/magento2#19505 by @vovsky in 2.3-develop branch
Related commit(s):

The fix will be available with the upcoming 2.3.2 release.

Hi @vphat28. Thank you for your report.
The issue has been fixed in magento/magento2#21340 by @hostep in 2.2-develop branch
Related commit(s):

The fix will be available with the upcoming 2.2.9 release.

Please see my solution here: https://magento.stackexchange.com/a/320495/15474

You need to use this model \Magento\Quote\Model\Quote\Address\Rate

Was this page helpful?
0 / 5 - 0 ratings