宋思華
【摘 要】文章研究基于微信公眾平臺(tái)運(yùn)行,從微信公眾號(hào)進(jìn)入,頁(yè)面前端采用HTML5、CSS3和JQuery技術(shù),頁(yè)面后臺(tái)通過(guò)PHP實(shí)現(xiàn),數(shù)據(jù)庫(kù)采用MYSQL,通過(guò)JSON格式與微信平臺(tái)進(jìn)行數(shù)據(jù)交換。為滿足高并發(fā)引入REDIS,為實(shí)現(xiàn)與訂單打印的解耦引入消息隊(duì)列,保證了高并發(fā)、大數(shù)據(jù)量下的訂餐系統(tǒng)的正常運(yùn)轉(zhuǎn)。該系統(tǒng)為多商戶版本,需每個(gè)商戶獨(dú)自運(yùn)營(yíng)自己的公眾號(hào)平臺(tái)。
【關(guān)鍵詞】微信公眾平臺(tái);訂餐系統(tǒng);分布式緩存;云打印
【中圖分類(lèi)號(hào)】TP311 【文獻(xiàn)標(biāo)識(shí)碼】A 【文章編號(hào)】1674-0688(2019)09-0096-02
微信自2011年推出至今已擁有超過(guò)10億用戶,逐漸成為大眾在移動(dòng)互聯(lián)網(wǎng)時(shí)代的生活方式。背倚龐大的用戶基礎(chǔ),微信公眾平臺(tái)的內(nèi)容產(chǎn)出與消費(fèi)量已經(jīng)非??捎^,各個(gè)企業(yè)紛紛在微信平臺(tái)開(kāi)設(shè)自己的公眾號(hào),用于宣傳、推廣、銷(xiāo)售等。本文基于微信公眾平臺(tái),開(kāi)發(fā)設(shè)計(jì)可以在電子移動(dòng)端使用的網(wǎng)上訂餐系統(tǒng),方便商家的餐品推廣、銷(xiāo)售及客戶的購(gòu)買(mǎi)。
1 系統(tǒng)總體功能設(shè)計(jì)
1.1 總體設(shè)計(jì)
該系統(tǒng)最終在互聯(lián)網(wǎng)環(huán)境進(jìn)行推廣,預(yù)計(jì)接入商戶1萬(wàn)家,總用戶量為100萬(wàn)。用戶通過(guò)微信公眾號(hào)關(guān)注商家后,通過(guò)自定義菜單入口,使用HTML5頁(yè)面展示店鋪訂餐頁(yè)面。商戶通過(guò)PC端配置自己的店鋪、對(duì)公眾號(hào)進(jìn)行自定義配置。系統(tǒng)使用PHP語(yǔ)言、MYSQL數(shù)據(jù)庫(kù)開(kāi)發(fā)訂餐系統(tǒng),部署在阿里云平臺(tái),為商戶及公眾提供服務(wù)。
為保證用戶體驗(yàn),在高并發(fā)環(huán)境下也能保證用戶正常點(diǎn)餐、訂餐,系統(tǒng)使用分布式緩存REDIS來(lái)存儲(chǔ)用戶經(jīng)常訪問(wèn)的數(shù)據(jù),減輕對(duì)數(shù)據(jù)庫(kù)查詢的壓力。商戶要實(shí)時(shí)獲取有哪些用戶來(lái)訂餐,及時(shí)備餐并配送,需要配備云打印機(jī)實(shí)時(shí)打印在線訂單,系統(tǒng)通過(guò)云平臺(tái)技術(shù),將用戶訂單存儲(chǔ)到消息隊(duì)列中,并監(jiān)聽(tīng)各商戶的云打印機(jī)在線情況,將訂單推送到云打印機(jī)進(jìn)行打印。
1.2 功能說(shuō)明
該系統(tǒng)功能主要分?jǐn)?shù)據(jù)層、服務(wù)層和表現(xiàn)層。
數(shù)據(jù)層主要通過(guò)MYSQL數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)數(shù)據(jù),在數(shù)據(jù)量較大時(shí),通過(guò)分庫(kù)分表的方式來(lái)保存數(shù)據(jù)。用REDIS來(lái)緩存訪問(wèn)率較高的數(shù)據(jù),提升系統(tǒng)訪問(wèn)速度,降低數(shù)據(jù)庫(kù)服務(wù)器I/O壓力。
服務(wù)層對(duì)每個(gè)商戶及顧客提供統(tǒng)一服務(wù)接口,是系統(tǒng)的核心層,主要包括公眾號(hào)服務(wù)、訂餐服務(wù)、營(yíng)銷(xiāo)服務(wù)、緩存服務(wù)、配置服務(wù)、登錄鑒權(quán)、支付服務(wù)和打印服務(wù)等。
表現(xiàn)層分商家PC端和顧客公眾號(hào)端。
2 關(guān)鍵技術(shù)
2.1 JSON格式
JSON是一種數(shù)據(jù)交換格式,它與XML相比更輕量,是當(dāng)前各系統(tǒng)開(kāi)發(fā)、系統(tǒng)間進(jìn)行數(shù)據(jù)交換的主流數(shù)據(jù)格式。在本系統(tǒng)與微信公眾平臺(tái)的交互中,所有接口都使用了JSON格式,例如公眾號(hào)通過(guò)API調(diào)用設(shè)置的菜單,自定義菜單配置樣例如下:
2.2 REST
REST是利用HTTP協(xié)議對(duì)互聯(lián)網(wǎng)資源進(jìn)行一致的命名規(guī)則定義,使得對(duì)數(shù)據(jù)的增刪改查操作與HTTP協(xié)議中的post、delete、put、get方法對(duì)應(yīng)起來(lái),滿足這種規(guī)則的接口則為Restful風(fēng)格的接口。Restful接口使得各系統(tǒng)間進(jìn)行接口調(diào)用時(shí)按照命名約定進(jìn)行調(diào)用,減少溝通成本。本系統(tǒng)中要與微信公眾平臺(tái)進(jìn)行交互,數(shù)據(jù)格式統(tǒng)一使用JSON格式,調(diào)用方式則統(tǒng)一使用REST接口。例如查詢某公眾號(hào)的當(dāng)前自定義菜單,則使用指定HTTP請(qǐng)求方式:?GET接口https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=ACCESS_TOKEN。
2.3 緩存
在傳統(tǒng)的數(shù)據(jù)請(qǐng)求中,比如用戶查看某店鋪現(xiàn)可訂餐的菜品,首先發(fā)送請(qǐng)求到后臺(tái),后臺(tái)接到請(qǐng)求后,根據(jù)請(qǐng)求參數(shù)組合SQL查詢語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù),將數(shù)據(jù)庫(kù)返回的數(shù)據(jù)組裝成前臺(tái)需要的數(shù)據(jù)并返回給前臺(tái),頁(yè)面再對(duì)這些數(shù)據(jù)進(jìn)行渲染,最終展示給用戶。
在用戶量不大的情況下,使用這種方式?jīng)]有性能上的問(wèn)題,但在用戶量大的情況下,后臺(tái)會(huì)頻繁向數(shù)據(jù)庫(kù)發(fā)送查詢請(qǐng)求,最終會(huì)達(dá)到數(shù)據(jù)庫(kù)IO上限,造成查詢速度慢,用戶得到的響應(yīng)慢。
為保證高并發(fā)請(qǐng)求下用戶的體驗(yàn),在本訂餐平臺(tái)中,對(duì)大量短時(shí)間內(nèi)不會(huì)頻繁變化的數(shù)據(jù),例如各餐飲店的產(chǎn)品分類(lèi)、套餐信息、飯菜信息,為提高系統(tǒng)響應(yīng)速度,系統(tǒng)會(huì)在初次請(qǐng)求這些信息時(shí)對(duì)這些信息進(jìn)行緩存,下一次其他用戶請(qǐng)求時(shí),平臺(tái)直接給出緩存的信息,提高用戶響應(yīng)速度。
同時(shí),在本訂餐平臺(tái)中,后臺(tái)服務(wù)進(jìn)行集群部署,用戶同時(shí)登錄時(shí)需要保持用戶SESSION,所以這些數(shù)據(jù)不能記錄到服務(wù)器SESSION中,而是需要存儲(chǔ)到一種中間數(shù)據(jù)庫(kù)中。
結(jié)合系統(tǒng)特點(diǎn),本系統(tǒng)采用REDIS存儲(chǔ)的NoSQL數(shù)據(jù)庫(kù)作為緩存來(lái)使用,緩存高頻次訪問(wèn)的數(shù)據(jù),降低數(shù)據(jù)庫(kù)IO,同時(shí)滿足系統(tǒng)的分布式架構(gòu),做SESSION共享。
2.4 支付功能
移動(dòng)支付是互聯(lián)網(wǎng)時(shí)代的新型支付方式,用戶在通過(guò)微信公眾平臺(tái)進(jìn)行訂餐后,可選擇在線支付或貨到付款,本系統(tǒng)支持微信支付。微信支付使用H5支付,是指商戶在微信客戶端外的移動(dòng)端網(wǎng)頁(yè)展示商品或服務(wù),用戶在前述頁(yè)面確認(rèn)使用微信支付時(shí),商戶發(fā)起本服務(wù)呼起微信客戶端進(jìn)行支付。
2.5 消息隊(duì)列
用戶在線訂餐后,訂單信息需要及時(shí)通知商戶,本系統(tǒng)方案為將訂單信息推送到商戶的云打印機(jī),實(shí)時(shí)出單。云打印機(jī)作為一個(gè)物聯(lián)網(wǎng)終端,是連接用戶與商戶的橋梁,但這個(gè)橋梁不是實(shí)時(shí)在線的,可能處于關(guān)機(jī)狀態(tài),或者因網(wǎng)絡(luò)原因,云打印機(jī)心跳包丟失,系統(tǒng)顯示云打印機(jī)不在線,從而無(wú)法推送消息。如果出現(xiàn)這種情況,系統(tǒng)會(huì)發(fā)生訂單未打印的情況,造成商戶的損失。為此,系統(tǒng)采用消息隊(duì)列方式,對(duì)訂單信息與打印指令進(jìn)行解耦。所有產(chǎn)生的訂單打印信息先放在消息隊(duì)列中,而在消息消費(fèi)者中只顯示云打印機(jī)在線的消息,從而保證打印機(jī)工作的可靠性。
2.6 云打印
云打印是以互聯(lián)網(wǎng)為基礎(chǔ),以小票打印機(jī)作為IOT平臺(tái)終端構(gòu)建的訂單打印系統(tǒng)。小票打印機(jī)以gprs或wlan方式接入互聯(lián)網(wǎng)平臺(tái),并向平臺(tái)進(jìn)行注冊(cè),注冊(cè)成功后以一定頻率向平臺(tái)發(fā)送心跳數(shù)據(jù),平臺(tái)接到心跳數(shù)據(jù)則認(rèn)為打印機(jī)在線。如消息隊(duì)列中有待打印的訂單信息,則推送到打印機(jī)進(jìn)行打印。打印機(jī)與IOT平臺(tái)的接口使用RESTAPI,數(shù)據(jù)交換格式使用JSON。例如:獲取訂單列表接口,通過(guò)post方式請(qǐng)求指定接口地址http://www.xxxx.com/printer/getOrderList,傳入TOKEN等權(quán)限認(rèn)證信息后就可以取到商戶的訂單列表。
3 結(jié)語(yǔ)
本文主要介紹了基于微信公眾平臺(tái)訂餐系統(tǒng)的總體設(shè)計(jì)、系統(tǒng)功能和關(guān)鍵技術(shù)。系統(tǒng)開(kāi)發(fā)者對(duì)商戶實(shí)現(xiàn)了B2B的運(yùn)行模式,而商戶對(duì)客戶則是B2C的營(yíng)銷(xiāo)模式。系統(tǒng)主要提供餐品的管理和訂餐功能的實(shí)現(xiàn),線下的操作如送餐則由商戶自主完成。
通過(guò)實(shí)際運(yùn)營(yíng),發(fā)現(xiàn)系統(tǒng)有如下可改進(jìn)方面:{1}餐品在配送過(guò)程中的定位功能未實(shí)現(xiàn),使得客戶不能實(shí)時(shí)獲取餐品位置信息。{2}安全問(wèn)題。網(wǎng)絡(luò)中數(shù)據(jù)的傳輸未進(jìn)行加密,可能會(huì)有安全隱患。
該系統(tǒng)仍需根據(jù)實(shí)際運(yùn)營(yíng)情況進(jìn)行用戶體驗(yàn)及安全性能方面的修改及功能的完善,為用戶提供更快捷、方便、安全的訂餐環(huán)境。
參 考 文 獻(xiàn)
[1]周建功.微信公眾號(hào)訂餐平臺(tái)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].軟件導(dǎo)刊,2016(8):74-76.
[2]陳小龍.微信公眾平臺(tái)開(kāi)發(fā)實(shí)戰(zhàn)與應(yīng)用案例[M].北京:清華大學(xué)出版社,2015.
[3]易偉.微信公眾平臺(tái)服務(wù)號(hào)開(kāi)發(fā)[M].北京:機(jī)械工業(yè)出版社,2014.