已取消的Paypal订单未在Magento管理员中显示

时间:2015-07-10 12:11:47

标签: magento paypal

我已经配置了一个Magento 1.9社区商店,所有通过Paypal或其他付款方式(如货到付款)付款的订单都会显示在后端。

然而,当我结帐选择Paypal作为网关时,在Paypal页面上取消我的订单并返回到网站 - 我的订单没有显示在管理员中。它不应该显示为已取消的订单。

由于这是从Shopify迁移的商店,我们必须手动创建大约100个订单并手动更改数据库中的日期。这可能是造成这种意外行为的原因吗?

编辑1:即使paypal窗口关闭,也没有点击取消,因为网格中没有显示订单信息。

2 个答案:

答案 0 :(得分:9)

这是显而易见的,因为当您(作为客户)在PayPal付款页面中取消订单时,它会在重定向到商店之前自动销毁(取消设置)订单和订单报价 - 不要与名人混淆:已取消订单顾名思义显示实际已完成然后取消的订单。

根据您使用的PayPal方法,可以区别对待。

在标准PayPal中,您可以在此控制器中找到它:

  

\ magento \ app \ code \ core \ Mage \ Paypal \ controllers \ StandardController.php

当您取消订单cancelAction()时,它会先取消订单:

    public function cancelAction()
{
    $session = Mage::getSingleton('checkout/session');
    $session->setQuoteId($session->getPaypalStandardQuoteId(true));
    if ($session->getLastRealOrderId()) {
        $order = Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId());
        if ($order->getId()) {
            $order->cancel()->save();
        }
        Mage::helper('paypal/checkout')->restoreQuote();
    }
    $this->_redirect('checkout/cart');
}

然后redirectAction()在重定向回购物车页面之前取消设置引号:

    public function redirectAction()
{
    $session = Mage::getSingleton('checkout/session');
    $session->setPaypalStandardQuoteId($session->getQuoteId());
    $this->getResponse()->setBody($this->getLayout()->createBlock('paypal/standard_redirect')->toHtml());
    $session->unsQuoteId();
    $session->unsRedirectUrl();
}

另一方面,在PayPal Express中,在此控制器中触发取消操作:

  

\应用\代码\核心\法师\贝宝\控制器\快递\ Abstract.php

    public function cancelAction()
{
    try {
        $this->_initToken(false);
        // TODO verify if this logic of order cancelation is deprecated
        // if there is an order - cancel it
        $orderId = $this->_getCheckoutSession()->getLastOrderId();
        $order = ($orderId) ? Mage::getModel('sales/order')->load($orderId) : false;
        if ($order && $order->getId() && $order->getQuoteId() == $this->_getCheckoutSession()->getQuoteId()) {
            $order->cancel()->save();
            $this->_getCheckoutSession()
                ->unsLastQuoteId()
                ->unsLastSuccessQuoteId()
                ->unsLastOrderId()
                ->unsLastRealOrderId()
                ->addSuccess($this->__('Express Checkout and Order have been canceled.'))
            ;
        } else {
            $this->_getCheckoutSession()->addSuccess($this->__('Express Checkout has been canceled.'));
        }
    } catch (Mage_Core_Exception $e) {
        $this->_getCheckoutSession()->addError($e->getMessage());
    } catch (Exception $e) {
        $this->_getCheckoutSession()->addError($this->__('Unable to cancel Express Checkout.'));
        Mage::logException($e);
    }

    $this->_redirect('checkout/cart');
}

它在同一个地方取消所有内容。

因此,在您的情况下,如果您需要保留引号(我认为这是您在自定义模块中利用的内容),则必须更改PayPal模块的此行为。

请记住,如果您要这样做,请不要修改原始核心文件,而是在自定义模块中扩展这些类并在那里应用更改。

答案 1 :(得分:2)

当您在未完成付款的情况下从Paypal页面取消订单时,它会将您重定向回购物车页面。订单不会被放置。

如果您在paypal重定向后关闭页面,而未完成付款(请注意您不必在此处按取消),订单将处于待处理状态。

要验证PayPal是否正常工作,请尝试通过paypal完成付款流程。如果您将其用于测试目的,则可以使用沙箱模式,这样您就不会收到订单的费用。

希望这会有所帮助!!