Magento核心折扣

Magento核心折扣,magento,discount,coupon,Magento,Discount,Coupon,我已经为此挣扎了一段时间,应该很直截了当,但是。。。 我正在尝试使用magento cart.优惠券.add api将优惠券应用于订单。 该产品是虚拟的 这是我的代码(在我来到这里之前,我已经尝试了在谷歌上能找到的一切): 我还尝试将优惠券用于以下地址: protected function applyDiscountToAddress($address,$quote) { Mage::log('applyDiscountToProduct ...'); $coupon = Ma

我已经为此挣扎了一段时间,应该很直截了当,但是。。。 我正在尝试使用magento cart.优惠券.add api将优惠券应用于订单。 该产品是虚拟的 这是我的代码(在我来到这里之前,我已经尝试了在谷歌上能找到的一切):

我还尝试将优惠券用于以下地址:

protected function applyDiscountToAddress($address,$quote)
{
    Mage::log('applyDiscountToProduct ...');
    $coupon = Mage::getModel('salesrule/coupon');
    Mage::log("checkoutprocess: checkout/session:".Mage::getModel("checkout/session")->getData("coupon_code"));
    $coupon->loadByCode(Mage::getModel("checkout/session")->getData("coupon_code"));
    $rule = Mage::getModel('salesrule/rule');
    $rule->load($coupon->getRuleId());
    $discountamount = $rule->getDiscountAmount();
    $dbldiscount = 0.00 + $discountamount;
    $grandTotal = Mage::getModel('checkout/cart')->getQuote()->getGrandTotal();
    $subTotal = Mage::getModel('checkout/cart')->getQuote()->getSubtotal();
    Mage::log('applyDiscountToProduct $grandTotal:'.$grandTotal);
    Mage::log('applyDiscountToProduct $subTotal:'.$subTotal);

    $gTotal = $grandTotal - $dbldiscount;
    $address->setDiscountAmount($dbldiscount)
        ->setBaseDiscountAmount($dbldiscount)
        ->setGrandTotal($gTotal)
        ->setBaseGrandTotal($gTotal);

    $grandTotal     = $address->getGrandTotal();
    $baseGrandTotal = $address->getBaseGrandTotal();
    Mage::log('applyDiscountToProduct Address:$grandTotal:'.$grandTotal);
    Mage::log('applyDiscountToProduct Address:$baseGrandTotal:'.$baseGrandTotal);

    $totals     = array_sum($address->getAllTotalAmounts());
    $baseTotals = array_sum($address->getAllBaseTotalAmounts());

    $address->setGrandTotal($grandTotal+$totals);
    $address->setBaseGrandTotal($baseGrandTotal+$baseTotals);
}
优惠券是有效的,但在Magento管理员下订单后,我看到折扣金额=0.0,并且用户的信用卡已全额支付。
任何人帮助…?

终于找到了答案

在将任何项目添加到报价之前,我需要调用
setCouponCode()

$quote= Mage::getModel('sales/quote')->setCouponCode($couponCode);

你们两个能详细说明一下这个答案吗?我目前在Magento 1.9中将折扣代码应用于虚拟产品时遇到类似问题。谢谢我们是否应该在加载付款时已经创建的报价或首次创建购物车/报价时执行此操作,在这种情况下,用户不会添加优惠券,而是在购物车中添加项目。
$quote= Mage::getModel('sales/quote')->setCouponCode($couponCode);