Magento 2 отменить заказ со страницы моего аккаунта
Порядок отмены в magento 2 программно:
Я реализовал модуль в magento 1, в котором я отменю отложенный заказ от клиента на странице моей учетной записи.
Пожалуйста, обратитесь к коду ниже, который я реализовал в magento 1:
$order = Mage::getModel('sales/order')->load($orderId);
$order_status=$order->setState(Mage_Sales_Model_Order::STATE_CANCELED, true)->save();
Я хочу реализовать такую же функциональность в magento 2. Кто-нибудь знает, как это реализовать?
Я загрузил заказ с идентификатором заказа в magento 2, но не могу отменить заказ.
2 ответа
Решение
Для этого вы должны использовать API (подробнее о концепциях API magento2), например, как использовать его в своем классе:
<?php
use Magento\Sales\Api\OrderManagementInterface;
class A
{
/**
* @var OrderManagementInterface
*/
private $orderManagement;
/**
* @param OrderManagementInterface $orderManagement
*/
public function __construct(OrderManagementInterface $orderManagement)
{
$this->orderManagement = $orderManagement;
}
public function cancelOrderOne()
{
$orderId = 1;
$isCanceled = $this->orderManagement->cancel($orderId);
}
}
Пожалуйста, посмотрите на код ниже, он также проверит ассоциации пользователей для заказа также
<?php
Nmaespace\Modulename\Controller\Action;
class Cancelorder extends \Magento\Framework\App\Action\Action
{
protected $orderManagement;
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Sales\Api\OrderManagementInterface $orderManagement
) {
$this->orderManagement = $orderManagement;
parent::__construct($context);
}
public function execute()
{
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerSession = $objectManager->get('Magento\Customer\Model\Session');
if(!$customerSession->isLoggedIn()) {
$this->_redirect('/');
die;
}
/*get request params */
$get_customer_id = $customerSession->getCustomer()->getId();
$get_order_id = $this->getRequest()->getParam('order_id');
/*get request params */
//die;
$order = $objectManager->create('Magento\Sales\Model\Order')->load($get_order_id);
$getcustomerid = $get_customer_id;
$orderdata = $order->getData();
$order_status = $orderdata["status"];
//print_r($orderdata);
$cus_id = $orderdata["customer_id"];
if($getcustomerid != $cus_id){
echo "We cant Cancel this order at this time" ;
//die("go back");
}
if($order_status == "pending"){
$this->orderManagement->cancel($get_order_id);
echo "Order Cancelled successfully" ;
}
else{
echo "We cant Cancel this order at this time" ;
}
}
}