美妝與保養品牌規劃購物車系統開發時,最容易先討論版面、金流和物流,卻把商品規格、組合活動與庫存扣回視為後台細節。真正上線後,客人買的可能不是單一商品,而是不同容量、香味或膚質版本,再疊加體驗組、滿額贈、加價購與會員優惠。若這些關係沒有先寫成資料規則,前台看起來能下單,後台卻可能無法判斷要扣哪一個庫存、退貨時要補回什麼,客服也難以說明訂單內容。
客製購物車的價值,不是把所有促銷想法都寫進程式,而是先找出品牌現成平台無法穩定承接的規則。評估時可用三層來拆:商品資料是否能正確識別、購物車是否能重算每次變動、結帳是否能在庫存與付款改變時維持一致。
商品名稱不是庫存單位,規格款才是
一瓶精華液可能有容量、包裝或限定版等選項。系統若只記錄「精華液」這個商品名稱,就無法知道客人選了哪個可出貨單位。Shopify 的 Variants 文件把每一組選項值視為一個規格款,並指出各規格款可分別管理庫存。這個概念不只適用 Shopify,也適合拿來寫客製系統規格:每個可獨立定價、備貨或停產的組合,都應有穩定識別碼,而不是靠顯示名稱猜測。
商品主檔至少應分開商品、規格款、售價、可售狀態、庫存單位與圖片。成分、用法與適用膚況可以放在商品層;容量、包裝和條碼則通常屬於規格款。驗收時不要只測商品頁能否切換選項,而要確認切換後的價格、庫存提示、圖片、購物車明細與訂單資料都指向同一規格款。
「MORIÉ 森澄研」(morie-skincare)案例包含 23 種分類與系列篩選、36 支商品獨立頁,以及收藏、購物車到結帳的完整站內流程。這個案例適合拿來檢查資料設計:分類與膚質是幫助探索的維度,真正進入購物車的則必須是明確的可購買品項。兩者若混在一起,改分類或行銷名稱時就可能影響訂單與庫存對照。
組合商品要先決定「展示品」還是「庫存品」
美妝品牌常用旅行組、保養程序組或任選組合做活動。規格書要明確回答:組合本身是否有獨立庫存,還是由子商品即時計算可售量;子商品缺貨時整組是否停售;拆退其中一件時如何計價;訂單報表要顯示組合、子商品,還是兩者都顯示。
SHOPLINE 的組合商品說明提供一個可驗證的參考模型:組合本身沒有獨立庫存,可購買數量由子商品當下庫存計算;訂單報表則會分列組合與子商品。文件也列出部分功能限制。這不代表客製網站必須照抄,而是提醒團隊把「庫存怎麼算」與「報表怎麼看」分別決定,並將不支援的搭配列為驗收前提。
贈品也應視為可追蹤的品項。若滿額贈只是一段訂單備註,倉庫無法知道剩餘數量,活動結束也難以核對實際送出多少。比較穩妥的做法是讓贈品有識別碼、庫存異動與適用條件;購物車每次增加、刪除商品或套用優惠時,都重新判斷資格。當贈品用完,系統應明確停止加入,而不是接受訂單後再由客服逐筆協調。
結帳不是一個按鈕,而是一段會失敗的狀態流程
購物車畫面顯示有貨,不代表付款時仍然有貨。Shopify Checkout 文件說明,顧客進行結帳步驟時會再次檢查購物車與庫存;庫存不足會顯示錯誤,而庫存保留發生在提交付款資訊時,付款失敗後也有釋放機制。這正好可轉成客製系統的驗收問題:何時保留庫存、保留多久、付款失敗何時釋放、重複付款通知是否會建立兩張訂單、返回購物車後優惠是否重算。
建議把結帳狀態至少拆成待確認、待付款、付款處理中、付款成功、付款失敗、逾時取消與人工取消。名稱可依營運調整,重點是每次轉換都要定義觸發來源、允許的前一狀態、庫存動作及使用者看到的訊息。付款服務回傳成功時,系統還要以訂單識別碼檢查是否已處理,避免同一通知重複扣庫存或寄送多封成立通知。
「衡嶼身心養護」(hengyu-massage)案例除了療程預約,也有日常選物與電子心意卡。這類同站混合實體商品、數位憑證和服務的情境,更需要區分履約方式:實體選物要填配送資料並扣貨,電子心意卡可能需要寄送代碼,療程則要占用時段。購物車可以共用,但後續履約不能只靠單一「已付款」狀態概括。
用購物車快照保留成交當下的證據
商品頁內容與售價日後都可能改變,訂單不能只保存商品 ID 再回頭查現在的資料。建立訂單時,應保存成交當下的商品名稱、規格、單價、折扣、贈品條件、運費與稅務相關欄位;若有組合商品,也要保存組成明細。這份快照讓客服、出貨與退款都能依同一版本處理,不因後台改名或下架而失去依據。
驗收可準備一組小而完整的情境:最後一件商品被兩個購物車同時結帳、組合中的子商品缺貨、滿額後取得贈品再刪除商品、付款失敗後重試、付款成功通知重送、訂單成立後商品改價。每個情境都核對畫面、訂單、庫存與通知。能通過這些狀態測試,才表示購物車系統不只「可以買」,而是能被營運團隊穩定管理。