0

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

protected function _applyCoupon($quoteId, $couponCode, $store = null)
{
    $coupon = Mage::getModel('salesrule/coupon');
    $coupon->loadByCode($couponCode);
    Mage::log('_applyCoupon('.$couponCode.')');
    $quote = $this->_getQuote($quoteId, $store);

    if (!$quote->getItemsCount()) {
   //     $this->_fault('quote_is_empty');
    }

    $oldCouponCode = $quote->getCouponCode();
    if (!strlen($couponCode) && !strlen($oldCouponCode)) {
        return false;
    }
    try {
        //$quote->getShippingAddress()->setCollectShippingRates(true);
        $quote->setCouponCode($couponCode);
        $quote->setTotalsCollectedFlag(false)->collectTotals();
        $quote->collectTotals();
        $quote->save();
        Mage::getModel("checkout/session")->setData("coupon_code",$couponCode);
        Mage::getModel('checkout/cart')->getQuote()->setCouponCode($couponCode)->save();
        Mage::getModel('checkout/cart')->getQuote()->collectTotals();
        Mage::getModel('checkout/cart')->getQuote()->save();
        Mage::log("_applyCoupon : Set coupon to quote:".$quote->getCouponCode());

    } catch (Exception $e) {
        $this->_fault("cannot_apply_coupon_code", $e->getMessage());
    }
        Mage::log('3');

    if ($couponCode) {
        Mage::log("Coupon applied");
        if (!$couponCode == $quote->getCouponCode()) {
            Mage::log('3.2');
            $this->_fault('coupon_code_is_not_valid');
        }
    }

    return true;
}

我也尝试将优惠券应用于地址:

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,并且用户已从他的信用卡中扣除全额费用。任何人....?帮助...?

4

1 回答 1

0

终于找到答案了

setCouponCode()在添加任何要引用的项目之前,我需要先打电话。

$quote= Mage::getModel('sales/quote')->setCouponCode($couponCode);
于 2012-09-09T03:03:27.290 回答