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" ;

        }
}


}
Другие вопросы по тегам