Magento:setCouponCode似乎没有在报价模型上应用优惠券

时间:2011-06-17 04:29:09

标签: php magento

我们主要使用Magento进行交易,并完全通过自定义应用程序重写前端。我在报价对象上应用优惠券代码(购物车价格规则)时遇到问题。优惠券代码似乎被拒绝 - setCouponCode不会返回任何错误,但getCouponCode返回空字符串。

我已通过管理后端进行交易验证优惠券代码有效。这是下面的代码片段。

有人可以帮助我让报价模型对象接受并应用优惠券代码吗?

function add_coupon($ shoppingCartId,$ couponcode){

    try {
            $quoteObj = Mage::getModel('sales/quote')->load($shoppingCartId);
            $quoteObj->getShippingAddress()->setCollectShippingRates(true);
            $quoteObj->getShippingAddress()->setCouponCode($coupon)
                    ->setTotalsCollectedFlag(true)
                    ->collectTotals()
                    ->save();
    } catch (Exception $e) {
            return array("status"=>"failed", "message"=>"Error applying coupon.");
    }
    if ($coupon) {
            if (!$coupon == $quoteObj->getCouponCode()) {
                    return array("status"=>"failed", "message"=>"Coupon code is not valid.");
            }
    }
    return array("status"=>"success");

}

3 个答案:

答案 0 :(得分:4)

我遇到了同样的问题,发现我需要先调用setCouponCode()才能在我的引用中添加任何项目。

在您的情况下,这将是:

$quoteObj = Mage::getModel('sales/quote')->setCouponCode($coupon)->load($shoppingCartId);

答案 1 :(得分:2)

处理优惠券所需的所有逻辑都在SalesRule模块中。

模型Mage_SalesRule_Model_Coupon是优惠券对象,它有一个资源模型Mage_SalesRule_Model_Mysql4_Coupon

要创建新优惠券,您可以实例化上述优惠券模型,填写所有字段并调用save()方法。它会将数据写入表salesrule_coupon。但是,如果您查看此表,您会看到优惠券取决于规则ID,因此您需要首先创建一些销售规则

Mage_SalesRule_Model_Rule关心规则,它也有自己的资源模型。我认为调查它们的工作方式对您有所帮助

答案 2 :(得分:1)

今晚我失去了几个小时。希望我可以拯救某人。 Emily对于这个例子是正确的(你将购物车加载到报价中)。

这适用于Magento 1.7.0.2,我不确定它是否适用于其他版本。

如果您是以编程方式创建订单但未使用购物车执行此操作,则可能会对您有所帮助: 根本问题是Magento每次在引号上添加/更新地址时都会运行collectTotals() - 这是重要的部分:它会缓存它们。 (事实上​​,如果你检查getTotalsCollectedFlag保存地址后,你会看到它被设置为true!)。在此之后设置优惠券代码,即使您运行collectTotals(),也不会应用优惠券代码。

您可以在报价上调用setTotalsCollectedFlag(false)然后应用优惠券,但这是一个坏主意(根据不再可访问的Magento错误报告,可能会导致一些错误计算),您想要做什么在设置任何地址之前调用setCouponCode(或者至少在设置最后一个地址之前调用setCouponCode。)