优惠券总是在结帐时重新添加

Coupon is always re-added during checkout

我遇到了以下错误

  1. 将产品添加到购物车
  2. 应用优惠券代码
  3. 删除优惠券代码
  4. 优惠券代码不再显示/删除成功
  5. 去结账
  6. 继续计费和发货步骤
  7. 返回购物车
  8. 第 2 步的优惠券代码再次激活

这似乎是 CE 1.9 中的一个错误

在 Mage_Checkout_CartController::couponPostAction()

中设置了新的会话值
$this->_getSession()->setCartCouponCode($couponCode);

恢复Mage_Checkout_Model_Type_Onepage::_setCartCouponCode()

中的优惠券代码
protected function _setCartCouponCode()
{
    if ($couponCode = $this->getCheckout()->getCartCouponCode()) {
        $this->getQuote()->setCouponCode($couponCode);
    }
    return $this;
}

我用event/observer解决了

    <events>
        <controller_action_predispatch_checkout_cart_couponPost>
            <observers>
                <remove_session_coupon_code>
                    <type>singleton</type>
                    <class>yourmodule/observer</class>
                    <method>removeCoupon</method>
                </remove_session_coupon_code>
            </observers>
        </controller_action_predispatch_checkout_cart_couponPost>
    </events>

和:

public function removeCoupon(Varien_Event_Observer $observer)
{
    $controller = $observer->getControllerAction();
    if ($controller->getRequest()->getParam('remove') == 1) {
        Mage::getSingleton("checkout/session")->unsetData('cart_coupon_code');
    }
    return $this;
}