以编程方式添加优惠券代码折扣

时间:2016-07-13 12:05:48

标签: magento-1.9 checkout cart quote discount

 public function coupon($data) {
        $couponCode = $data['couponcode'];
        if (!Zend_Validate::is(trim($couponCode), 'NotEmpty')) {
            throw new Exception($this->__('coupon code cannot be empty.'));
        }
        $oCoupon = Mage::getModel('salesrule/coupon')->load($couponCode, 'code');
        $data = $oCoupon->getData();
        if (empty($data)) {
            throw new Exception($this->__('coupon code did not match.'));
        }     
        $quote = Mage::getModel('checkout/session')->getQuote();
        $quote->setCouponCode($couponCode);
        $quote->save();
        $quoteData = Mage::getModel('checkout/cart')->getQuote();
        $subTotal = $quoteData['subtotal'];
        $subtotal_with_discount = $quoteData['subtotal_with_discount'];
        $grandTotal = $quoteData['grand_total'];
        $discountTotal = ($subTotal - $subtotal_with_discount);
        $discount = number_format($discountTotal, 4, null, '');
        return $discount;
    }

优惠券代码已应用并显示,但是当我打印quoteData-> GetData()时,折扣不会到来,当我更新刷新购物车页面时,折扣即将到来

1 个答案:

答案 0 :(得分:2)

我得到了解决方案

public function coupon($data) {
        $couponCode = $data['couponcode'];
        if (!Zend_Validate::is(trim($couponCode), 'NotEmpty')) {
            throw new Exception($this->__('coupon code cannot be empty.'));
        }
        $oCoupon = Mage::getModel('salesrule/coupon')->load($couponCode, 'code');
        $data = $oCoupon->getData();
        if (empty($data)) {
            throw new Exception($this->__('coupon code did not match.'));
        }
        Mage::getSingleton('checkout/cart')->getQuote()->getShippingAddress()
                ->setCollectShippingRates(true);
        Mage::getSingleton('checkout/cart')->getQuote()
                ->setCouponCode($couponCode)->collectTotals()->save();
        $quoteData = Mage::getModel('checkout/cart')->getQuote();
        $subTotal = $quoteData['subtotal'];
        $subtotal_with_discount = $quoteData['subtotal_with_discount'];
        $grandTotal = $quoteData['grand_total'];
        $discountTotal = ($subTotal - $subtotal_with_discount);
        $discount = number_format($discountTotal, 4, null, '');

        return $discount;
    }