Я работаю над пользовательским методом доставки, и каждый раз я получаю исключение. Я пытаюсь разместить заказ с помощью моего метода («Укажите способ доставки»).Пользовательский способ доставки - укажите способ доставки
Я попробовал метод Magento 2 Flat Rate, и он сработал.
Я обнаружил, что в Magento/Цитата/модель/QuoteValidator.php на линии 52, то getShippingMethod()
не дал ничего, потому, что функции:
public function getShippingMethod()
{
return $this->getData('shipping_method');
}
в Magento/Цитата/модель/Цитата/Address.php не вернулся ничего ,
На всякий случай мой код был неправильным, я также пробовал с помощью этого пользовательского метода доставки (я следовал этому руководству, чтобы создать метод) http://www.blog.magepsycho.com/create-custom-shipping-module-in-magento-2/ (просто активируйте модуль и попытайтесь сделать заказ с помощью этого метода), но я сталкиваясь с той же проблемой.
Кто-нибудь знает, как я могу решить эту проблему? Спасибо.
Edit 1:
Существует моя модель/Carrier/method.php:
class Method extends \Magento\Shipping\Model\Carrier\AbstractCarrier implements \Magento\Shipping\Model\Carrier\CarrierInterface
{
protected $_logger;
/**
* @var string
*/
protected $_code = 'coursierprive_transport';
/**
* @var bool
*/
protected $_isFixed = true;
/**
* @var \Magento\Shipping\Model\Rate\ResultFactory
*/
protected $_rateResultFactory;
/**
* @var \Magento\Quote\Model\Quote\Address\RateResult\MethodFactory
*/
protected $_rateMethodFactory;
/**
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
* @param \Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory $rateErrorFactory
* @param \Psr\Log\LoggerInterface $logger
* @param \Magento\Shipping\Model\Rate\ResultFactory $rateResultFactory
* @param \Magento\Quote\Model\Quote\Address\RateResult\MethodFactory $rateMethodFactory
* @param array $data
*/
public function __construct(
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
\Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory $rateErrorFactory,
\Psr\Log\LoggerInterface $logger,
\Magento\Shipping\Model\Rate\ResultFactory $rateResultFactory,
\Magento\Quote\Model\Quote\Address\RateResult\MethodFactory $rateMethodFactory,
array $data = []
)
{
$this->_rateResultFactory = $rateResultFactory;
$this->_rateMethodFactory = $rateMethodFactory;
$this->_logger = $logger;
parent::__construct($scopeConfig, $rateErrorFactory, $logger, $data);
}
/**
* @param RateRequest $request
* @return \Magento\Shipping\Model\Rate\Result
* @SuppressWarnings(PHPMD.UnusedLocalVariable)
*/
public function collectRates(RateRequest $request)
{
if (!$this->getConfigFlag('active'))
return (false);
if ($request->getAllItems())
{
foreach ($request->getAllItems() as $item)
{
// Some stuff used to check dimensions, weight, post code... etc
}
}
if (//some tests)
return (false);
$result = $this->_rateResultFactory->create();
$shippingPrice = 5.5;
$method = $this->_rateMethodFactory->create();
$method->setCarrier($this->_code);
$method->setCarrierTitle($this->getConfigData('title'));
$method->setMethod($this->_code);
$method->setMethodTitle($this->getConfigData('name'));
if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes())
$shippingPrice = 0;
$method->setPrice($shippingPrice);
$method->setCost($shippingPrice);
$result->append($method);
return ($result);
}
/**
* Get allowed shipping methods
*
* @return array
*/
public function getAllowedMethods()
{
return (['coursierprive_transport' => $this->getConfigData('name')]);
}
}
Edit 2:
Существует мой Config.xml:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../Magento/Store/etc/config.xsd">
<default>
<carriers>
<coursierprive_transport>
<active>1</active>
<sallowspecific>0</sallowspecific>
<price>5.5</price>
<model>CoursierPrive\Transport\Model\Carrier\Method</model>
<name>Express</name>
<title>Coursier Privé</title>
<specificerrmsg>This shipping method is not available. To use this shipping method, please contact us.</specificerrmsg>
</coursierprive_transport>
</carriers>
</default>
Edit 3: Хорошо, я думаю, что знаю, что испортило. Я предполагаю, что существует ограничение размера для имени метода, и мое первое имя содержит слишком много символов.
Спасибо, я отредактировал мое сообщение. Я тоже не пробовал это, но я также пробовал с этим: https://github.com/sohelrana09/Magento2-Custom-Shipping-Method, и этот работает ... – cdauphin
Я попытался изменить значение $ _code (Method.php) и имя дочернего элемента (config.xml), и это сработало ... Я думаю, что это была проблема с кешем ... –
cdauphin
@cdauphin Я использую http: //www.blog.magepsycho .com/create-custom-shipping-module-in-magento-2/и получение ошибки. Укажите способ доставки после выбора способа оплаты. –