電商訂單是如何生成的?它有何奧秘?
交易系統一直是電商的核心模塊,幾乎所有業務都圍繞其展開,看似簡單的下單流程,實際涉及的模塊、內容也很龐雜。這次就把訂單下單的整體鏈路抽象出來,與大家分享。
說到下單,對于用戶而言就是選擇商品-下單-支付-商品運輸-確認收貨這樣簡單的主流程,保證了即使是網購新手也可以很快上手。
但對于電商交易系統來說,訂單的生命周期遠不止上述流程那般簡單。見下圖,對于電商平臺來說一個訂單的生命周期涉及眾多系統,下圖也僅僅是列出了各大系統間的交互流轉,且僅涉及正向流程,逆向流程會更加復雜。
01 關于訂單
1. 什么是訂單
首先來聊一下什么是訂單?
訂單可以簡單理解為買家與賣家簽訂的一份具備法律效應的合約。一般情況下,合同的訂立有要約和承諾兩個程序。賣家展示商品及其價值的行為,便屬于要約;購買者確認購買商品并提交訂單的行為屬于承諾,訂單提交后,合同即成立并生效。所以大家可以簡單理解為訂單其實就是一份客戶與商家簽訂的合同,具有法律效益。
2. 訂單的生成與流轉
參考上文,如果從前端的體驗來看,訂單的生成就是加車后結算或立即購買,進入結算界面確認訂單各項信息無誤,提交后即生成訂單。
但我們從訂單在內部系統生成的流程來看,在生成訂單前需要內部各大系統進行配合與支撐,包括風控系統、商品系統、營銷系統、會員系統、庫存系統等。上述系統流程也僅是對交易主流程的梳理,涉及數據在各系統中如何交互并沒有列出,可見整個電商交易系統是何其復雜。
02 風控系統——風險訂單檢測、攔截
說到風控系統,最容易聯想到的是銀行借貸、P2P等金融領域的風險控制。無論是金融行業還是電商行業,風控的本質都是保證平臺利益不受損失。
電商訂單風控主要側重于兩防——防刷單;防羊毛黨。
1. 防刷單
商家刷單影響平臺流量分配,間接影響商家管理體系的構建;商家刷單體系大概歷經了兩個時期:野蠻生長,集中刷單;平臺監管,精細化刷單。
電子商務起步初期,唯銷量論英雄,”培養”了商家們的刷單習慣,加上平臺監管缺失,一個人一臺電腦就能刷上一天,那時候管刷單不叫刷單,叫刷鉆/刷皇冠,主要刷的是店鋪等級。
但“好日子”很快到頭了,隨著平臺的流量分配由店鋪變為單品,加上管理規則、風控體系不斷完善,商戶們的刷單成本也越來越高,刷單的工作也要交給”專業”人士來,所謂精細化刷單就是模擬用戶真實下單場景,騙過系統,讓它認為就是普通用戶在下單。精細到怎么搜到商品,需要瀏覽多少個商品,每個頁面停留多長時間,是靜默下單還是咨詢下單都有嚴格的規范。
業內早就形成了認知:沒有一勞永逸的防刷單策略,最好的方法就是不斷提高刷單的成本。
2. 防羊毛黨
羊毛黨薅羊毛的做法直接影響平臺/商家收益,損害正常用戶購物體驗。說到羊毛黨離不開另外一個詞:黑產。單兵作戰的羊毛黨不可怕,可怕的是成體系作戰的黑產團隊,他們往往分工明確,主攻電商平臺業務(規則)漏洞和系統BUG,薅上一天夠吃一年。
上述流程圖,在用戶提交下單申請后會經過風控系統的風險檢測,但此時的風險檢測較為初級,主要針對確定性事件如用戶黑名單、下單環境等事件進行下單攔截。
因為下單時風控系統能夠拿到的字段信息較少,缺乏大量數據支撐,難以準確判斷用戶下單行為,且下單流程屬于高并發場景,系統反饋需要在毫秒級完成,進行復雜的風控檢測嚴重拖慢系統進程,因此更復雜的風控會在用戶下單成功后異步進行。
進行異步風控檢測后,系統會對命中風控策略的訂單進行關閉(取消訂單),當然風控并不只是攔截訂單,在復雜的場景下還需要有報警機制,人工介入。
拼多多在19年1月就因為優惠券事件被黑產薅了數千萬羊毛,就是因為缺乏有效的風控機制。
03 商品系統——商品信息的獲取
訂單生成時需要通過商品系統獲取商品基礎信息、數量、價格。同時部分電商平臺還會記錄交易快照,同樣是需要商品系統支持。
1. 關于交易快照
什么是訂單商品快照(交易快照)?看字面意思,很容易讓人理解為用戶下單時針對訂單商品詳情的一個快照(截圖),其實嚴格來講,商品快照是一個靜態數據合集,記錄了用戶下單時的商品信息,包含:商品圖片、標題、描述、服務等要素。
淘寶是國內較早啟用交易快照的電商平臺,為了解決商家與用戶交易糾紛時難以追溯用戶下單時的商品情況,淘寶的產品經理引入了交易快照的概念,即用戶的每一次下單,都會對下單時的商品信息做一個記錄,快照作為買賣雙方發生交易的憑證,任何交易糾紛或者投訴都將以快照為準。
大多數電商平臺做交易快照的初衷是為了解決交易糾紛,此外,交易快照還運用于法律訴訟場景,法院進行相關訴訟的裁定時,是認可交易快照作為證據的,但需要證明快照就是用戶下單時的商品快照,無法被篡改。
2. 交易快照的記錄
交易快照的記錄:目前主要有兩種記錄方式,如圖:
- 第一種:用戶每下一單都對訂單商品信息進行一次信息記錄,此操作主要由交易系統完成,弊端也很明顯在下單高峰期,會對系統性能產生影響,且數據存儲量大。該方案主要適用于低頻交易場景,如大宗商品交易等。
- 第二種方法:由商品系統(基礎數據)對每一次商品信息變更做備份,之后根據用戶下單時間映射商品快照。此方案適用于高頻交易場景,且對高并發下交易系統性能不會產生太大影響。
04 庫存系統——商品庫存校驗
1. 庫存的定義
關于庫存的定義,百科上給出的解釋是:“倉庫中實際儲存的貨物”。但這里我特別提到了虛擬庫存,為了與實際倉庫庫存做區分。
目前商家在電商平臺維護的庫存都叫虛擬庫存,虛擬庫存可以簡單理解為不存在的庫存,它并不跟實際倉庫庫存關聯,可以認為虛擬庫存就是商家指定的平臺的一個渠道可售庫存。如果商家有一批商品正在生產中、采購中、運輸中或正在入庫,亦或者商家覺得能承擔住超賣的風險,有辦法從其他地方調貨,設置虛擬庫存時就可能大于實際倉庫庫存。
2. 庫存預占與庫存校驗
說到庫存預占,在電商發展過程中有個很經典的問題:是下單減庫存還是支付減庫存?
現在想一想,應該在什么時候減庫存?
線下實體商超是怎樣的?
這里不考慮實體商超倉庫庫存的情況,只考慮貨架庫存。什么時候減庫存呢?或者說什么時候這個庫存會被用戶占據呢,應該是在用戶從貨架拿走商品,放入購物車的時候。
那么線上購物流程也按照加入購物車即減庫存呢?顯然是不行的,線上購物車的”加車”操作幾乎是0成本,決定它更像是作為一個商品收藏池或備忘錄,用戶把備選的商品放入購物車后再進行二次選品,加車商品數遠大于用戶實際購買數,故在購物車即扣減庫存效率是低下的。
如果是在下單的時候扣減庫存呢?
相當于用戶下單,系統已經把相應庫存分配給此用戶,用戶支付成功后即可發貨,這是正常的流程。但會出現下單不支付惡意預占庫存的情況,導致商家商品未能及時售出,銷售受損。
如果更進一步,支付成功時再扣減庫存呢?
此方法一定程度提高了惡意下單的門檻。但問題也產生了,當商品供不應求,出現大量用戶搶購的情況,此時大部分用戶都能下單成功,但在支付環節僅有少部分用戶可完成支付,對于未成功支付的用戶來說,體驗太差。
上述兩種有效方案,無論是下單減庫存還是支付成功減庫存,都不是完美的解決方案。那么應該選擇哪一種呢?蘇杰在《淘寶十年產品事》中回憶當時淘寶的產品經理也是糾結于選擇哪種方案,最后折中,提供兩種方案,商家自行選擇。
在我看來,對于平臺型電商,下單減庫存優于支付成功減庫存。
- 從體驗角度上看:用戶(購物)體驗是平臺型電商的核心競爭力。下單減庫存影響商家銷售,支付減庫存影響用戶體驗,所以從購物體驗角度做取舍,下單減庫存對用戶較為友好。
- 從系統層面上看,支付減庫存是要比下單減庫存復雜的。支付減庫存涉及 訂單系統-庫存系統-支付系統的交互,而下單減庫存僅由訂單系統-庫存系統完成即可。支付減庫存在高并發的場景下容易出現超賣現象。
- 下單減庫存存在的問題:惡意下單不支付??梢酝ㄟ^系統規則來解決:如單用戶限購,超時未支付自動取消訂單(庫存返還)
05 訂單系統——訂單信息記錄
1. 訂單拆單
1)為什么要進行訂單拆單?
核心有兩點:便于結算;便于發貨。
主要是圍繞上述兩點核心進行,常見拆單規則有:
- 按商家拆單;不同商家間需要拆單
- 按倉庫拆單;不同倉庫間需要拆單
- 按商品重量、體積拆單;快遞公司對包裹最大體積/重量有要求
- 按商品價值拆單;貴重、易損商品單獨拆分等
- 按發貨方式拆單;如實物商品與虛擬商品混合下單,發貨方式不同
- 按配送時效拆單;如正常商品與預售商品混合下單,發貨時效不同
具體拆單規則根據不同平臺不同業務場景而異,按照便于結算、便于發貨兩大方向去做訂單拆分便能滿足大部分業務需求。
2)什么時候拆單
先來看下京東、淘寶分別在什么時候進行拆單
- 京東:用戶訂單支付成功后進行拆單
- 淘寶:用戶提交訂單,支付前即對訂單進行拆單
那么什么時候拆單有何講究?因為業務形態不同,淘寶以商家為主,京東以自營為主。故淘寶拆單邏輯較為簡單,按商家拆單即可滿足絕大部分拆單訴求;而京東因涉及自營倉+商家,除了商家間的拆單,還涉及倉間/倉內拆單,拆單邏輯更為復雜,將拆單邏輯后置到支付成功后,能夠減少無效拆單(未支付訂單不拆單),提升高并發時系統性能。
所以在什么時候進行訂單拆分,遵循兩大原則:
- 占用資源最小原則(特別要考慮高并發場景);
- 訂單推送前需要完成拆單(推送至商家/倉庫前都需要完成拆單)
2. 訂單優惠計算與優惠分攤
早期的淘寶,商品就一個價格,即售賣價,對于商家、用戶來說都足夠簡單,所見即所得。但這種平衡很快被一個功能打破——購物車。購物車的上線標志著淘寶進入營銷時代,后來我們熟知的滿減、滿折、滿贈、M元N件等促銷玩法都要仰仗購物車。那么訂單優惠是怎么計算的呢?
1)遞進式門檻計算
既然促銷活動有了,有促銷就會有優惠,這些優惠怎么算呢,讓我們記住這個詞【遞進式門檻計算】,就是它,讓很多用戶抓狂。
提問:購買兩件商品A和B,A單品優惠價100元;B單品優惠價200元,參加店鋪促銷滿300減50,店鋪優惠券滿280減40;同時還參加跨店鋪滿減,每滿290減50。問:在遞進式門檻計算規則下,到手價是多少?
按照【遞進式門檻計算】最終到手是:250,這就是一頓操作猛如虎,一看優惠兩塊五。
遞進式優惠計算核心規則即:根據上一層級優惠扣減后的金額來判斷是否滿足下一層級的優惠門檻。所以在【遞進式門檻計算】時期,經常出現用戶看到某一商品參加了多種活動、領取了各種優惠券,最終結算時僅可以使用一種優惠而大罵商家、平臺虛假營銷的情況。
2)平行式門檻計算
前文我們提到:購物體驗是平臺型電商的核心競爭力,在此背景下,淘寶、京東于18年、19年相繼用【平行式門檻計算】替代【遞進式門檻計算】。
采用平行式門檻計算規則后,優惠計算清晰明了,以前要糾結各級優惠的觸發門檻,現在湊單只需要盯著各類優惠里門檻最高那個就行,如圖:
此規則的上線對于平臺用戶、商家來說無疑是利好的,用戶能夠一目了然感知優惠力度,商家也能清楚掌握讓利程度。
但這里面存在一個大坑,即平臺在切換優惠計算規則時歷史產生的促銷活動、優惠券怎么辦?不處理,商家就要大出血,如圖。
淘寶、京東面對此坑時也是毅然在上線前將平臺所有滿減、滿折、滿贈等促銷活動及優惠券作廢。
3. 訂單狀態的定義
我們常見的訂單狀態,如下:待付款-待發貨-已發貨-已完成-已評價 (已評價狀態有時也不作為主狀態存在)
已關閉、異常
作為電商行業從業者需要經常跟訂單打交道,每個人都能隨口說出訂單狀態包含哪些,甚至連會網購的大媽都能說出個123。訂單狀態算是一套很成熟的體系,對于缺少電商行業經驗的產品來說,在定義訂單狀態時直接照搬這一套,大概率都不會出錯。
但在這里我還是想聊一下對于訂單狀態的思考:
首先,說一下狀態,這個詞對于產品經理來說一定不陌生,日常工作中各種單據、邏輯判斷都會用到。什么是狀態?我的理解:事物處于某個穩定的情態,在無外力的影響下會一直處于一個穩定態,這個穩定態就可以稱為狀態。
那么反過來說,在外力的作用下狀態是可以改變的,這里就衍生出來產品設計中的一個法則叫“一動一態”即兩狀態間有任何數量級的操作都可以抽象為一個動作,一動一態的好處主要體現在:降低用戶認知成本;便于制定、處理各種狀態值
回到訂單狀態,如圖,用戶下單后的一系列操作其實是由三個維度的狀態(支付狀態、物流 狀態、評價狀態)構成,但多維度狀態的存在容易引起認知混亂,為解決這一問題,我們傾向于創建一個全局維度的狀態——訂單狀態
但如上圖中所示,構建后的全局維度涉及訂單下單-配送-簽收評價全流程,涉及:待支付、待發貨、待攬件、運輸中、派件中、已簽收、已評價,狀態值依然龐雜。想
一下,我們創建全局維度狀態要解決的就是降低使用者(商家、消費者)認知成本,知道在什么步驟需要執行什么操作,所以我們歸納下上述訂單狀態流轉時進行相關操作的執行角色:
- 消費者:支付、簽收、評價
- 商家:發貨
- 物流公司:攬件、走件、派件
我們會發現,需要消費者、商家操作的僅有:支付、發貨、簽收、評價。在定義一動一態法則時我們講到:任何數量級操作都可以抽象為一個操作,為了降低使用者(商家、消費者)認知成本,我們可以把[發貨、攬件、走件、派件] 這一流程抽象為一個操作——發貨。這樣一來就明了了
4. 訂單號的設計
訂單號的設計是一門藝術,能夠參與訂單號規則設計是一件令人興奮的事情,這種機會通常只在電商項目從0到1的時候有。那么訂單號的設計應遵循哪些原則呢?
1)唯一性
訂單號作為訂單表的主鍵,需要確保唯一性。
2)易讀性
這里易讀性主要體現在系統易讀性和溝通易讀性。
要求訂單號不宜過長且盡量為純數字,不宜出現字母、符號、數字混用的情況,否者對于系統存儲、查詢性能、以及與用戶的溝通成本來說都是一種負擔。
3)安全性
非特殊情況盡量不要在訂單號中帶入平臺運營特征信息,如訂單數量,避免泄露運營數據。除非故意要讓競對知道你的運營數據。
瑞幸咖啡較早之前門店訂單量就是逐一增加,后續也加入了隨機因子,就是擔心外界通過訂單編號獲得店鋪每天成交量。
4)擴展性
訂單號設計需要考慮擴展性,如隨著平臺業務發展,訂單量激增訂單號不夠用的情況
5)語義性
訂單編號規則中加入帶有語義的特征信息,能在一定程度上提升平臺人員處理訂單的效率與便捷性。
常見的特性信息有:訂單生成時間(年月日)、下單渠道、支付渠道、業務類型等,但訂單編號中不宜攜帶過多特征信息,否則會出現不法分子通過描述訂單信息博取用戶信任進行實施詐騙。
說到語義性,細心的同學會發現,自己淘寶訂單號后6位都是一樣的。訂單號后6位其實就是用戶id后6位。那么淘寶訂單編號中用了用戶id后6位是否代表了語義性?答案是否定的,因為只用后6位id并不能準確定位到某一個用戶。
那么淘寶訂單編號后6位用戶id后6位的目的是什么?
翻遍了百度、知乎,沒有找到答案。
我是偶然間翻到一份淘寶技術演變PPT,看到訂單表分庫的邏輯時才恍然大悟。
一般的平臺型電商,訂單量大,為保證查詢檢索速度,都會采用分庫的形式,將巨量的訂單信息分庫存儲,一般情況下訂單系統同時維護了一個訂單號和userid的關聯關系,先根據訂單號查到userid,再根據userid確定分表進而查詢得到內容。而淘寶在訂單號上下功夫,通過訂單號后6位直接鎖定庫表,大大提升高并發下的系統查詢性能。
從這個策略我們也可以看到淘寶用戶訂單庫是按照用戶id后6位存儲的,例如:XXXX452154格式的用戶訂單都是儲存在一個分庫中。
本文由 @阿鐵 原創發布于人人都是產品經理,未經許可,禁止轉載。
題圖來自 Unsplash,基于CC0協議
深入淺出,好文章
期待支付系統流程的文章
下一篇文章應該會聊一聊電商直播
你的下一篇文章出來沒,非常期待
近期入職新公司,比較忙。近兩周會先分享一篇評分模型相關的
干貨文章,一直做筆記看完
贊,相加作者微信好友
atie250
咱,相加作者微信好友
非常好的文章,期待再出新品(淘寶為每個用戶都分了一個分庫?)
一批用戶一個庫,如用戶id一共有10位,后id六位相同的用戶訂單都在一個分庫里
一批用戶一個庫,如:userid一共有10位,id后六位相同的用戶訂單都在一個分庫里
我的理解是為每個尾號相同的用戶分了一個庫
這才是論壇需要的好文章
作者感謝你哦 ? ,最近在看訂單相關的