電商解密:如何設(shè)計(jì)購物車
編輯導(dǎo)語:對于電商來說,購物車的設(shè)計(jì)可謂是重中之重。有贈品時(shí)該如何根據(jù)庫存信息對購物車進(jìn)行設(shè)置?不同區(qū)域的不同郵費(fèi)該如何設(shè)置?有活動時(shí)優(yōu)惠券以及滿減又該如何設(shè)置?接下來,本文作者就為我們揭示了購物車背后的那些邏輯。
在電商的核心交易流程中,購物車是一其中非常重要的一環(huán),也是其中最復(fù)雜的一個(gè)環(huán)節(jié)。
一、電商流程業(yè)務(wù)領(lǐng)域
電商流程中業(yè)務(wù)領(lǐng)域劃分成兩部分:
1. 底層支撐的模塊
比如庫存系統(tǒng)、會員系統(tǒng)。
這些模塊的特點(diǎn)是:所處理的業(yè)務(wù)流程相對單一、閉環(huán),不需要太多依賴外部系統(tǒng)既可以完成領(lǐng)域內(nèi)的邏輯。
如:會員系統(tǒng)最重要的流程就是注冊、登錄、校驗(yàn)登錄態(tài),這幾個(gè)流程基本只依賴會員系統(tǒng)自身,沒有對外部系統(tǒng)產(chǎn)生強(qiáng)依賴,強(qiáng)耦合。
2. 上層流程串流程的模塊
比較復(fù)雜的是串業(yè)務(wù)流程的系統(tǒng),這部分系統(tǒng)業(yè)務(wù)邏輯會相對更復(fù)雜些,比如商詳或者購物車。
因?yàn)樯滔榛蛘哔徫镘囁故窘o用戶看到的東西需要串聯(lián)非常多的業(yè)務(wù)模塊,將其中的信息進(jìn)行封裝組合展示給用戶,這里的業(yè)務(wù)邏輯非常復(fù)雜,系統(tǒng)內(nèi)部的交互非常多。
我們以京東的購物車為例,簡單的剖析一下京東的購物車大體背后的業(yè)務(wù)邏輯,實(shí)現(xiàn)方式。
購物車中所展示的東西,無非就是加入購物車中的商品以及一些促銷信息。那么第一個(gè)問題是,這些購物車中的商品、促銷信息是靜態(tài)的還是動態(tài)獲取的?
所謂靜態(tài)就是指用戶在將商品加入購物車的時(shí)候,在購物車中存儲加入購物車的商品所需要展示的各種信息,例如上面展示的商品的主圖文描、促銷等等。
動態(tài)獲取就是在查看購車的時(shí)候,再去實(shí)時(shí)調(diào)用相應(yīng)的系統(tǒng)獲取最新的信息。
答案是:購物車的數(shù)據(jù)只會存儲必要的商品信息,其他的信息完全是動態(tài)獲取的。因?yàn)樵诩尤胭徫镘嚨臅r(shí)候如果是靜態(tài)存儲的,那么在下一次查看購物車的時(shí)候,所展示的信息可能就不是最準(zhǔn)確的。
這中間可能商品信息會發(fā)生變化,比如商品被下架了、商品的主圖被調(diào)整了、或者主題被修改了、商品的促銷信息也可能會發(fā)生變化;在加入購物車的時(shí)候可能會命中一個(gè)促銷,但是過了一段時(shí)間之后,這個(gè)促銷可能結(jié)束了。
所以比較精準(zhǔn)的做法是在展示購物車的時(shí)候,再去實(shí)時(shí)拉取一次商品的詳細(xì)信息以及當(dāng)前的最新促銷信息。
但是購物車中還是會存儲一部分?jǐn)?shù)據(jù),主要存儲哪些數(shù)據(jù)呢?
主要如下圖所示:
二、查看購物車背后到底有哪些邏輯
首先是校驗(yàn)會員的登錄態(tài)。
上面購物車存儲的結(jié)構(gòu)中,我們看到購物車的存儲是以用戶維度進(jìn)行數(shù)據(jù)存儲的,所以要展示購物車的時(shí)候,首先要拿到用戶的ID。
所以這里第一步就會校驗(yàn)登陸態(tài)——因?yàn)橹挥杏脩舻卿浐蟛拍茏R別當(dāng)前的用戶具體是誰,才可以從購物車的存儲中獲取響應(yīng)的數(shù)據(jù);然后,購物車會根據(jù)取到的商品ID列表,實(shí)時(shí)調(diào)用商品系統(tǒng)并獲取最新的商品信息,最終組裝后進(jìn)行展示。
1. 獲取庫存信息
庫存情況由于變更比較頻繁,所以每次查看購物車的時(shí)候也需要實(shí)時(shí)的去查看當(dāng)前商品的庫存情況。
如果購物車中的商品沒有庫存,那么就要進(jìn)行提示。如下圖所示,在購物車中將此商品置灰,提示此商品“無貨”。
庫存這里還有一個(gè)比較特殊的邏輯,就是贈品的邏輯。
贈品分為兩種情況:
- 滿多少元送一個(gè)贈品,簡稱“滿贈”;
- 買一個(gè)東西送一個(gè)贈品,簡稱“買贈”。
兩種都是贈品,但是對于庫存的邏輯處理完全不一樣。
這兩種情況都會要求主商品跟贈品必須要在同一個(gè)倉,不然就會出現(xiàn)主品從一個(gè)倉發(fā)貨,贈品從另外一個(gè)倉發(fā)貨,要承擔(dān)兩份運(yùn)費(fèi)的成本。
本來就是贈送一個(gè)贈品,如果還需要額外承擔(dān)運(yùn)費(fèi)的話,那么肯定不劃算。所以在校驗(yàn)庫存的時(shí)候,一定會校驗(yàn)主品跟贈品是否都在同一個(gè)倉有貨。
當(dāng)贈品跟主品不在同一個(gè)倉或者贈品沒貨的時(shí)候,對于滿贈這種場景,如果贈品沒有庫存,那么還是可以正常下單的。
因?yàn)闈M贈這種促銷類型會給用戶進(jìn)行提示“贈品數(shù)量有限,先到先得”,所以贈品沒貨的時(shí)候也是可以正常下單的,用戶也是能接受的。
但是買贈這種場景,如果贈品沒有貨,那么會提示用戶贈品無貨,不可以下單。因?yàn)檫@種場景用戶會認(rèn)為贈品是主品的一部分,沒有贈品也就不會去買這個(gè)主品了。
獲取完庫存之后,下一步會計(jì)算購物車中商品促銷的情況,這也是整個(gè)購物車中邏輯最復(fù)雜的一部分。促銷本身就比較復(fù)雜,因?yàn)闀嬖诙喾N促銷類型,如果某個(gè)商品同時(shí)命中多個(gè)促銷怎么辦?
如果商家設(shè)置了非常多的促銷,每一次都需要拿購物車中的商品去遍歷計(jì)算每個(gè)商品命中哪個(gè)促銷規(guī)則,整個(gè)計(jì)算過程也非常耗時(shí)。
所以購物車會將商品列表傳給促銷系統(tǒng),促銷系統(tǒng)根據(jù)購物車中傳遞過來的商品去計(jì)算,這些商品會命中哪些促銷,然后將這些商品按照命中的促銷進(jìn)行分門別類返回給購物車。
比如:一個(gè)購物車中一個(gè)商家下有若干個(gè)商品,其中兩個(gè)命中了a促銷,另外兩個(gè)命中了b促銷,還有三個(gè)沒有命中促銷。
那么要按照結(jié)構(gòu)返回給購物車,購物車再展示給到用戶,這樣用戶看的會比較清晰些。
2. 運(yùn)費(fèi)計(jì)算邏輯
在購物車中除了展示基本的商品信息,還有很多額外的功能,比如計(jì)算運(yùn)費(fèi)。
上圖中會顯示這一個(gè)商品包郵免運(yùn)費(fèi),那么運(yùn)費(fèi)是如何計(jì)算出來的呢?
其實(shí)在商家后臺有一個(gè)叫做運(yùn)費(fèi)模板的東西,商家會設(shè)置運(yùn)費(fèi)的策略,主要分為兩種規(guī)則:
- 根據(jù)單個(gè)商品去設(shè)置運(yùn)費(fèi)的規(guī)則;
- 根據(jù)訂單維度去設(shè)置模板。
單品維度指的是某一個(gè)商家的某個(gè)商品在某些地址需要收多少錢運(yùn)費(fèi),這種的應(yīng)用場景是當(dāng)商家發(fā)現(xiàn)有些商品發(fā)到偏遠(yuǎn)地區(qū)比較貴的時(shí)候,會設(shè)置這樣一個(gè)單品模板。
比如某個(gè)商品發(fā)到新疆、西藏、甘肅比較貴,那么就可以設(shè)置這個(gè)商品在這三個(gè)省收運(yùn)費(fèi)15元;反之只要收貨地址不是這三個(gè)省的,那么這個(gè)商品就不收運(yùn)費(fèi)。
另外一種是訂單維度的模板,也就是按照訂單維度來計(jì)算,整個(gè)訂單收多少運(yùn)費(fèi)。
舉個(gè)例子:比如我們經(jīng)常見的江浙滬包郵,那么這個(gè)模板應(yīng)該如何設(shè)計(jì)呢?
首先是選好一個(gè)商家,然后選好江浙滬的地址。在這些地址設(shè)置一個(gè)規(guī)則訂單,不滿0元運(yùn)費(fèi)0元,江浙滬之外需要收10元的運(yùn)費(fèi),再設(shè)置一下除了江浙滬之外的省份。
訂單不滿100元收取10元運(yùn)費(fèi)。這樣就達(dá)到了江浙滬包郵、江浙滬之外的地區(qū)需要有門檻,達(dá)到100元不收運(yùn)費(fèi),但是不足100元需要收10元運(yùn)費(fèi)。
3. 價(jià)格促銷邏輯
購物車中每一個(gè)商家頭部有一個(gè)領(lǐng)券的標(biāo)識,來標(biāo)識這個(gè)商家目前可以有優(yōu)惠券可以領(lǐng)。
這個(gè)領(lǐng)券設(shè)計(jì)的目的是為了讓用戶能夠在最關(guān)鍵的環(huán)節(jié)知道有券可以用,從而提升購物車的轉(zhuǎn)化率。那么這個(gè)功能是如何做到的呢?
在購物車中會將商品按照商家的維度分成不同的塊,每一個(gè)塊代表一個(gè)商家,商家里面的商品如果有促銷信息,按照塊的維度再去展示促銷的信息。
領(lǐng)券的計(jì)算單位是商家的維度,在購物車中首先將商品根據(jù)不同的商家計(jì)算好分塊之后,每一個(gè)塊都代表一個(gè)商家,購物車會去計(jì)算當(dāng)前商家下面以及當(dāng)前商家購物車中的商品是否有可以領(lǐng)用的優(yōu)惠券。
如果這個(gè)商家制了10個(gè)批次的優(yōu)惠券,其中2個(gè)批次的券可以使用當(dāng)前購物車的商品,并且用戶還沒有領(lǐng)券,那么就會在這個(gè)地方進(jìn)行提示,告訴用戶有可以領(lǐng)用的券。
購物車中還有一個(gè)叫做預(yù)估到手價(jià)。
之前購物車中只展示了哪些商品可以命中哪些促銷,但每一個(gè)單品最終成交價(jià)格需要用戶自己去算。由于促銷疊加起來比較復(fù)雜,有些用戶自己算不清楚。所以這個(gè)預(yù)估到手價(jià)就是系統(tǒng)根據(jù)當(dāng)前疊加促銷、券之后算出來的最終成交價(jià)格。
這個(gè)功能省去了用戶自己去計(jì)算的過程,并且很直觀明了的展示出來了,最終的成交價(jià)對用戶提升轉(zhuǎn)化也有很大的幫助。
那么這個(gè)預(yù)估到手價(jià)是如何實(shí)現(xiàn)的呢?
首先會先去計(jì)算購物車中商品的價(jià)格,有沒有單品維度的價(jià)格促銷。
比如:價(jià)格直降或者秒殺、拼團(tuán)之類的價(jià)格優(yōu)惠。也就是上圖顯示的“119”,這個(gè)是價(jià)格維度的計(jì)算。在計(jì)算好單品價(jià)格維度之后,會再去計(jì)算一下當(dāng)前商品是否有命中訂單維度的促銷,比如滿減或者折扣。
這時(shí)會在單品價(jià)格基礎(chǔ)上減去命中促銷價(jià)格,算出一個(gè)優(yōu)惠價(jià)。然后在這個(gè)價(jià)格基礎(chǔ)上再去命中一次優(yōu)惠券的邏輯,看用戶手中有哪些券可以使用。最終再去減去優(yōu)惠券可以使用的價(jià)格,就是用戶實(shí)際成交的價(jià)格,也就是預(yù)估到手價(jià)。
這里舉一個(gè)例子:一個(gè)商品原價(jià)100塊,做了一個(gè)價(jià)格直降的活動,拼團(tuán)或者秒殺,價(jià)格降到90;然后這個(gè)商品還享受了一個(gè)滿減的優(yōu)惠,滿80減20,這個(gè)時(shí)候這個(gè)單品的價(jià)格就變成了90-20=70。
如果這個(gè)用戶的賬戶中,還有一張可以用于這個(gè)商品的現(xiàn)金10元券,那么這個(gè)商品最終到手的價(jià)格就是70元,再減去10元的優(yōu)惠券等于60元。
通過上面幾個(gè)過程,系統(tǒng)就可以幫你算出來每一個(gè)商品在當(dāng)前情況下的一個(gè)預(yù)估到手的價(jià)格。
三、總結(jié)
購物車是整個(gè)電商交易流程中比較復(fù)雜的一個(gè)環(huán)節(jié),需要串聯(lián)會員、商品、庫存、促銷、優(yōu)惠券等大部分邏輯進(jìn)行最終的購物車的呈現(xiàn)。
為了保證購物車展示給用戶信息的準(zhǔn)確性,購物車只存了最基本的一些信息,絕大部分的信息都是在用戶查看購物車那一剎那實(shí)時(shí)計(jì)算出來的。
#專欄作家#
DearNicole,人人都是產(chǎn)品經(jīng)理專欄作家,前京東產(chǎn)品經(jīng)理、研發(fā)經(jīng)理,主攻電商的方方面面。公眾號:中臺碎碎念
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 Pexels ,基于 CC0 協(xié)議
您好,想請教一下滿贈活動若購物車內(nèi)預(yù)估實(shí)付價(jià)格顯示已滿獲贈門檻,但收銀臺實(shí)付價(jià)格卻低于門檻這種情況該怎么處理呢?感覺購物車的贈品提示會誤導(dǎo)到用戶。