OpenCart 折價券機制使用的常見失誤

介紹OpenCart折價券常見的使用問題,包含折價券的結束日期判斷、實際套用計算的時機點、以及折價券狀態設定的影響的等等。

OpenCart 內建的行銷活動功能並不多,雖然可以透過加裝擴充模組來增加各種折扣功能,但內建的折價券功能,因為使用上方便直覺,也符合台灣消費習慣,可說是最常被使用的行銷活動機制。

然而這個內建的折價券機制,有幾個地方常會被誤解而使用錯誤,如果你對這個功能還不是很熟悉,那建議你務必要讀一讀這篇文章,以免在折價券的設定或使用上發生錯誤,對商店經營造成不必要的傷害。

折價券的結束日期

折價券的結束日期,是最常被誤解的設定,在程式中,判斷折價券是否過期的 MySQL 語法是 date_end > NOW(),NOW() 是指當下系統的時間,這個 date_end 就是下圖畫面中設定的折價券結束時間,這個結束日期只能設定到 “日”,例如畫面中的 2023-11-01,當這個日期與當下系統時間進行比對時,會先轉成帶有時、分、秒的時間,於是 2023-11-01 會被轉成 2023-11-01 00:00:00,也就是 2023-11-01 日一到,就結束了,但是有很多商家卻以為,結束日期設定 2023-11-01,是指 2023-11-01 這天結束才結束,就是誤以為到 2023-11-01 23:59:59 的意思,這是不正確的,如果你希望折價券可以用到某一天的 23:59:59,那結束日期就應該設定是隔天的日期,因為這代表一到隔天就結束的意思。

折價券實際套用的時機點

很多人以為,結帳時如果客戶輸入折扣碼,則送出訂單的瞬間,折價券就被套用了,這樣的解讀並不完全正確,OpenCart 對這方面的設定算是很有彈性,也可以透過設定達到像這樣的效果,一結帳就套用折價券,但有時候商家的不同設定,並不是如此。

前面提到,OpenCart 之所以把這部分做得很有彈性,是因為每家商店對於完成訂單的時機點認定,可能不一樣,因為完成訂單會觸發許多作業,以最常見的扣減庫存來說明,有些商家希望只要有人下單,不管客戶最後有沒有轉帳付款、或是到超商取貨付款,都一率先扣減庫存,以免超賣。但也有另一類的商家,不希望在還未確定交易完成之前,就把庫存扣掉,造成銷售的機會損失。

折價券的套用,和商品庫存的扣減,是類似的概念,折價券有時會限制可使用次數,常常也是必須確定訂單完成後,才進行套用,並計算一次使用,而不是一下單就計算一次使用,而是依據系統的 [屬處理中之訂單狀態] 與 [屬已完成之訂單狀態] 的設定值而定。

ATM 付款、超商付款與折價券的關係

前面提到,當訂單狀態由不是 [屬處理中之訂單狀態] 或 [屬已完成之訂單狀態],變成 [屬處理中之訂單狀態] 與 [屬已完成之訂單狀態] 時,系統就會進行庫存扣減、折價券的有效性檢查,不過,訂單狀態的變更,並不只是只有管理者從訂單管理手動變更這一種情形而已,當訂單的付款方式是串接金流公司時,例如金流公司的 ATM 虛擬銀行帳號轉帳、超商條碼、超商代碼繳款等等,使用這些付款方式的訂單,會在買家實際完成付款(例如到超商付款)的當下,由金流公司透過背景程式通知 OpenCart 系統某訂單的付款已經完成,並在此時觸發前面提到的折價券有效性檢查的程序,如果這時候折價券的有效日期已經結束,那麼折價券的有效性檢查就會失敗,訂單會被判為異常並將訂單狀態變更為無效訂單。

如果這樣的機制造成您的系統在虛擬銀行帳號轉帳、超商條碼、超商代碼付款後,訂單變成 [失敗的] 訂單(實際狀態依據您系統防詐欺狀態的設定),可以考慮修改系統程式,讓訂單完成時不再檢查折價券的有效性(其實在買家結帳輸入折扣碼時就已檢查過一次),但這樣會產生其他問題,折價券的使用次數可能也會失控,因為有效性也包含可用次數的檢查。

了解系統的特性,調整折價券的使用規則來配合系統機制,才是較理想的做法,而不是一味的要修改系統來配合我們的需求。

折價券的狀態設定

這是一個隱性的險坑,這個環節與前一個訂單完成有關,由於訂單狀態變更為已完成時,會先檢查折價券是否有效,包含折扣碼是否存在、折價券的狀態是否為啟用、折價券的使用次數是否已達到限額等等,只要檢查不通過,則訂單變更的操作就會失敗,訂單狀態會被 [失敗的]。

這個狀況遇過幾次,有商家習慣在折價券活動日期一到,就手動將該項折價券的狀態更改為 [停用],這個動作會造成在訂單狀態變更為已完成時,折扣碼的檢查不通過,使得訂單被視為有問題,進而將訂單狀態設定成 [失敗的],如果你有這種習慣,請務必要調整一下,折價券到了結束日期就無法再被使用於新訂單的結帳,無須另外手動將它變更為停用,記住了嗎?