劉佳龍 王卓 胡志慧
摘 要:鄉(xiāng)村振興助農(nóng)直銷超市通過采集鄉(xiāng)村特色農(nóng)產(chǎn)品的相關(guān)信息,提供面向消費者的直銷平臺,為鄉(xiāng)村經(jīng)濟(jì)注入新動力。系統(tǒng)基于Spring Boot開發(fā),采用MySQL開源數(shù)據(jù)庫進(jìn)行數(shù)據(jù)的存儲,訂單支付通過接入微信支付實現(xiàn)。微信支付設(shè)計利用分布式鎖來進(jìn)行并發(fā)的控制,保證系統(tǒng)的付款安全。
關(guān)鍵詞:直銷平臺;Spring Boot;微信支付
一、引言
伴隨互聯(lián)網(wǎng)的高速發(fā)展,越來越多的內(nèi)容以全新的方式呈現(xiàn)在人們面前。以農(nóng)業(yè)為特色的電商平臺,將發(fā)揮互聯(lián)網(wǎng)科技的優(yōu)勢,讓農(nóng)民告別由中間商統(tǒng)一收購的傳統(tǒng)銷售模式,迎來了面向消費者的直銷模式[1]。此模式既可助力鄉(xiāng)村經(jīng)濟(jì)的發(fā)展,同時又解決了以往農(nóng)民發(fā)愁的滯銷或壓價問題。鄉(xiāng)村振興助農(nóng)直銷超市平臺設(shè)計采用前后端分離的思想,后端服務(wù)架構(gòu)模塊化,不同層面做出相應(yīng)的功能,采用接口方式銜接所有模塊,前后端交互通過HTTP協(xié)議進(jìn)行交互,前端結(jié)合VUE框架快速構(gòu)建交互接口,規(guī)范統(tǒng)一,后端只需要滿足基本的數(shù)據(jù)結(jié)構(gòu)即可。既解決系統(tǒng)的穩(wěn)定性,也提高了用戶的易用性。
二、平臺目標(biāo)與內(nèi)容
主要對線上平臺的設(shè)計做出詳細(xì)說明,使用Web技術(shù)做到商品的信息展示交易。同時在技術(shù)上,將會結(jié)合網(wǎng)絡(luò),數(shù)據(jù)庫等技術(shù),同時使用Spring Boot框架構(gòu)建項目。項目采用前后端分離開發(fā)模式,前端會使用VUE框架來渲染數(shù)據(jù),同時結(jié)合第三方組件進(jìn)行通信等行為。同時采用“JSON”格式來進(jìn)行前后端的交互[2]。所以系統(tǒng)主要有這幾個目標(biāo):
結(jié)合互聯(lián)網(wǎng)流行的技術(shù)來處理相應(yīng)的問題,比如采用Redis作為分布式鎖,解決微服務(wù)集群的并發(fā)問題。同時整合這些中間件來融入系統(tǒng),更為便捷的搭建整個系統(tǒng)。
對用戶的需求分析,主要是功能性的研究設(shè)計與實現(xiàn),主要設(shè)計商品的展示、全局的搜索、分頁展示、輪播圖效果展示、訂單管理、購物車管理、用戶信息等等功能模塊。最后將所有的功能模塊整合形成一個完整的閉環(huán),實現(xiàn)整個系統(tǒng)的電商平臺。
對每個功能點的測試[3],功能性的業(yè)務(wù)測試,完整的流程的處理。非功能性的用戶交互邏輯行為體驗測試,做出最佳的調(diào)整。
三、訂單支付功能設(shè)計
訂單付款是一個核心的業(yè)務(wù),涉及到微信支付,同時由于開發(fā)采用局域網(wǎng),所以還會涉及到內(nèi)網(wǎng)穿透。訂單作為用戶交易的核心,為了保證安全和可靠,也做了一些業(yè)務(wù)上的邏輯梳理,盡可能的保障交易的安全。
(一)業(yè)務(wù)流程
用戶首先是通過購物車選中相應(yīng)的商品,所以依然涉及到身份的校驗。對于選中的商品點擊結(jié)算即可進(jìn)入訂單頁面,這個時候的訂單頁面是需要調(diào)整信息的,當(dāng)然也可以不進(jìn)行調(diào)整,直接采用默認(rèn)的數(shù)據(jù)即可。準(zhǔn)備數(shù)據(jù)進(jìn)行完成之后才進(jìn)行付款,這里付款可能涉及到的操作很多。第一,付款成功且收到微信的通知,這是正常的付款流程,直接改變訂單的狀態(tài)。第二,付款成功但沒有收到微信通知,這可能是由于網(wǎng)絡(luò)的擁塞造成,這個時候由于后端設(shè)置了自檢,會不斷的查詢數(shù)據(jù)庫超過30分鐘的訂單,所以當(dāng)超時時候不能直接取消訂單,而是需要再次向微信發(fā)送確認(rèn)訂單是否支付,如果沒有支付則取消,支付了就改變訂單狀態(tài)為已支付。第三,未支付,對于直接沒有付款的訂單,依然會向微信確認(rèn),再取消相應(yīng)的訂單。流程圖如1所示。
(二)類結(jié)構(gòu)設(shè)計
這里提供了兩個接口,一個是OrderController,這個對外提供的接口是交給前端調(diào)用的,后端接收到相應(yīng)的訂單數(shù)據(jù)進(jìn)行業(yè)務(wù)上的處理,而PayController是被微信調(diào)用的,微信成功收到付款就會回調(diào)這個接口,同時由于需要接入微信支付,所以這里依賴了微信的一些接口,同時需要自己去實現(xiàn)配置這個接口,體現(xiàn)在類圖中的WXPayConfig,同時相關(guān)的配置交給實現(xiàn)類WxPayConfig。這個類只簡單的返回了一些微信需要的認(rèn)證數(shù)據(jù)。最后在業(yè)務(wù)處理方面都交給了OrderService這個接口規(guī)范并由OrderServiceImpl實現(xiàn)具體業(yè)務(wù)流程。由于該業(yè)務(wù)涉及的表結(jié)構(gòu)較多,所以這里聚合了四個數(shù)據(jù)庫操作的Mapper接口。
最后,需要指出一點,這里的業(yè)務(wù)中會有微信回調(diào)的接口,涉及到公網(wǎng)的交互,我們知道,我們自己的電腦接入的都是局域網(wǎng),雖然可以訪問公網(wǎng),但是公網(wǎng)是無法訪問我們的IP的,所以這里需要做一個內(nèi)網(wǎng)穿透,穿透的方式有很多,這里就不再介紹。如果將該服務(wù)部署在公有云服務(wù)器,則直接配置云服務(wù)器的IP即可。相關(guān)偽碼如下:
(1)分布式鎖偽代碼如下:
HashMap map = null;
/**
* 進(jìn)行加鎖,對每一件商品進(jìn)行校驗.
* 使用雙重校驗,如果庫存不足不需要加鎖直接返回,加鎖之后同樣需要再次* 校驗。
*/
0 校驗庫存
1 加鎖
try{
if(是否上鎖){
2 校驗庫存
if(庫存充){
3 保存訂單
4 保存快照
5 修改庫存
6 刪除購物
...
}
}
}catch(Exception e){
}finally{
7 釋放鎖
}
return map;
(2)超時取消偽代碼:
//定時任務(wù),每隔5秒執(zhí)行一次
public void checkAndCloseOrder() throws Exception {
//1. 向數(shù)據(jù)庫查詢超時訂單
//2. 向微信平臺發(fā)送訂單信息,查看是否已支付
if(是否已經(jīng)支付){
//2.1支付成功,說明是網(wǎng)絡(luò)原因,則正常修改訂單狀態(tài)
}else if (是否沒有支付){
//2.2. 如果確實是沒有支付,就發(fā)送給微信關(guān)閉這個支付鏈接
//2.3 修改orders表中該訂單信息(超時未支付)
}
(三)效果界面
該效果由兩個部分組成,一個是訂單頁面,如圖2所示。另一個是支付頁面,如圖3所示。至于支付成功的頁面只是在支付頁面上多了支付成功文本提示,所以這里不再重復(fù)給出。
四、總結(jié)
隨著互聯(lián)網(wǎng)技術(shù)發(fā)展,人們越來越關(guān)注消費體驗,整個系統(tǒng)依然還有很大的調(diào)整空間。例如系統(tǒng)目前只是基于Maven進(jìn)行了簡單的劃分,沒有使用微服務(wù)的架構(gòu)。同時訂單支付還只設(shè)計接入了微信支付,后面還可以考慮接入支付寶等平臺。未來還有很多可以進(jìn)一步優(yōu)化的地方,同時技術(shù)在飛速的發(fā)展,這也促使我們需要不斷地學(xué)習(xí)來跟上發(fā)展的腳步。
參考文獻(xiàn):
[1]王敏杰,馬云飛,蔡淑敏,于淼.2022新零售風(fēng)口[N].國際金融報,2022-01-24(005).
[2]溫立輝.AJAX異步交互技術(shù)淺析[J].山東工業(yè)技術(shù),2017(04):213.
[3]張輝.Web系統(tǒng)的性能測試技術(shù)研究[J].計算機時代,2021(10):28-31.