宋思華
【摘 要】文章研究基于微信公眾平臺(tái)運(yùn)行,從微信公眾號(hào)進(jìn)入,頁面前端采用HTML5、CSS3和JQuery技術(shù),頁面后臺(tái)通過PHP實(shí)現(xiàn),數(shù)據(jù)庫采用MYSQL,通過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)營自己的公眾號(hào)平臺(tái)。
【關(guān)鍵詞】微信公眾平臺(tái);訂餐系統(tǒng);分布式緩存;云打印
【中圖分類號(hào)】TP311 【文獻(xiàn)標(biāo)識(shí)碼】A 【文章編號(hào)】1674-0688(2019)09-0096-02
微信自2011年推出至今已擁有超過10億用戶,逐漸成為大眾在移動(dòng)互聯(lián)網(wǎng)時(shí)代的生活方式。背倚龐大的用戶基礎(chǔ),微信公眾平臺(tái)的內(nèi)容產(chǎn)出與消費(fèi)量已經(jīng)非常可觀,各個(gè)企業(yè)紛紛在微信平臺(tái)開設(shè)自己的公眾號(hào),用于宣傳、推廣、銷售等。本文基于微信公眾平臺(tái),開發(fā)設(shè)計(jì)可以在電子移動(dòng)端使用的網(wǎng)上訂餐系統(tǒng),方便商家的餐品推廣、銷售及客戶的購買。
1 系統(tǒng)總體功能設(shè)計(jì)
1.1 總體設(shè)計(jì)
該系統(tǒng)最終在互聯(lián)網(wǎng)環(huán)境進(jìn)行推廣,預(yù)計(jì)接入商戶1萬家,總用戶量為100萬。用戶通過微信公眾號(hào)關(guān)注商家后,通過自定義菜單入口,使用HTML5頁面展示店鋪訂餐頁面。商戶通過PC端配置自己的店鋪、對(duì)公眾號(hào)進(jìn)行自定義配置。系統(tǒng)使用PHP語言、MYSQL數(shù)據(jù)庫開發(fā)訂餐系統(tǒng),部署在阿里云平臺(tái),為商戶及公眾提供服務(wù)。
為保證用戶體驗(yàn),在高并發(fā)環(huán)境下也能保證用戶正常點(diǎn)餐、訂餐,系統(tǒng)使用分布式緩存REDIS來存儲(chǔ)用戶經(jīng)常訪問的數(shù)據(jù),減輕對(duì)數(shù)據(jù)庫查詢的壓力。商戶要實(shí)時(shí)獲取有哪些用戶來訂餐,及時(shí)備餐并配送,需要配備云打印機(jī)實(shí)時(shí)打印在線訂單,系統(tǒng)通過云平臺(tái)技術(shù),將用戶訂單存儲(chǔ)到消息隊(duì)列中,并監(jiān)聽各商戶的云打印機(jī)在線情況,將訂單推送到云打印機(jī)進(jìn)行打印。
1.2 功能說明
該系統(tǒng)功能主要分?jǐn)?shù)據(jù)層、服務(wù)層和表現(xiàn)層。
數(shù)據(jù)層主要通過MYSQL數(shù)據(jù)庫來存儲(chǔ)數(shù)據(jù),在數(shù)據(jù)量較大時(shí),通過分庫分表的方式來保存數(shù)據(jù)。用REDIS來緩存訪問率較高的數(shù)據(jù),提升系統(tǒng)訪問速度,降低數(shù)據(jù)庫服務(wù)器I/O壓力。
服務(wù)層對(duì)每個(gè)商戶及顧客提供統(tǒng)一服務(wù)接口,是系統(tǒng)的核心層,主要包括公眾號(hào)服務(wù)、訂餐服務(wù)、營銷服務(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)開發(fā)、系統(tǒng)間進(jìn)行數(shù)據(jù)交換的主流數(shù)據(jù)格式。在本系統(tǒng)與微信公眾平臺(tái)的交互中,所有接口都使用了JSON格式,例如公眾號(hào)通過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)起來,滿足這種規(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查詢語句發(fā)送到數(shù)據(jù)庫,將數(shù)據(jù)庫返回的數(shù)據(jù)組裝成前臺(tái)需要的數(shù)據(jù)并返回給前臺(tái),頁面再對(duì)這些數(shù)據(jù)進(jìn)行渲染,最終展示給用戶。
在用戶量不大的情況下,使用這種方式?jīng)]有性能上的問題,但在用戶量大的情況下,后臺(tái)會(huì)頻繁向數(shù)據(jù)庫發(fā)送查詢請(qǐng)求,最終會(huì)達(dá)到數(shù)據(jù)庫IO上限,造成查詢速度慢,用戶得到的響應(yīng)慢。
為保證高并發(fā)請(qǐng)求下用戶的體驗(yàn),在本訂餐平臺(tái)中,對(duì)大量短時(shí)間內(nèi)不會(huì)頻繁變化的數(shù)據(jù),例如各餐飲店的產(chǎn)品分類、套餐信息、飯菜信息,為提高系統(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ù)庫中。
結(jié)合系統(tǒng)特點(diǎn),本系統(tǒng)采用REDIS存儲(chǔ)的NoSQL數(shù)據(jù)庫作為緩存來使用,緩存高頻次訪問的數(shù)據(jù),降低數(shù)據(jù)庫IO,同時(shí)滿足系統(tǒng)的分布式架構(gòu),做SESSION共享。
2.4 支付功能
移動(dòng)支付是互聯(lián)網(wǎng)時(shí)代的新型支付方式,用戶在通過微信公眾平臺(tái)進(jìn)行訂餐后,可選擇在線支付或貨到付款,本系統(tǒng)支持微信支付。微信支付使用H5支付,是指商戶在微信客戶端外的移動(dòng)端網(wǎng)頁展示商品或服務(wù),用戶在前述頁面確認(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ī)不在線,從而無法推送消息。如果出現(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。例如:獲取訂單列表接口,通過post方式請(qǐng)求指定接口地址http://www.xxxx.com/printer/getOrderList,傳入TOKEN等權(quán)限認(rèn)證信息后就可以取到商戶的訂單列表。
3 結(jié)語
本文主要介紹了基于微信公眾平臺(tái)訂餐系統(tǒng)的總體設(shè)計(jì)、系統(tǒng)功能和關(guān)鍵技術(shù)。系統(tǒng)開發(fā)者對(duì)商戶實(shí)現(xiàn)了B2B的運(yùn)行模式,而商戶對(duì)客戶則是B2C的營銷模式。系統(tǒng)主要提供餐品的管理和訂餐功能的實(shí)現(xiàn),線下的操作如送餐則由商戶自主完成。
通過實(shí)際運(yùn)營,發(fā)現(xiàn)系統(tǒng)有如下可改進(jìn)方面:{1}餐品在配送過程中的定位功能未實(shí)現(xiàn),使得客戶不能實(shí)時(shí)獲取餐品位置信息。{2}安全問題。網(wǎng)絡(luò)中數(shù)據(jù)的傳輸未進(jìn)行加密,可能會(huì)有安全隱患。
該系統(tǒng)仍需根據(jù)實(shí)際運(yùn)營情況進(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)開發(fā)實(shí)戰(zhàn)與應(yīng)用案例[M].北京:清華大學(xué)出版社,2015.
[3]易偉.微信公眾平臺(tái)服務(wù)號(hào)開發(fā)[M].北京:機(jī)械工業(yè)出版社,2014.