【问题标题】:Magento 2 cancel order from myaccount pageMagento 2 从我的帐户页面取消订单
【发布时间】:2016-02-11 15:24:54
【问题描述】:

以编程方式取消 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 的订单,但无法取消订单。

【问题讨论】:

    标签: magento magento2 magento-2.0


    【解决方案1】:

    您应该为此使用 API(有关 magento2 API concepts 的更多信息),例如如何在您的课程中使用它:

    <?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);
        }
    }
    

    【讨论】:

    • @Anton Ohorodnyk 和@user3124850 能否请您提供确切的文件结构。我可以在我的前端控制器中使用此代码吗
    • 我已经这样做了,效果很好magentocodes.blogspot.in/2017/10/…
    【解决方案2】:

    请看下面的代码,它也会验证订单的用户关联

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

    【讨论】:

      猜你喜欢
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-09
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多