自定义送货方式错误:请指定送货方式

时间:2018-05-03 19:47:25

标签: php magento magento2

我的商店里有各种各样的自定义送货方式,但我注意到,如果用户已登录,则订单无法完成。用户选择运输方法需要,然后他无法通过付款方式,因为它不断发出此错误:Please specify a shipping method

Heres my code:

型号/运营商/ CustomShipping.php

<?php

namespace Magenticians\Moduleshipping\Model\Carrier;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\DataObject;
use Magento\Shipping\Model\Carrier\AbstractCarrier;
use Magento\Shipping\Model\Carrier\CarrierInterface;
use Magento\Shipping\Model\Config;
use Magento\Shipping\Model\Rate\ResultFactory;
use Magento\Store\Model\ScopeInterface;
use Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory;
use Magento\Quote\Model\Quote\Address\RateResult\Method;
use Magento\Quote\Model\Quote\Address\RateResult\MethodFactory;
use Magento\Quote\Model\Quote\Address\RateRequest;
use Psr\Log\LoggerInterface;

class Customshipping extends AbstractCarrier implements CarrierInterface
{

/**

* Carrier's code
*
* @var string
*/

protected $_code = 'magenticians_moduleshipping';
/**
* Whether this carrier has fixed rates calculation
*
* @var bool
*/

protected $_isFixed = true;
/**
* @var ResultFactory
*/

protected $_rateResultFactory;
/**
* @var MethodFactory
*/

protected $_rateMethodFactory;
/**
* @param ScopeConfigInterface $scopeConfig
* @param ErrorFactory $rateErrorFactory
* @param LoggerInterface $logger
* @param ResultFactory $rateResultFactory
* @param MethodFactory $rateMethodFactory
* @param array $data
*/

public function __construct(
ScopeConfigInterface $scopeConfig,
ErrorFactory $rateErrorFactory,
LoggerInterface $logger,
ResultFactory $rateResultFactory,
MethodFactory $rateMethodFactory,
array $data = []
) {

$this->_rateResultFactory = $rateResultFactory;
$this->_rateMethodFactory = $rateMethodFactory;
parent::__construct($scopeConfig, $rateErrorFactory, $logger, $data);
}

/**
* Generates list of allowed carrier`s shipping methods
* Displays on cart price rules page
*
* @return array
* @api
*/

public function getAllowedMethods()
{
return [$this->getCarrierCode() => __($this->getConfigData('name'))];
}
/**
* Collect and get rates for storefront
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
* @param RateRequest $request
* @return DataObject|bool|null
* @api
*/

public function collectRates(RateRequest $request)
{
/**
* Make sure that Shipping method is enabled
*/
if (!$this->isActive()) {
return false;
}
$weight = 0;
    if ($request->getAllItems())
    {
        foreach ($request->getAllItems() as $item)
        {
            if ($item->getProduct()->isVirtual())
            {
                continue;
            }

            if ($item->getHasChildren())
            {
                foreach ($item->getChildren() as $child)
                {
                    if (! $child->getProduct()->isVirtual())
                    {
                        $weight += $child->getWeight();
                    }
                }
            } else
            {

                $weight += $item->getWeight();
            }
        }
    }
$final_weight = $weight;
/** @var \Magento\Shipping\Model\Rate\Result $result */
$result = $this->_rateResultFactory->create();
$shippingPrice = $this->getConfigData('price');
$method = $this->_rateMethodFactory->create();
/**
* Set carrier's method data
*/
$method->setCarrier($this->getCarrierCode());
$method->setCarrierTitle($this->getConfigData('title'));
/**
* Displayed as shipping method under Carrier
*/

$method->setMethod($this->getCarrierCode());
$method->setMethodTitle($this->getConfigData('name'));
$method->setPrice($shippingPrice);
$method->setCost($shippingPrice);
if($final_weight <= 2) {
$result->append($method);
}
return $result;
}
} 

似乎无法找到原因,我将我的代码与其他代码进行了比较,看起来非常相似。

提前致谢。

1 个答案:

答案 0 :(得分:1)

似乎magento 2.2不喜欢属性$ _code上的下划线。

$_code = 'magenticians_moduleshipping';

尝试更改为

protected $_code = 'magenticiansmoduleshipping';