2011-06-17 31 views
0

我們正在使用Magento主要用於交易,並已完全通過自定義應用程序重寫前端。我無法在報價對象上應用優惠券代碼(購物車價格規則)。優惠券代碼似乎被拒絕 - setCouponCode不返回任何錯誤,但getCouponCode返回空字符串。Magento:setCouponCode似乎沒有在報價模式上應用優惠券

我已通過管理後臺進行交易驗證了優惠券代碼的有效性。這是下面的代碼片段。

有人可以幫我獲得報價模型對象接受並應用優惠券代碼嗎?

功能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"); 

}

回答

2

需要用於處理優惠券的所有邏輯是在SalesRule模塊。

有模型Mage_SalesRule_Model_Coupon這是優惠券對象,它有一個資源模型Mage_SalesRule_Model_Mysql4_Coupon

要創建新優惠券,您可以實例化上述優惠券模型,填寫所有字段並調用save()方法。它會將數據寫入表salesrule_coupon。但是如果你看看這張桌子,你會發現優惠券依賴於規則ID,所以你需要先創建一些銷售規則

Mage_SalesRule_Model_Rule關心規則,它也有自己的資源模型。我認爲這將有助於你調查他們是如何工作的

4

我遇到了同樣的問題,並發現我需要在添加任何項目到我的報價前調用setCouponCode()。

在你的情況,這將是這樣的:

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

這項工作如何,優惠券適用於付款步驟,我們是否應該在第一次創建購物車時申請空白優惠券? – 2016-05-19 08:35:19

1

我失去了幾個小時到今晚。希望我能拯救一個人。 Emily對於此示例是正確的(您將購物車加載到報價中)。

這適用於Magento 1.7.0.2,我不確定它是否適用於其他版本。

如果以編程方式創建一個訂單,但你不使用購物車,這樣做這可能會幫助您: 根本的問題是,Magento的運行collectTotals()每次添加/次更新的地址引用 - 這裏是重要的部分:它緩存它們。 (實際上,如果您檢查getTotalsCollectedFlag,則保存地址後,您會看到它設置爲true!)。在此之後設置優惠券代碼,即使您運行collectTotals(),也不會應用優惠券代碼。

您可以在報價單上調用setTotalsCollectedFlag(false),然後應用優惠券,但這不是一個好主意(根據不再可訪問的Magento錯誤報告可能導致一些錯誤計算),您想要的在設置任何地址之前(或至少在設置最後一個地址之前),請先調用setCouponCode。