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

Adding discount by coupon code programmatically

 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() 时折扣没有出现,当我更新刷新购物车页面时折扣出现

我找到了解决方案

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