【问题标题】:Magento save order total in checkout pageMagento 在结帐页面中保存订单总额
【发布时间】:2011-04-03 05:04:03
【问题描述】:

我们在结账页面有一个类似礼品卡余额使用的系统。而结账页面上的客户可以使用他们的礼品卡余额购买产品。

所以我在付款选项卡之前添加了一个选项卡,客户可以在其中选择从他们的礼品卡余额中输入使用的金额,所以当他们说继续时,我会在自定义 Onepage 控制器中获取输入的值并将其传递给 Onepage.php (模型类)减少总量。

这就是在模型类上所做的。

public function saveCustomDiscount($discount=0)
{       
    $this->getQuote()->setGrandTotal($this->getQuote()->getGrandTotal() - $discount);
    $this->getQuote()->setBaseGrandTotal($this->getQuote()->getBaseGrandTotal() - $discount);
    $this->getQuote()->save();
    //$this->getQuote()->collectTotals()->save();
    $order = $this->getQuote()->getData();  
    Zend_Debug::dump($order);      
    return array();
}

并且从控制器 Action 函数调用此函数正在获取用户输入。

这里作为折扣传递的总金额和基数并没有减少。它和原来的一样。

注意: 在自定义订单保存之前。

array(51) {
   ---------------
  ["grand_total"] => string(8) "243.7200"
  ["base_grand_total"] => string(8) "243.7200"
  ----------------- 
}

自定义订单保存后。

array(51) {
   ---------------
   ["grand_total"] => float(223.72)
   ["base_grand_total"] => float(223.72)
  ----------------- 
}

调试时数据类型从字符串变为浮点数。我必须做的是,从定制折扣中减少订单总额。请帮帮我。

谢谢

【问题讨论】:

    标签: magento magento-1.4


    【解决方案1】:

    您设置了 discountCode 吗?

    i.e.  $quote->setCouponCode(strlen($couponCode) ? $couponCode : '')
                     ->collectTotals()
                     ->save();
    

    后来,在报价单中,您是否应用了折扣?

    i.e. $order->setDiscountAmount(Mage::getSingleton('checkout/session')->getQuote()->getSubtotalWithDiscount() - Mage::getSingleton('checkout/session')->getQuote()->getSubtotal());
                $order->setShippingAmount(Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingAmount());
                $order->setSubtotalWithDiscount(Mage::getSingleton('checkout/session')->getQuote()->getSubtotalWithDiscount());
                $order->setGrandTotal(Mage::getSingleton('checkout/session')->getQuote()->getGrandTotal());
    

    等等

    编辑:

    我曾与一个团队合作开发了一个 Wordpress / Magento 混合软件,这无疑给我留下了一些学习经验。 Magento 被用作纯粹的交易引擎,我们必须手动完成整个结帐过程(包括创建自定义 WP 插件来处理购物车中的每个步骤)。

    最后把它注销,这样我们就可以看到你有什么(可能把它放在你编辑的问题中):

    Mage::log("checkoutprocess: getSubtotal: " . $order->getSubtotal());
                Mage::log("checkoutprocess: getTaxAmount: " . $order->getTaxAmount());
                Mage::log("checkoutprocess: getDiscountAmount: " . $order->getDiscountAmount());
                Mage::log("checkoutprocess: getShippingAmount: " . $order->getShippingAmount());
                Mage::log("checkoutprocess: getGrandTotal: " . $order->getGrandTotal());
    
                Mage::log("checkoutprocess: getBaseSubtotal: " . $order->getBaseSubtotal());
                Mage::log("checkoutprocess: getBaseDiscountAmount: " . $order->getBaseDiscountAmount());
                Mage::log("checkoutprocess: getSubtotalWithDiscount: " . $order->getSubtotalWithDiscount());
                Mage::log("checkoutprocess: getBaseGrandTotal: " . $order->getBaseGrandTotal());
    

    【讨论】:

    • 嗨,对不起,它不是折扣代码系统。这是我们自己的内部折扣方法,我们将在其中显示要兑换的客户的当前余额。在那种情况下,我怎样才能减少订单总数。
    • 如何通过设置折扣来更新报价并保存?即 $order->setDiscountAmount($custom_amount);
    • $order->setDiscountAmount($discount); $order->setShippingAmount(Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingAmount()); $order->setSubtotalWithDiscount(Mage::getSingleton('checkout/session')->getQuote()->getSubtotalWithDiscount()); $order->setGrandTotal(Mage::getSingleton('checkout/session')->getQuote()->getGrandTotal()); $订单->保存();这不会更新折扣金额。
    • 也这样做?我对我的答案进行了编辑。 $order->setBaseSubtotal(Mage::getSingleton('checkout/session')->getQuote()->getSubtotal()); $order->setBaseDiscountAmount(Mage::getSingleton('checkout/session')->getQuote()->getSubtotalWithDiscount() - Mage::getSingleton('checkout/session')->getQuote()->getSubtotal()) ;
    猜你喜欢
    • 2021-01-30
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 2013-07-16
    • 2014-12-29
    • 1970-01-01
    • 2016-01-15
    相关资源
    最近更新 更多