I'm trying to create a custom shipping method in Magento 2.1.7. I've followed the tutorial of Mageplaza:
https://www.mageplaza.com/magento-2-create-shipping-method/
The problem is that the shipping method doesn't show in the checkout, after trying multiple things.
I think i'm missing something small, maybe someone knows the answer?
What i've tried:
- Clearing the caches
- Enabling the module
- Changing the module name
- Applying and changing the shipping method backend configuration
- Disabling other checkout modules
Code (Mageplaza\Simpleshipping\Model\Carrier):
<?php
namespace Mageplaza\Simpleshipping\Model\Carrier;
use Magento\Quote\Model\Quote\Address\RateRequest;
use Magento\Shipping\Model\Rate\Result;
class Shipping extends \Magento\Shipping\Model\Carrier\AbstractCarrier implements
\Magento\Shipping\Model\Carrier\CarrierInterface
{
/**
* @var string
*/
protected $_code = 'simpleshipping';
/**
* Shipping constructor.
*
* @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;
parent::__construct($scopeConfig, $rateErrorFactory, $logger, $data);
}
/**
* get allowed methods
* @return array
*/
public function getAllowedMethods()
{
return [$this->_code => $this->getConfigData('name')];
}
/**
* @param RateRequest $request
* @return bool|Result
*/
public function collectRates(RateRequest $request)
{
if (!$this->getConfigFlag('enable')) {
return true;
}
/** @var \Magento\Shipping\Model\Rate\Result $result */
$result = $this->_rateResultFactory->create();
/** @var \Magento\Quote\Model\Quote\Address\RateResult\Method $method */
$method = $this->_rateMethodFactory->create();
$method->setCarrier($this->_code);
$method->setCarrierTitle($this->getConfigData('title'));
$method->setMethod($this->_code);
$method->setMethodTitle($this->getConfigData('name'));
$amount = $this->getConfigData('price');
$method->setPrice($amount);
$method->setCost($amount);
$result->append($method);
return $result;
}
}
Code (config.xml):
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
<default>
<carriers>
<simpleshipping>
<enable>1</enable>
<sallowspecific>0</sallowspecific>
<model>Mageplaza\Simpleshipping\Model\Carrier\Shipping</model>
<name>Mageplaza Sample Shipping Method</name>
<price>10.00</price>
<title>Mageplaza Sample Shipping Method</title>
<type>I</type>
<specific_error_msg>This shipping method is not available. To use this shipping method, please contact
us.
</specific_error_msg>
</simpleshipping>
</carriers>
</default>
</config>