從0到1構(gòu)建電商平臺(tái)之訂單系統(tǒng)(2):支付訂單
上一篇筆者為大家介紹了訂單系統(tǒng)中關(guān)于提交訂單操作相關(guān)的問(wèn)題:《從0到1構(gòu)建電商平臺(tái)之訂單系統(tǒng)(1):提交訂單》,提交訂單之后,接下來(lái)要做的是“支付訂單”。
電商平臺(tái)主要會(huì)涉及商家系統(tǒng)、商品系統(tǒng)、訂單系統(tǒng)、售后系統(tǒng)、會(huì)員系統(tǒng)、營(yíng)銷系統(tǒng)、財(cái)務(wù)系統(tǒng)、數(shù)據(jù)系統(tǒng)等。我會(huì)把訂單系統(tǒng)的文章拆分成三篇,本篇是第二篇。
雖然每個(gè)公司的具體需求與業(yè)務(wù)場(chǎng)景不一樣,我們平臺(tái)的功能需求可能其他平臺(tái)不盡相同,但整個(gè)訂單的產(chǎn)生到結(jié)束的,主要有以下3個(gè)流程:
上一篇文章我們是寫的是提交訂單這一步操作,當(dāng)用戶把訂單提交后此時(shí)后臺(tái)會(huì)有兩步操作:
1)拆單
由購(gòu)物車進(jìn)入提交訂單頁(yè)面時(shí)可能有多商家多商品的情況,一旦提交了訂單就會(huì)涉及到拆單(不管是否成功支付),一般來(lái)說(shuō)最簡(jiǎn)單的是按商家拆,拆完后分別流轉(zhuǎn)至相應(yīng)的商家后臺(tái),用戶在客戶端的訂單列表也會(huì)看到多個(gè)子訂單;如果業(yè)務(wù)場(chǎng)景要求的話可以再按倉(cāng)庫(kù)等維度拆,這里不做展開(kāi);
2)生成賬單
生成賬單的目的是為了記錄該筆母訂單的金額,如商品金額、抵扣總金額、各商品分別抵扣金額、用戶需支付金額等,用戶將要支付的是母訂單的賬單,當(dāng)該筆賬單已完成,則各子訂單狀態(tài)跳轉(zhuǎn)為待發(fā)貨;
注意,如果用戶在支付頁(yè)面退出,此時(shí)賬單也會(huì)隨著商家拆分成各子賬單,因?yàn)橛脩艨梢栽谟唵瘟斜砝锓謩e對(duì)拆分后的子訂單進(jìn)行支付
下面是支付頁(yè)面的字段和各項(xiàng)判斷流程:
一、支付方式
1. 支付寶/微信等三方支付
由開(kāi)發(fā)同學(xué)對(duì)接好三方支付平臺(tái)的接口即可,這里不做展開(kāi)。
2. 余額支付
用戶在平臺(tái)會(huì)通過(guò)一定的方式獲取余額(非充值,也非用來(lái)抵扣的金幣,是一種支付方式),此時(shí)有2種情況:
1)金幣完全抵扣
當(dāng)金幣能完全抵扣時(shí),在支付頁(yè)面可以只顯示余額支付;因?yàn)榇藭r(shí)支付金額雖然為0,但需要選擇余額支付并輸入支付密碼,目的是為了防止被他人盜用(當(dāng)用戶選擇支付寶/微信支付時(shí)需輸入支付密碼,相當(dāng)于已經(jīng)起到了防止作用)
2)金幣非完全抵扣/未抵扣
此時(shí)用戶只能選擇一種支付方式,但如果余額小于支付金額只能選擇支付寶/微信。
二、?判斷流程與思考
1. 鎖定庫(kù)存:兩種方案
1)提交訂單即鎖庫(kù)存
這樣做的優(yōu)點(diǎn)是用戶的體驗(yàn)較好,我提交了訂單這個(gè)商品就是我的了,我可以慢慢付款;
缺點(diǎn)是可能會(huì)導(dǎo)致真正有購(gòu)買需求的用戶無(wú)法購(gòu)買,比如甲用戶先提交訂單鎖定了庫(kù)存他還在考慮中,不一定會(huì)買,但是乙用戶想立即購(gòu)買確發(fā)現(xiàn)沒(méi)貨了(也不排除有人惡意下單鎖定庫(kù)存)
所以待付款訂單一般都會(huì)有剩余支付時(shí)間,比如30分鐘,到了時(shí)間自動(dòng)取消訂單并釋放庫(kù)存,或者在添加商品的sku時(shí)設(shè)置單人限購(gòu)數(shù)量,這樣一個(gè)賬號(hào)只能在某一段時(shí)間內(nèi)購(gòu)買n次,同時(shí)技術(shù)上也可以做限制,同一ip只能購(gòu)買n次
2)支付成功才鎖庫(kù)存
這樣做的優(yōu)點(diǎn)是可以篩掉惡意下單的情況;缺點(diǎn)是用戶的體驗(yàn)會(huì)差一些,可能付款慢一點(diǎn)就會(huì)失去購(gòu)買的機(jī)會(huì)。
我們平臺(tái)采用的是a方案,可以根據(jù)不同的業(yè)務(wù)場(chǎng)景選擇不同的方案。
2. 是否能下架商品?
進(jìn)入支付頁(yè)面說(shuō)明該訂單已生成,且處于待付款狀態(tài),此時(shí)需要注意的是此時(shí)商家是否能下架商品。
1)能
可能會(huì)導(dǎo)致用戶在已經(jīng)支付訂單時(shí)提示商品已下架,因?yàn)榇藭r(shí)訂單已經(jīng)生成,處于待付款狀態(tài);只有讓系統(tǒng)自動(dòng)取消該訂單,但對(duì)用戶是比較不友好的
2)不能
對(duì)商家是不友好的,因?yàn)榕袛鄺l件為訂單處于待付款,此時(shí)用戶可能不付款退出,訂單也會(huì)處于待付款;
衍生的情況就比較麻煩了,哪怕待付款訂單自動(dòng)取消的時(shí)間為30分鐘,也會(huì)存在不斷有用戶下單,商家就可能一直不能下架商品,后續(xù)的問(wèn)題可能會(huì)更大,但如果此時(shí)限制其他用戶不能下單,那么就在技術(shù)與商家的操作上都會(huì)比較復(fù)雜(具體的操作這里不做展開(kāi))。
我暫時(shí)沒(méi)有想更好的解決方案,采用的第一種方案。
3. 驗(yàn)證sku信息是否更改
當(dāng)訂單處于待付款時(shí)商家修改了sku(下架商品 – 編輯商品 – 工作人員審核上架),該訂單同樣不能付款,因?yàn)楹痛藭r(shí)的商品信息甚至金額可能和之前發(fā)生了改變,與之衍生的可能就是商家與用戶的糾紛。
注意:如果采用的是商家不能下架商品的方案,則這一點(diǎn)就不用驗(yàn)證(所以2、3兩點(diǎn)沒(méi)在流程圖上體現(xiàn)出來(lái))。
4. 是否支付成功
支付成功即生成待發(fā)貨訂單,立即鎖定庫(kù)存。
支付失敗則還是為待付款訂單,然后開(kāi)始倒計(jì)時(shí);一般平臺(tái)商品庫(kù)存充足倒計(jì)時(shí)可長(zhǎng)一點(diǎn),對(duì)用戶會(huì)友好一點(diǎn),庫(kù)存不怎么充足或者平臺(tái)上入駐的小商家居多,平臺(tái)無(wú)法控制商家的庫(kù)存或者下架之類的操作;
如果也考慮到時(shí)間給用戶帶來(lái)的緊迫感的話,時(shí)間可以短一些;時(shí)間一到訂單狀態(tài)就應(yīng)變成已關(guān)閉狀態(tài),用戶無(wú)法支付,同時(shí)釋放庫(kù)存。
訂單成功支付后就需要商家處理訂單了,同時(shí)用戶也可以進(jìn)行一些操作,下一篇“處理訂單”。
本文由 @張璨 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。
題圖來(lái)自Unsplash,基于CC0協(xié)議。
期待老師寫關(guān)于結(jié)構(gòu)化能力、商業(yè)洞察、需求洞察、抽象能力、架構(gòu)能力、逆向思維等方面的文章!?。?/p>
為什么會(huì)有鎖定庫(kù)存和扣除庫(kù)存兩種狀態(tài),他們起到的效果其實(shí)是一樣的,都是讓前端顯示的可售庫(kù)存-1,其他用戶無(wú)法購(gòu)買到這件商品,那么是不是可以在提交訂單的時(shí)候就扣除庫(kù)存,而不是鎖定庫(kù)存,如果訂單取消,那么再歸還庫(kù)存,這樣還能少一個(gè)狀態(tài),簡(jiǎn)化流程,也可避免一些該狀態(tài)下的衍生問(wèn)題。
鎖定可以恢復(fù),但是扣除就不能恢復(fù)
扣除也可以恢復(fù)呀,反正記錄了扣除的數(shù)量,到時(shí)候相應(yīng)的增加對(duì)應(yīng)數(shù)量不就等于恢復(fù)嗎
1、支付后,多個(gè)子訂單的變成“待發(fā)貨”狀態(tài),那要是其中部分商家發(fā)貨了,部分商家還沒(méi)有發(fā)貨。請(qǐng)問(wèn)母訂單的訂單狀態(tài)時(shí)什么?
已發(fā)貨?待發(fā)貨?部分發(fā)貨?
2、那如果部分發(fā)貨中有的商品已經(jīng)收貨了是待評(píng)價(jià),部分商品待收貨,那子訂單狀態(tài)是什么?
待評(píng)價(jià)?待收貨?部分收貨?
2-1、母訂單的狀態(tài)又是什么?
3、如果收貨的商品中有部分(數(shù)量)售后,那又會(huì)不會(huì)影響到商品的在狀態(tài)顯示?如果會(huì),那又會(huì)不會(huì)繼續(xù)傳承到子訂單和母訂單的狀態(tài)呢?
支付后拆單是對(duì)不同商家一并支付的情況(購(gòu)物車下單),所以拆了之后就沒(méi)有你說(shuō)的這個(gè)母訂單了
所以你下面的這些問(wèn)題不成立了
http://m.codemsi.com/pd/2976600.html
http://m.codemsi.com/pd/3298531.html
你可以看一下我的這兩篇文章
待付款就拆單了,不然后面任意選擇性支付,和未支付已支付的商品處理賊煩.一個(gè)總單對(duì)應(yīng)子單,支付后未支付的形成新的一個(gè)總單
對(duì)頭,從后端的角度來(lái)說(shuō)處理起來(lái)確實(shí)很煩
是否能下架商品第三種方案:
可以下架,后續(xù)用戶下單時(shí)提示商品已下架無(wú)法下單,向商家端提供已生成訂單且處于待支付狀態(tài)的訂單數(shù)量,讓商家決定這部分訂單是否可付款繼續(xù)流轉(zhuǎn)下去。
考慮場(chǎng)景:下架商品時(shí),因?yàn)榇Ц队唵巫詣?dòng)取消時(shí)長(zhǎng)為30分鐘,這30分鐘內(nèi)已經(jīng)生成大量待支付訂單,針對(duì)于這部分訂單商家允許客戶繼續(xù)支付及后續(xù)流轉(zhuǎn)。
對(duì),相當(dāng)于就是加了一個(gè)判斷,支付時(shí)間大于下架時(shí)間的訂單會(huì)標(biāo)注出來(lái),商家可以看見(jiàn),如果要取消可以主動(dòng)與用戶聯(lián)系
比如,用戶3點(diǎn)59提交了訂單,此時(shí)創(chuàng)建了訂單,4點(diǎn)01支付成功,但4點(diǎn)00的時(shí)候商家下架了該商品,此筆訂單就標(biāo)注出來(lái)告知用戶
作者寫鎖定庫(kù)存這塊,我覺(jué)得支付后鎖定庫(kù)存適合“搶購(gòu)或者大型活動(dòng)”時(shí)使用,讓用戶有緊迫感,不趕緊支付商品就有被搶光的風(fēng)險(xiǎn);正常場(chǎng)景還是提交就鎖定更友好;
是的,所以得看具體的業(yè)務(wù)場(chǎng)景;如果一個(gè)平臺(tái)有兩種鎖庫(kù)存的方式,不同的業(yè)務(wù)場(chǎng)景一定要提醒清楚用戶,不然會(huì)引起糾紛的,畢竟涉及到錢的事
當(dāng)年淘寶就因?yàn)檫@個(gè)事情好像爭(zhēng)執(zhí)了很久…
寫的很棒!
謝謝,哈哈
用戶側(cè)拆單的原因是什么?
不是用戶拆單,是用戶下單的時(shí)候可能選擇了多個(gè)商家的商品一起下單,平臺(tái)會(huì)進(jìn)行拆單。平臺(tái)最終是要把訂單推送給商家,由商家聯(lián)系發(fā)貨。結(jié)算的時(shí)候也是和商家單獨(dú)進(jìn)行結(jié)算的
是這樣的,用戶側(cè)也拆單的主要原因我認(rèn)為是,因?yàn)槊總€(gè)商家是單獨(dú)發(fā)貨,用戶更關(guān)心訂單的物流情況,拆單之后查看物流、聯(lián)系賣家操作上會(huì)更方便一些,頁(yè)面更清楚一些,其他的原因我暫時(shí)就沒(méi)想到了
這樣對(duì)用戶來(lái)說(shuō)體驗(yàn)好嗎?
你的出發(fā)點(diǎn)是物流查詢,物流查詢可以以其他的方式展示啊,比如多個(gè)物流單號(hào),點(diǎn)擊以后進(jìn)入物流詳情頁(yè)中(可能有更優(yōu)的方案)
用戶側(cè)待付款訂單拆成多筆支付,這個(gè)就很扯了….購(gòu)物車?yán)锩娌痪褪嵌喙P訂單合并付款,你現(xiàn)在還要整成多筆待支付,會(huì)不會(huì)有點(diǎn)反人類….
用戶側(cè)拆單是根據(jù)商家來(lái)拆的,不同商家是不同的訂單,用戶側(cè)沒(méi)有子訂單的概念,也沒(méi)有說(shuō)待付款的需要拆成子訂單去付款
第一,商家發(fā)物流的情況有很多,比如一個(gè)商品拆分成多個(gè)包裹,多個(gè)商品合并成一個(gè)包裹進(jìn)行發(fā)貨,碰到這種情況查看物流的時(shí)候就需要告知用戶哪些商品在哪個(gè)包裹里,再加上多個(gè)商家,頁(yè)面就會(huì)更亂;功能是可以做,只是看有沒(méi)有必要
第二,既然商家端都拆了,用戶端拆了之后,取消訂單,確認(rèn)收貨等操作會(huì)更清晰一些,現(xiàn)在主流的設(shè)計(jì)都是確認(rèn)收貨/取消訂單都是對(duì)訂單而不是單個(gè)商品,如果多商家都放在一個(gè)訂單里,比如有些商家一直沒(méi)貨需要很久才發(fā)貨,另外一個(gè)商家的貨早就收到了,確認(rèn)收貨就確認(rèn)不了,商家也就結(jié)算不了,如果設(shè)計(jì)成能對(duì)單個(gè)商家收貨,那這不更亂了嗎,既然如此,商家看到的是子訂單,用戶看到的也是子訂單
第三,在后端代碼那里,一般都是提交訂單之后,就創(chuàng)建訂單,這個(gè)時(shí)候就需要拆分成子訂單,寫入數(shù)據(jù)庫(kù),而不是支付之后才拆,如果是支付之后再拆,那么待付款的訂單就進(jìn)入不了商家后臺(tái),也就不能進(jìn)行訂單改價(jià)等操作,說(shuō)到這里,訂單改價(jià)也是影響用戶端拆分訂單的因素之一,支付只能對(duì)訂單支付,如果訂單處于待付款的時(shí)候不拆,商家改價(jià)在后端邏輯來(lái)說(shuō)就會(huì)很麻煩,功能是可以做,只是看有沒(méi)有必要,簡(jiǎn)單的事就是直接一拆就好了,如果不拆反而會(huì)衍生很多問(wèn)題,就需要做更多的事去解決
文章里面說(shuō)的是:用戶在客戶端上看到的是多個(gè)子訂單,如果沒(méi)付款,是需要對(duì)子訂單單獨(dú)付款的
如果是沒(méi)付款,單從用戶端來(lái)說(shuō),的確不該拆單!
在后端代碼那里,一般都是提交訂單之后,就創(chuàng)建訂單,這個(gè)時(shí)候就需要拆分成子訂單,寫入數(shù)據(jù)庫(kù),而不是支付之后才拆,如果是支付之后再拆,那么待付款的訂單就進(jìn)入不了商家后臺(tái),也就不能進(jìn)行訂單改價(jià)等操作,訂單改價(jià)也是影響用戶端拆分訂單的因素之一,支付只能對(duì)訂單支付,如果訂單處于待付款的時(shí)候不拆,商家改價(jià)在后端邏輯來(lái)說(shuō)就會(huì)很麻煩,功能是可以做,只是看有沒(méi)有必要,簡(jiǎn)單的事就是直接一拆就好了,如果不拆反而會(huì)衍生很多問(wèn)題,就需要做更多的事去解決
每個(gè)電商平臺(tái)都不一樣,有的會(huì)記錄待支付的訂單狀態(tài)(PC),有的只會(huì)記錄支付取消的狀態(tài),但是不管是記錄待支付的狀態(tài)還是支付取消的狀態(tài),對(duì)于后端來(lái)說(shuō),必然會(huì)拆單。但是對(duì)于APP用戶來(lái)說(shuō),他還沒(méi)完成支付,沒(méi)必要拆單,而且你拆單就意味著, 之前的一筆訂單,他再次支付,需要支付N次(N個(gè)店鋪),這個(gè)體驗(yàn)相都不用想,肯定不好。
像淘寶京東都是待付款時(shí)就會(huì)拆單,可以自己試一下,他們?yōu)槭裁催@么設(shè)計(jì)我不清楚,但是可以確定的是他們一定是踩過(guò)各種坑才這樣做的,對(duì)于我們來(lái)說(shuō)只能借鑒他們的做法,這樣對(duì)公司肯定是最負(fù)責(zé)的,然后自己只能盡量去分析他們?yōu)槭裁催@么做,為什么不這么做,分清楚哪些是必須這樣做,哪些是這樣做更好,像用戶端拆單這塊,我認(rèn)為是這樣做更好,暫時(shí)沒(méi)找到必須這樣做的理由
京東淘寶在沒(méi)支付完成之前,用戶看到的永遠(yuǎn)只有一個(gè)訂單,不會(huì)分開(kāi)顯示的。
這么說(shuō)吧,拆單是必然的,但是在沒(méi)支付完成前,用戶是感知不到的。我覺(jué)得我們想法差不多,但是沒(méi)溝通清楚!
我剛剛試了一下,待付款的訂單,淘寶會(huì)拆,京東不會(huì)拆,但是淘寶支持訂單改價(jià),京東我查了一下好像不支持;淘寶訂單的自動(dòng)取消是24小時(shí),京東是30分鐘,我猜想可能京東是支付后才后臺(tái)進(jìn)行拆單,這時(shí)子訂單才會(huì)進(jìn)入商家后臺(tái),可能業(yè)務(wù)場(chǎng)景不一樣吧,京東希望用戶盡快付款,而淘寶會(huì)留時(shí)間給用戶與商家協(xié)商
說(shuō)到支付N次這個(gè)問(wèn)題,哪種方案更好還是要看具體業(yè)務(wù)場(chǎng)景,就像我剛剛說(shuō)的,比如要改價(jià)之類的操作,肯定下單就拆的方案會(huì)好很多,當(dāng)然在支付頁(yè)面就退出的發(fā)生頻次肯定比改價(jià)的場(chǎng)景多得多,但是我認(rèn)為用戶并不會(huì)因?yàn)檫@一小點(diǎn)就放棄這個(gè)平臺(tái),因?yàn)檫@是用戶自己的選擇
當(dāng)然,我的想法肯定有一定的局限性,這些都是我們的推測(cè),我也只能盡量去推測(cè)他們?yōu)槭裁催@么做的意圖 ??
我認(rèn)為這個(gè)和改價(jià)的關(guān)系不是很大,更重要的是淘寶和京東的經(jīng)營(yíng)模式不太一樣,
不用去推測(cè)他們的意圖,你要考慮你準(zhǔn)備給用戶什么樣的體驗(yàn)
用戶一次能干完的事情,你非要用戶干好多遍,而且是重復(fù)的,是不是make trouble了?
設(shè)計(jì)不能完美解決用戶的訴求,但是也別制作麻煩啊
第一,推測(cè)大廠的產(chǎn)品意圖再來(lái)設(shè)計(jì),對(duì)公司來(lái)說(shuō)是最負(fù)責(zé)的,因?yàn)榇髲S肯定踩過(guò)無(wú)數(shù)的坑才會(huì)最終成型,比如我們平臺(tái)的經(jīng)營(yíng)模式更接近于淘寶,而在邏輯設(shè)計(jì)上更偏向于京東,如果不去推測(cè)他們意圖,只知其然而不知其所以然,如果在流程上出問(wèn)題了,這個(gè)責(zé)任就大了,雖然自己的推測(cè)不一定是對(duì)的,但是至少自己思考過(guò)了,權(quán)衡過(guò)了,而不是盲目的去借鑒
第二,像待付款訂單拆單,看起來(lái)只關(guān)乎用戶體驗(yàn),背后說(shuō)大點(diǎn)和平臺(tái)的定位有關(guān),不然為什么淘寶就拆了,難道淘寶的產(chǎn)品經(jīng)理不會(huì)考慮用戶體驗(yàn)嗎?至少在我看來(lái),我會(huì)同時(shí)關(guān)注數(shù)據(jù)的完整性,后端的開(kāi)發(fā)邏輯,數(shù)據(jù)庫(kù)的結(jié)構(gòu)設(shè)計(jì),而不是僅僅考慮用戶的操作體驗(yàn);比如提交訂單后訂單其實(shí)是拆了,這個(gè)時(shí)候如果用戶端不拆實(shí)際上就是套了一層殼子,看起來(lái)是一層殼子,涉及到金錢的功能,背后的邏輯都很復(fù)雜,而且容易出錯(cuò),像我們之前開(kāi)發(fā)時(shí)間相當(dāng)緊,做個(gè)權(quán)衡,現(xiàn)階段沒(méi)必要,用戶也不會(huì)因?yàn)闆](méi)有這層殼子而放棄我們平臺(tái)
??