3個方面解析:電商訂單系統設計
一個訂單系統的設計并不簡單,它需要一批又一批的人去維護、去優化,根據公司的業務情況做出改變和兼容。本文主要分析一下電商訂單系統該如何設計。
電商所有模塊中,訂單系統作為最為核心的模塊,決定了整個流程能不能順暢的執行,起著承上啟下的作用。相信很多PM都不陌生,到了一家電商公司,總會覺得公司現有的流程有不少問題,因為問題來自四面八方,一下子摸不著到底是哪里出了問題,PM就跟補丁師傅一樣,遇到一個補一個。
其實很多日常開發和測試提得需求都是表面需求,而這些表面上呈現出的各種問題,都是源自于流程上的不完整或者流程上某個環節上的缺失導致的。訂單系統作為一個承上啟下的模塊,流程上出了問題,它肯定脫不了干系。
訂單系統分為用戶端和商家端,今天我們從商家端簡單分析一下訂單系統該如何設計和完善,才能不斷適應公司的業務發展,減少因為流程導致的不必要的返工和“補丁”。
為什么說訂單系統是承上啟下的作用,上游是什么,下游又是什么?
這里我們先把問題放在這,后面講到再作解釋。
訂單系統
設計訂單系統需要考慮幾個模塊,只有所有模塊都考慮清晰了,才能保證訂單系統的穩定性和可擴展性。
1. 訂單字段
其實呈現在界面上的訂單信息,都是由各種訂單字段組合而成。訂單字段齊全從某個程度上代表著訂單流程的完整。
訂單字段信息
訂單字段包括幾個部分,其中金額信息因為特殊性,獨立出來講,實質上金額信息屬于商品信息。
商品信息:商品信息屬于訂單系統的上游端,所有訂單都是從商品演進而來,從商品到訂單,訂單系統必須搜集相關的商品信息,包括店鋪信息,商品id,商品規格,商品數量,商品價格。獲取到的商品信息將在訂單詳情頁內展示,形成訂單信息后供倉庫方便揀貨,包裝。
用戶信息:用戶信息包括購買用戶的ID,收貨人,收貨地址,聯系方式。有些平臺的用戶成長體系是基于用戶對平臺的活躍度來計算的,例如京東,它有會員等級及積分卡等類似的成長標識,此時獲取到的用戶信息除了普通的信息字段外,還需要獲取該用戶的等級,該次購買后所獲得的積分,以及該用戶所在等級能在該訂單上扣除的優惠等信息,具體怎么操作取決于公司的業務方向。
金額信息:因為金額信息的特殊性,所以獨立出來講,理論上金額信息應歸屬商品信息。金額信息的特殊性在于其不止一種金額,其涉及到商品金額,優惠金額,支付金額。而優惠金額中涉及到的信息較復雜,像有自營和第三方入駐的電商平臺,都會有商家優惠和跨店優惠,而這些優惠又分不同類型,例如現金扣減,消費券扣減,積分獲取,禮品卡扣減,或者以上幾種的組合使用。想要涉及好這一塊內容,需要根據目前自己公司的業務情況,列出所支持的優惠類型,再枚舉出各種組合下的優惠類型,才能保證流程的完整性。
時間信息:記錄各個卡點下的時間,一是記錄,二也是方便售后驗證和客戶分析。訂單時間是根據訂單狀態改變而改變的,比如:我們常見的用戶。
- 下單未付款:即展示訂單創建時間、下單時間;
- 待發貨狀態:展示訂單創建時間、下單時間、支付時間;
- 待收貨狀態:展示訂單創建時間、下單時間、支付時間、發貨時間;
- 交易完成狀態:展示訂單創建時間、下單時間、下單時間、支付時間、發貨時間、完成時間;
- 待退款狀態:展示退款訂單創建時間、申請退款時間;
- 交易關閉-用戶取消:展示訂單創建時間、下單時間、用戶取消時間;
- 交易關閉-僅退款:訂單創建時間、下單時間、支付時間、退款申請時間、退款成功時間;
- 交易關閉-退貨退款(包含部分僅退款):訂單創建時間、下單時間、支付時間、交易完成時間、退款申請時間、退款時間。
時間信息看起來不重要,其實是訂單系統一個重要的組成部分,原因大家可以思考一下。
訂單信息:訂單信息在訂單系統最為核心,訂單信息最重要的又是訂單狀態。很多公司都有訂單狀態機的說法,那到底什么是訂單狀態機?
我個人的理解是:在訂單中,通過各種購物情景,觸發訂單狀態,將訂單的流轉可視化,是訂單狀態機的一種具體呈現形式,而它實質就是在描述訂單狀態的轉換。
電商購物中,訂單狀態分別有以下幾種:【待付款】、【待發貨】、【待收貨】、【待評價】、【交易完成】、【用戶取消】、【僅退款】、【退貨退款】。而我們一般會將后三種統一放在訂單售后獨立呈現,去方便平時商家操作的便捷性。
電商訂單流程
2. 訂單流程
訂單流程是指從訂單產生到完成整個流轉的過程,其中包括正想流程和逆向流程。正向流程就是一個正常的網購步驟:訂單生成–>支付訂單–>賣家發貨–>確認收貨–>交易成功。
而逆向流程則是各種退款流程。
(1)正向流程
訂單正向流程
整個訂單設計的流程其實是非常多的,接下來我們將從比較具體的描述一下各個環節下的實際情況。
訂單生成:用戶下單后,系統需要生成訂單,此時需要先獲取下單中涉及的商品信息,然后獲取該商品所涉及到的優惠信息,如果商品不參與優惠信息,則無此環節。
接著獲取該賬戶的會員權益(這里其實需要注意的是:優惠信息與會員權益是有區別的,就好比商品滿減是優惠信息,新人立減是會員權益,一個是針對商品,另一個是針對賬戶)。
庫存扣減是指可銷售庫存數量-1,嚴格來講庫存扣減目前分為兩種:
- 一種是下單減庫存;
- 另一種是付款減庫存。
個人覺得中小創業者也許競爭者不比淘寶中的賣家,在電商這個存量市場,需要精細化的運營才能存活下來,如此說保證用戶體驗才是根本。所以我這里的觀點是生成訂單扣減庫存,這種做法會避免用戶支付成功商家卻沒貨的情況。然后計算運費,訂單生成成功。
支付訂單:用戶支付完訂單后,需要獲取訂單的支付信息,包括支付流水號、支付時間等。支付完訂單接著就是等商家發貨,但在發貨過程中,往往還有一種情況存在,很正常卻也比較復雜,就是訂單拆單。
- 訂單拆單分兩種:一種是用戶挑選的商品來自于不同渠道(自營與商家,商家與商家),此時就需要拆分訂單,并分開結算,這里還涉及父子訂單的說法,這里不再贅述。
- 另一種是在SKU層面上拆分訂單:不同倉庫,不同運輸要求的SKU,包裹重量體積限制等因素都需要將訂單拆分。比如:商品A只在甲倉庫有,商品B又只在乙倉庫有,此時會將商品A與商品B拆分成兩個訂單?;蛘哂行┢髽I的做法是將商品A/B調撥到另外一個倉庫統一發貨,也方便了用戶。
訂單拆單看起來簡單,其實里面涉及到底層的系統支持,如你需要對每一個倉庫的貨品進行相對準確的盤點,且做到實時同步(涉及到倉庫精細化管理),對商品進行準確分類與擺放,對商品信息記錄準確無誤等。
這其中哪一模塊都是一個浩大的工程,PM一般進入一家公司都會在原有(半成品)的基礎上進行優化,大家不妨多思考一下底層業務,只有在底層做好精細化管理,才能支持線上豐富的用戶需求。
商家發貨:商家發貨過程也有一個標準化的流程,上面也有講到,訂單拆分時會涉及到倉庫間調撥,然后倉庫會對商品進行打單、揀貨、包裝、交接快遞配送。這套標準化流程如果優化好,也是一個大工程,這里不再贅述,建議大家看看庫存與倉庫管理方面的書籍,詳細了解。
確認收貨:商家發貨后,就是等快遞配送了,訂單系統需要接入一些常用快遞企業的接口,方便用戶與商家在站內查詢快遞信息。
交易成功:收到貨后,不是一個服務的結束,相反是一個服務的開始。訂單系統需要在快遞被簽收后提醒用戶對商品做評價,這里要注意,確認收到貨不代表交易成功,交易成功是指在收到貨X天的狀態,此時訂單不在售后的支持時間范圍內。到此,一個訂單的正向流程就算走完了。
目前我也沒有研究過,不過我的經驗告訴我訂單系統對售后訂單的處理并不比正產訂單少,身為電商PM,我們的工作就是去優化這些流程,提高用戶粘性。本身售后訂單的出現,在某種程度上已經傷害到了用戶,如果流程還一團糟的話,我們根本沒有機會等到用戶的復購。
(2)逆向流程
訂單逆向流程
一個電商的基本逆向流程如上圖所示,訂單的逆向流程復雜就在于它幾乎允許在正向流程的任何環節出現。有人會問:用戶未收到貨為什么還能退款?
其實我們換位思考,也很容易理解。假想你是用戶,買了一雙鞋子,付了款發了貨,正在美滋滋的等待收快遞,然后剛好路過一家鞋店看到剛買的同款鞋子大促銷,于是你就拿起手機點擊退款,買下了這雙促銷的鞋子。
這種場景其實是很普通也很正常的用戶日常,所以我們的訂單系統就必須得支持用戶各種豐富的場景需求,也十分考驗PM的業務滲透能力,好在電商的先行者淘寶已經做了很多基礎建設和用戶教育,我們直接可以拿來套用,不過還是要根據各個公司的業務情況進行修改。
取消訂單:用戶提交訂單時,在跳轉至支付前直接退出,此時用戶原則上屬于取消訂單,因為還未付款,則比較簡單,只需要將原本提交訂單時扣減的庫存補回即可。
支付失?。?/b>用戶進行支付時退出,或者取消支付,我們將其列為支付失敗狀態,此時處理同上,將扣減的庫存補回可銷售庫存即可。
付款后退款:用戶支付成功后,商家還未發貨,支持用戶申請退款,此時如果倉庫與客服是分離的,則需要先檢查倉庫是否已經發貨,若已發貨則應與客戶溝通是否可以收到貨后再進行退款,如果倉庫還未發貨,則可直接同意用戶退款?;蛘咂髽I接入菜鳥物流,實行截件功能,不過這種操作還不成熟,成本會比較大,不適合中小創業型公司。
缺貨退款:用戶支付成功后,商家發貨時發現倉庫缺貨(如果提交訂單扣減庫存,則會減少缺貨情況,為什么是減少而不是避免?因為倉庫管理商品時沒辦法做到100%精準,所以信息有時候會不準確,導致線上的可銷售庫存顯示有庫存而倉庫已經售空的狀態),則需要與用戶協商是否退款。
這個流程訂單系統可以做到流程化、自動化,連接消息中心和倉庫管理系統去實現,難點在于消息的實時性。我就遇到過在淘寶買過一件上衣,一天過去了,商家跟我說沒貨了,我當時殺人的心都有了。
待收貨退款:這個問題目前還沒有特別完美的解決方法,商家發了貨之后,用戶還未收到貨,此時貨在路上。
我曾經在一些交流群里提出過這個問題,大家的看法都不一樣,大體上分為兩種做法:
- 一種是用戶收到貨后重新寄回;
- 另一種是用戶直接拒收包裹,包裹直接退回原地址。
我個人傾向于第一種,第一種比較靈活,因為用戶未收到貨就退款的原因一般與商品質量關系不大,所以如果允許用戶直接拒收退回,相當于商家需要承擔回退運費,而本身可能與商家并無太大關系。
另外一個原因就是,有些商家發貨地址與退貨地址不在同個地方,不支持直接退回。盡管如此,在到處強調用戶體驗的今天,增加用戶的售后成本也是在消耗用戶對平臺的耐心,大家不妨去思考一下,有沒有更好的解決方法。
用戶拒收:同上。
退貨退款:用戶收到貨后,想要申請售后,則此時需要提供讓用戶輸入售后原因,包括上傳憑證的功能,如果與商家協商無果,還需要增加平臺客服的入口,方便用戶進行申訴。而協商結果/申訴成功后直接觸發自動退款機制,退款后觸發消息通知,同時觸發交易關閉狀態,整個售后過程才算結束。
我上面有好幾處都提到與消息中心的對接,消息的觸發等,其實這也算是訂單系統設計的一部分內容,稱之為訂單推送。當訂單狀態機發生變化時,需要將對應的變化情況告知給相關人員以便了解當前訂單的情況,這也是訂單推送的作用。
3. 訂單推送
訂單推送的觸發依賴于狀態機的改變,涉及到的信息包括:
- 推送對象(用戶、商家、倉庫);
- 推送方式(站內消息、push、短信、微信);
- 推送節點(狀態機)。
本文主講訂單系統的核心模塊設計邏輯,訂單推送的具體設計就不再此處贅述。
結言
一個訂單系統的設計絕非這么簡單,它需要一批又一批的人去維護、去優化,根據公司的業務情況做出改變和兼容。
大家平時在做產品設計的時候可以多深入了解一下公司的具體業務場景,這樣才能做出適用自己企業的訂單系統,自己也才能成長,而不是一直套用別人的邏輯結果。
寫完文章已經完美進入周日了,下一篇文章會對上次有所保留的拼團活動進行更加詳細的分析。
本文由 @野蠻非先生 原創發布于人人都是產品經理。未經許可,禁止轉載
題圖來自Unsplash,基于CC0協議
交易失敗和交易關閉有什么不同?為什么有時看到交易失敗,有時看到交易關閉
請問,訂單創建時間 和 下單時間,不是一個時間嗎?
寫得真棒!可以再講講訂單狀態機部分嗎
當訂單里有多個商品時,部分商品收貨,部分商品發貨,訂單狀態怎么設計呢,怎么讓用戶快速明了的知曉當前訂單的資金流狀態呢
請問創建時間和下單時間有什么區別嗎
支持支持?。。?! ??
請問下訂單拆單,SKU層面上拆分訂單會根據買家的收貨地址判斷所在倉庫然后進行自動拆單嗎?
謝謝。大致搞清楚了
寫得好棒呀,剛好要做訂單系統的測試
為什么不把點評從訂單狀態中獨立出來?放在住流程中有什么特殊考慮嗎?
點評不算訂單狀態,是訂單流程的一個子流程,是觸發交易成功其中的一個前置條件。
現在買東西誰還會主動點評,就算做了自動好評的功能,跟主流程耦合性是不是太高了呢
如果你是指圖中“交易成功”訂單狀態包含了用戶評價,如我所回復,評價只是觸發的條件之一,而主要的觸發條件是時間,比如7天/15天/30天自動確認收貨,通過自動確認改變訂單狀態。也如你所說,大多數用戶不會主動點評,但也有一部分用戶會希望通過主動點評促使訂單交易成功,這樣用戶可以手動調整在商城訂單的結算時間,在有積分,會員,購買力評分的商城內是一種業務需求,所以這種耦合是必要的。
不錯,再繼續呀
不錯,寫的是那么回事 ??
感謝支持哦 ??