Steps to cancel order programmatically in Magento 2

As we know that Magento is an powerful ecommerce platform these days which offers managed marketing, catalog-management, seo tools and many more. But magento doesn't provide some of the essential features of a ecommerce platform. Similarly order cancellation from front end is not possible without custom programmaticallyhack in coding. It's a great feature to build up customer trust factor on ecommerce website. In this article, we are going to elaborate steps to cancel a order programmaticallyin magento 2 and for implementation of this functionality you don't need to install any module or patch in magento setup.
Step 1 : Create a new Controller
We need to initialize our code with controller which would contains a constructor & execute interface method. In constructor, we need to pass a argument of orderManagement type.
orderMgt = $orderMgt; $this->messageManager = $messageManager; parent::__construct($context); } public function execute() { // Initiate Object Manager $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); // Fetch Loggedin User Session $customerSession = $objectManager->get('Magento\Customer\Model\Session'); // Check is User Logged In or Not if(!$customerSession->isLoggedIn()) { $this->_redirect('/'); die; } // Get request parameters $cid = $customerSession->getCustomer()->getId(); $oid = $this->getRequest()->getParam('order_id'); // Get request parameters $order = $objectManager->create('Magento\Sales\Model\Order')->load($oid); // Fetch Order Data $orderdata = $order->getData(); // Get Order Status $order_status = $orderdata["status"]; // Get Customer Id of Order $cus_id = $orderdata["customer_id"]; // Check if logged in user & Order customer is same or not if($cid != $cus_id) { $this->messageManager->addError("Sorry, We cant cancel your order right now.") ; } // Check Order Status if($order_status == "pending") { $this->orderMgt->cancel($oid); $this->messageManager->addSuccess("Your order has been cancelled successfully.") ; } else { $this->messageManager->addError("Sorry, We cant cancel your order right now.") ; } } }
Step 2 : Execute Method
In this step, we will call method by passing valid order id in template file.
$order_id = 123; $this->cancelmyorder($order_id);
Now, you are ready with custom script to cancel order programmatically. Once, code will get execute, you'll get a sucess or error message.