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

Php Magento:setCouponCode似乎没有在报价模型上应用优惠券,php,magento,Php,Magento,我们主要使用Magento进行交易,并完全通过自定义应用程序重写了前端。在报价对象上应用优惠券代码(购物车价格规则)时遇到问题。优惠券代码似乎被拒绝-setCouponCode不返回任何错误,但getCouponCode返回空字符串 我已经通过管理员后端进行交易来验证优惠券代码是否有效。下面是代码片段 有人能帮我获取报价模型对象以接受并应用优惠券代码吗 功能添加优惠券($shoppingCartId,$couponcode){ }处理优惠券所需的所有逻辑都在SalesRule模块中 优惠券对象是

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

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

有人能帮我获取报价模型对象以接受并应用优惠券代码吗

功能添加优惠券($shoppingCartId,$couponcode){


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

优惠券对象是model
Mage\u SalesRule\u model\u优惠券
,它有一个资源模型
Mage\u SalesRule\u model\u Mysql4\u优惠券

要创建新优惠券,可以实例化上述优惠券模型,填写所有字段并调用save()方法。它将数据写入表
salesrule\u优惠券
。但若你们看这个表,你们会发现优惠券依赖于规则id,所以你们需要先创建一些销售规则


Mage\u SalesRule\u Model\u Rule
关心规则,它也有自己的资源模型。我认为调查它们是如何工作的将对您有所帮助

我遇到了同样的问题,发现在向报价中添加任何项目之前需要调用setCouponCode()

在您的情况下,这看起来像:

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

今晚我为此损失了几个小时。希望我能救一个同样的人。 Emily在这个示例中是正确的(您将购物车加载到报价中)

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

如果您正在以编程方式创建订单,但未使用购物车创建订单,这可能会帮助您: 潜在的问题是,每次在报价单上添加/更新地址时,Magento都会运行collectTotals(),这是最重要的部分:它会缓存这些地址。(事实上,在保存地址后,如果选中GetTotalCollectedFlag,您将看到它设置为true!)。在此之后设置优惠券代码,即使运行collectTotals(),也不会应用优惠券代码


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

这是如何工作的,优惠券将在付款步骤应用,我们是否应该在首次创建购物车时应用空白优惠券?
$quoteObj = Mage::getModel('sales/quote')->setCouponCode($coupon)->load($shoppingCartId);