11

出于某种原因,magento 网站不应用优惠券代码。它总是返回一个无效的:

优惠券代码无效

信息。然而,奇怪的是,当购物车的价格大于我的货币 120 时,就会发生这种情况。

如果我在购物车中有一件价格为 65 的产品,优惠券代码可以正常工作,但如果我在购物车中有相同的产品但数量为 2(这意味着总价格变为 130),我会收到上述无效错误消息

我已经将代码追溯到Mage_Sales_Model_Quote class, which has a function named_validateCouponCode()`,其中包含以下内容:

$address->hasCouponCode() 

总是返回false。我应该尝试什么?我已经重新索引,刷新了缓存等,但没有任何改变,我似乎无法在地址模型中找到hasCouponCode函数来查看那里发生了什么......

4

3 回答 3

8

好吧,如果没有您的确切规则,很难给出完整的答案。

首先,如果优惠券代码不在报价地址上,则Mage_Sales_Model_Quote::_validateCouponCode()调用只需从报价单中删除优惠券代码。这是因为在 collectTotal 调用期间,折扣总计模型会将优惠券代码复制到有效并应用的地址。因此,在这种情况下$address->hasCouponCode()返回 null 的事实只是表明规则验证器拒绝应用提供的优惠券代码。

其次,您应该找出两种方法来找出您的优惠券没有被应用的原因。取决于您的优惠券,可能只有一个或另一个,但我会指出两者。Mage_SalesRule_Model_Validator::process()Mage_SalesRule_Model_Validator::processShippingAmount()是检查您的优惠券代码并可能应用它并将代码复制到地址的两个地方。

作为旁注,Mage_SalesRule_Model_Validator::_maintainAddressCouponCode()是负责将优惠券代码从验证器(从报价中获取代码)复制到地址的方法。如果从未调用此方法,则您的优惠券代码将始终从报价中删除。

tl;博士

步骤调试Mage_SalesRule_Model_Validator::process()Mage_SalesRule_Model_Validator::processShippingAmount()以调试您的优惠券代码无效的原因。

于 2015-07-07T13:58:56.603 回答
4

首先你需要了解 $address->hasCouponCode() 是如何工作的。

没有这样的方法,它是使用魔术函数 __call 调用的。

您不能直接访问它,因为 $_data 受到保护。

现在,最好的调试方法是检查您的地址对象中是否设置了优惠券。

$data = $address->getData();
$coupon = $data['coupon_code'];

现在检查是否在您的购物车中有 2 件商品的情况下设置了优惠券。

另一种方法是尝试使用 setter 添加优惠券作为

$address->setCouponCode('Your Coupon Code');

或者

$address->setData('coupon_code', 'Your Coupon Code');

并检查这是否有效。如果没有,请调查

_validateCouponCode in Mage_Sales_Model_Quote

将是一个良好的调试开始。

于 2015-07-06T16:55:32.230 回答
0

首先 var_dump($address) 并检查详细信息。

然后,

检查以下内容:

  1. 正确的开始和到期日期。
  2. 为优惠券设置正确的客户群。
  3. 设置它active

如果以上 1 ,2, 3 个要求都为真,则设置Stop further rules processingYES

  • 除了这些,出于某种原因,SKU 还需要字母数字来表示条件。因此,请检查您的产品 SKU 值是否为字母数字。
于 2013-08-16T10:37:30.680 回答