Magento 2 从我的帐户页面取消订单
Magento 2 cancel order from myaccount page
以编程方式取消 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 中加载了带有订单 ID 的订单,但无法取消订单。
您应该为此使用 API(更多关于 magento2 API concepts),例如如何在您的 class:
中使用它
<?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" ;
}
}
}
以编程方式取消 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 中加载了带有订单 ID 的订单,但无法取消订单。
您应该为此使用 API(更多关于 magento2 API concepts),例如如何在您的 class:
中使用它<?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" ;
}
}
}