2016-02-18 12 views
0

Я работаю над пользовательским методом доставки, и каждый раз я получаю исключение. Я пытаюсь разместить заказ с помощью моего метода («Укажите способ доставки»).Пользовательский способ доставки - укажите способ доставки

Я попробовал метод 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: Хорошо, я думаю, что знаю, что испортило. Я предполагаю, что существует ограничение размера для имени метода, и мое первое имя содержит слишком много символов.

ответ

0

Вы также пробовали этот? http://inchoo.net/magento-2/creating-a-shipping-method-in-magento-2/

Не могли бы вы разместить здесь свой config.xml, чтобы мы могли проверить правильность конфигурации вашего оператора?

+0

Спасибо, я отредактировал мое сообщение. Я тоже не пробовал это, но я также пробовал с этим: https://github.com/sohelrana09/Magento2-Custom-Shipping-Method, и этот работает ... – cdauphin

+0

Я попытался изменить значение $ _code (Method.php) и имя дочернего элемента (config.xml), и это сработало ... Я думаю, что это была проблема с кешем ... – cdauphin

+0

@cdauphin Я использую http: //www.blog.magepsycho .com/create-custom-shipping-module-in-magento-2/и получение ошибки. Укажите способ доставки после выбора способа оплаты. –

0

Мой случай: защищенный $ _code = 'effectconnect_shipment'; => так что полный код должен быть 'effectconnect_shipment_effectconnect_shipment' Я проверил, длина этого кода составляет всего 40, поэтому переименуйте его в $ _code = 'effectconnect'; и это работает !!!

 Смежные вопросы

  • Нет связанных вопросов^_^