magento / magento2

Prior to making any Submission(s), you must sign an Adobe Contributor License Agreement, available here at: https://opensource.adobe.com/cla.html. All Submissions you make to Adobe Inc. and its affiliates, assigns and subsidiaries (collectively “Adobe”) are subject to the terms of the Adobe Contributor License Agreement.
http://www.magento.com
Open Software License 3.0
11.5k stars 9.31k forks source link

"Please specify a shipping method" Exception #5021

Closed vphat28 closed 5 years ago

vphat28 commented 8 years ago

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

vphat28 commented 8 years ago

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

        $code = str_ireplace('_','',strtolower($code) );
        $method = $this->_rateMethodFactory->create();
$method->setMethod($code);
lutpiero commented 8 years ago

I have remove underscore too, but no success.

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

vphat28 commented 8 years ago

@lutpiero you may need to covert string to lower also

lutpiero commented 8 years ago

Same as yours, but still no luck

vphat28 commented 8 years ago

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

dyushkin commented 8 years ago

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

vphat28 commented 8 years ago

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

bobbyshaw commented 8 years ago

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.

magento-engcom-team commented 7 years ago

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

bobbyshaw commented 7 years ago

@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.

dtamajon commented 6 years ago

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

bobbyshaw commented 6 years ago

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

dtamajon commented 6 years ago

Thank you!

tufahu commented 6 years ago

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)

BergMedia commented 6 years ago

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

jimuld commented 6 years ago

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

@vphat28, thanks for kind info.

idziakjakub commented 5 years ago

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.

ccrothers commented 5 years ago

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

sidolov commented 5 years ago

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.

magento-engcom-team commented 5 years ago

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.

magento-engcom-team commented 5 years ago

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.

magento-engcom-team commented 5 years ago

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.

blackstalk commented 4 years ago

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

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