周功建
摘 要:從微信公眾號(hào)的開(kāi)放應(yīng)用入手,分析了基于公眾號(hào)訂餐平臺(tái)系統(tǒng)的基本邏輯結(jié)構(gòu)和前后臺(tái)功能模塊;詳述了微信自定義菜單的設(shè)置和創(chuàng)建、消息的接收和發(fā)送、圖文消息的后臺(tái)管理與動(dòng)態(tài)更新等功能模塊的實(shí)現(xiàn)方法;對(duì)系統(tǒng)進(jìn)行了效益評(píng)估,印證了微信訂餐的可行性及商業(yè)價(jià)值。
關(guān)鍵詞關(guān)鍵詞:微信訂餐; 微信公眾平臺(tái); PHP;開(kāi)發(fā)模式
DOIDOI:10.11907/rjdk.161155
中圖分類號(hào):TP319
文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-7800(2016)008-0074-03
0 引言
微信公眾平臺(tái)是騰訊公司在微信的基礎(chǔ)上新增的開(kāi)放功能模塊,用于實(shí)現(xiàn)微信與第三方平臺(tái)的對(duì)接,提供內(nèi)容更加豐富、功能更加全面的平臺(tái)服務(wù),相當(dāng)于一個(gè)輕量級(jí)的開(kāi)放App[1];開(kāi)發(fā)者可以基于開(kāi)放的數(shù)據(jù)接口進(jìn)行一些應(yīng)用開(kāi)發(fā),依托微信擴(kuò)展商業(yè)應(yīng)用。借助微信公眾號(hào)的多媒體消息群發(fā)功能,可將企業(yè)營(yíng)銷推廣活動(dòng)或廣告直接送達(dá)到關(guān)注用戶手機(jī),從而精準(zhǔn)定位營(yíng)銷,具有開(kāi)發(fā)簡(jiǎn)單、便捷、費(fèi)用低等特點(diǎn),應(yīng)用前景非常廣闊[1]。
1 系統(tǒng)分析
本系統(tǒng)在功能上繼承了傳統(tǒng)PC端的大部分功能,通過(guò)與微信公眾號(hào)綁定,結(jié)合電話訂餐和手機(jī)APP的靈活性,商家可以在微信公眾平臺(tái)上建立網(wǎng)上餐廳,消費(fèi)者只需關(guān)注微信公眾帳號(hào)[5]即可瀏覽某地域范圍內(nèi)眾多商家網(wǎng)上餐廳的菜品信息,輕松完成下單;系統(tǒng)通過(guò)微信公眾賬號(hào)的群發(fā)功能,為活動(dòng)商家推送圖文促銷信息,實(shí)現(xiàn)精準(zhǔn)營(yíng)銷。
2 系統(tǒng)設(shè)計(jì)
2.1 系統(tǒng)邏輯結(jié)構(gòu)
本系統(tǒng)采用典型的C/S網(wǎng)絡(luò)架構(gòu),由客戶端微信、微信公眾號(hào)、開(kāi)發(fā)者服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器4部分組成。正常工作時(shí),微信公眾號(hào)相當(dāng)于一個(gè)消息轉(zhuǎn)發(fā)器,微信用戶通過(guò)手機(jī)、平板等終端發(fā)送請(qǐng)求給微信公眾號(hào),微信公眾號(hào)收到用戶請(qǐng)求后將其組裝成XML 格式的數(shù)據(jù),通過(guò)POST 方式提交給開(kāi)發(fā)者服務(wù)器[3];開(kāi)發(fā)者服務(wù)器獲取請(qǐng)求后從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)并響應(yīng)給微信公眾號(hào),微信公眾號(hào)再將數(shù)據(jù)響應(yīng)給用戶,從而完成訂餐,如圖1所示。
(1)微信公眾號(hào):作為引流的數(shù)據(jù)入口,一方面為關(guān)注用戶提供一個(gè)瀏覽界面和訂餐菜單,實(shí)現(xiàn)用戶通過(guò)移動(dòng)微信端選擇餐廳、瀏覽菜品、下單;另一方面為商家用戶提供一個(gè)在線餐廳展示界面,接受用戶瀏覽和訂餐,并群發(fā)推送促銷信息,實(shí)現(xiàn)精準(zhǔn)營(yíng)銷。
(2)開(kāi)發(fā)者服務(wù)器:所有業(yè)務(wù)處理模塊全在此實(shí)現(xiàn),是整體應(yīng)用系統(tǒng)建設(shè)的基礎(chǔ)保障。一方面接收并處理用戶請(qǐng)求,為用戶提供在線注冊(cè)、登陸、購(gòu)買、下單等功能;另一方面為商家提供管理后臺(tái),在PC端以網(wǎng)頁(yè)形式展現(xiàn),包括添加和刪減食物、處理訂單、對(duì)注冊(cè)用戶進(jìn)行分組管理、對(duì)后臺(tái)數(shù)據(jù)庫(kù)進(jìn)行修改和維護(hù)等。
(3)數(shù)據(jù)庫(kù)服務(wù)器:用于存儲(chǔ)各種數(shù)據(jù),如訂單記錄、菜品類型和價(jià)格、會(huì)員信息、商家信息、配送信息等。
2.2 系統(tǒng)功能模塊設(shè)計(jì)
2.2.1 前臺(tái)顯示功能模塊
前臺(tái)顯示功能模塊如圖2所示。
(1)最新美食:按時(shí)間順序推薦,展示銷量最高、最新、最熱門等美食,按美食種類分類查看。
(2)用戶中心:主要用于用戶注冊(cè)和登錄,可在線修改個(gè)人資料,對(duì)已訂餐店家進(jìn)行留言和評(píng)論等。
(3)購(gòu)物車:用戶登錄后,對(duì)感興趣美食進(jìn)行查詢、下單購(gòu)買。
(4)訂單查詢:用戶登錄后,可查詢已生成的訂單配送及成交情況。
(5)商家加盟:與有意向入駐平臺(tái)的商家進(jìn)行洽談和聯(lián)系。
2.2.2 后臺(tái)處理功能模塊
后臺(tái)業(yè)務(wù)處理功能模塊如圖3所示。
(1)統(tǒng)計(jì)功能:統(tǒng)計(jì)顯示在某個(gè)時(shí)間段的營(yíng)業(yè)額、訂單數(shù)量、顧客數(shù)量、商品銷量額、配送員配送數(shù)量、訪問(wèn)量。
(2)訂單管理:對(duì)未處理訂單、已確認(rèn)訂單、成功訂單、失敗訂單、已取消訂單查看管理。
(3)店鋪管理:建立店鋪、管理店鋪,對(duì)營(yíng)業(yè)狀態(tài)、配送、店鋪營(yíng)銷進(jìn)行管理,訂單提醒管理、商品狀態(tài)管理。
(4)客戶管理:詳細(xì)顯示顧客個(gè)人信息、積分、充值記錄、累計(jì)消費(fèi)金額等功能;會(huì)員設(shè)置、會(huì)員充值、升級(jí)會(huì)員、退款、凍結(jié)會(huì)員等功能;惡意下單顧客移至黑名單功能。
(5)交流回復(fù):顧客消費(fèi)成功后可對(duì)店鋪進(jìn)行評(píng)論打分,商家收到留言評(píng)論等信息并及時(shí)回復(fù)。自動(dòng)回復(fù)功能可編輯關(guān)鍵詞、非關(guān)鍵詞、圖文素材、鏈接第三方接口。
(6)在線支付:支持會(huì)員在線充值、顧客在線付款。主要通過(guò)財(cái)付通和支付寶的支付端口支付。
(7)應(yīng)用添加:添加快遞查詢、城市天氣、火車票查詢等應(yīng)用功能。
(8)營(yíng)銷推廣:可設(shè)置優(yōu)惠券、大轉(zhuǎn)盤抽獎(jiǎng)、簽到和積分等營(yíng)銷功能。
3 系統(tǒng)實(shí)現(xiàn)
3.1 開(kāi)發(fā)環(huán)境
為了和微信公眾平臺(tái)的開(kāi)放接口對(duì)接,采用Apache+Php+Mysql+Linux搭建開(kāi)發(fā)者服務(wù)器, 用PHP5.5 Zend Studio開(kāi)發(fā)業(yè)務(wù)模塊、 MySQL5.5進(jìn)行數(shù)據(jù)存儲(chǔ)。商家后臺(tái)管理需要IE 6.0及以上版本,用戶手機(jī)端需要微信6.0及以上版本。
啟用微信公眾平臺(tái)的開(kāi)發(fā)者模式,首先登陸微信公眾平臺(tái)進(jìn)行開(kāi)發(fā)者服務(wù)器網(wǎng)址接入,接入后在開(kāi)發(fā)者服務(wù)器上進(jìn)行功能實(shí)現(xiàn)。
3.2 數(shù)據(jù)庫(kù)設(shè)計(jì)
結(jié)合系統(tǒng)分析和功能模塊實(shí)際,建立wxShop 數(shù)據(jù)庫(kù),內(nèi)部主要數(shù)據(jù)見(jiàn)表1。
3.3 微信自定義菜單創(chuàng)建
平臺(tái)是對(duì)微信公眾號(hào)的二次開(kāi)發(fā)實(shí)現(xiàn)。采用POST請(qǐng)求方式(使用https協(xié)議)連接到接口地址:https ://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN ,向微信服務(wù)器獲得菜單接口[2]。Access_token對(duì)應(yīng)公眾號(hào)是全局唯一的票據(jù),有效期是7200s,官方限制每日調(diào)用限額2000次。通過(guò)POST的特定結(jié)構(gòu)體,實(shí)現(xiàn)在微信客戶端創(chuàng)建自定義菜單,POST 的菜單數(shù)據(jù)為JSON 格式,具體過(guò)程詳見(jiàn)官方開(kāi)發(fā)者文檔。
3.4 微信消息的接收和回復(fù)
微信目前支持圖片消息、語(yǔ)音消息、文本消息、視頻消息、鏈接消息、地理位置消息等6種。當(dāng)用戶向公眾號(hào)發(fā)送消息時(shí),微信服務(wù)器可自動(dòng)識(shí)別消息種類,將消息按不同的格式包裝成不同的XML數(shù)據(jù)包POST到開(kāi)發(fā)者服務(wù)器上[4]。以圖文消息$ newsTpl模板格式舉例如下:
$newsTpl ="< xml >
< ToUserName > <! [CDATA[% s]] > < /ToUserName >
< FromUserName > <! [CDATA[% s]] > < /FromUserName >
< CreateTime > %s < /CreateTime >
< MsgType > <! [CDATA[news]] > < /MsgType >
< ArticleCount > 1 < /ArticleCount >
< Articles >
< item >
< Title > <! [CDATA[%s]] > < /Title >
< Description > <! [CDATA[% s]] > < /Description >
< PicUrl > <! [CDATA[%s]] > < /PicUrl >
< Url > <! [CDATA[%s]] > < /Url >
< /item >< /xml >"
微信官方提供了基于PHP的接口實(shí)現(xiàn)方案,程序員可根據(jù)需要實(shí)現(xiàn)消息接口代碼,具體步驟如下:
(1) 接收微信服務(wù)器POST的數(shù)據(jù):
$postStr = $GLOBALS["HTTP_RAW_POST_DATA" ];
(2)將$ postStr 載入到對(duì)象里:
$ postObj = simplexml_load_string( $ postStr,'SimpleXMLElement',LIBXML_NOCDATA)。
(3)獲取消息:
$from Username = $postObj->From UserName; / /獲取發(fā)送者賬號(hào)信息
$toUsername = $postObj->ToUserName; / /獲取開(kāi)發(fā)者賬號(hào)信息
$type = $postObj->MsgType; / /獲取消息類型
$customevent = $postObj->Event; / /獲取事件類型
$keyword = $postObj->Content; / /獲取文本消息內(nèi)容
開(kāi)發(fā)者服務(wù)器獲取到消息后,可根據(jù)消息類型分發(fā)給不同的功能模塊處理,將結(jié)果重新封裝成XML數(shù)據(jù)包格式,通過(guò)調(diào)用封裝好的消息發(fā)送sendMsg 返回給微信服務(wù)器,由微信服務(wù)器解析XML數(shù)據(jù)返回給用戶瀏覽。
3.5 圖文消息動(dòng)態(tài)更新
圖文消息動(dòng)態(tài)更新的重難點(diǎn)在于圖片的保存和讀取。管理員通過(guò)微信公眾號(hào)后臺(tái)管理界面增加新的圖文消息時(shí),如果有新的圖片上傳,被上傳的圖片url和消息內(nèi)容將保存到數(shù)據(jù)庫(kù)wxshop_news表的content字段中[3]。微信APP前端在讀取遍歷數(shù)據(jù)庫(kù)時(shí),需要通過(guò)正則表達(dá)式從content字段中將圖片url 分離出來(lái)。圖文消息動(dòng)態(tài)更新的關(guān)鍵代碼如下:
$result = $mysqli->query( " select id, title,description,content from wxshop_news where pid = 7 orderby id desc limit 1" ) ;
//按id 倒序查詢pid 為7 的最新1 條消息的結(jié)果集
$rows = $result->fetch_assoc( ) ; //從結(jié)果集中獲取數(shù)據(jù)賦給數(shù)組$ rows
if( preg_match( '/ < img. * src \ s* = \ s* [\ " | \']? \\s* ( [^ > \ " \ '\ s]* ) /i ',$ rows['content '],$ picArr) )
{$ picUrl = str _replace ( array ( " "; " ," '; " ) ,array( " \" " ," '" ) ,$ picArr[0]) ;
$ title = $ rows['title'];$ des = $ rows['description'];$ url = " http://localhost/weixin/index.php/news/detail/id/{ $ rows['id']} " ;}
$ resultStr = sprintf ( $ newsTpl,$ fromUsername, $ toUsername, $ time, $ title,$ des,$ picUrl,$ url) ;
echo $ resultStr
以上代碼可實(shí)現(xiàn)1條消息的動(dòng)態(tài)更新,如需要實(shí)現(xiàn)最新幾條消息的動(dòng)態(tài)更新,只需要在查詢數(shù)據(jù)庫(kù)時(shí)通過(guò)修改limit限制記錄數(shù)重新遍歷結(jié)果集即可,在此不再贅述。
4 系統(tǒng)效益評(píng)估
系統(tǒng)從消費(fèi)者自助點(diǎn)擊屏幕下單到商家接收訂單都是全自動(dòng)對(duì)接,有效改善了消費(fèi)者點(diǎn)餐體驗(yàn),節(jié)省了開(kāi)支,有良好的市場(chǎng)前景,具體體現(xiàn)在:①微信信息訂閱,消息推送及時(shí),增加了店家和平臺(tái)的知名度;②改善了餐飲商家的銷售方式和渠道,降低了營(yíng)銷資源成本;③能為商家留住固有消費(fèi)者、吸引新進(jìn)消費(fèi)者,增加平臺(tái)和店家的營(yíng)售收入;④充分滿足了用戶的訂餐需求,方便快捷的特點(diǎn)提高了消費(fèi)者的忠誠(chéng)度;⑤促進(jìn)了信息資源的整合,提高了訂單的處理效率,降低了店家和消費(fèi)者的時(shí)間成本。
5 結(jié)語(yǔ)
本文介紹了基于微信公眾號(hào)訂餐系統(tǒng)的基本邏輯結(jié)構(gòu)和前后臺(tái)功能板塊、系統(tǒng)關(guān)鍵技術(shù),對(duì)系統(tǒng)運(yùn)營(yíng)進(jìn)行了效益評(píng)估。系統(tǒng)屬于B2C中的經(jīng)紀(jì)人模式,通過(guò)收取成交訂單中介費(fèi)用的方式實(shí)現(xiàn)盈利,也可以看作是O2O模式的應(yīng)用。送餐(物流)由商家自行解決,平臺(tái)只負(fù)責(zé)訂餐功能的實(shí)現(xiàn)、更新、升級(jí)及售后服務(wù)質(zhì)量監(jiān)控。
通過(guò)實(shí)際運(yùn)營(yíng)發(fā)現(xiàn)系統(tǒng)仍有需完善的地方,主要是安全性問(wèn)題。目前系統(tǒng)安全是通過(guò)一些控制語(yǔ)句去驗(yàn)證要登陸的用戶身份,沒(méi)有對(duì)網(wǎng)絡(luò)中的數(shù)據(jù)進(jìn)行加密,這樣就不能對(duì)數(shù)據(jù)在傳輸過(guò)程中被攻擊或者篡改進(jìn)行有效防御,因此需要增加高級(jí)的安全技術(shù)來(lái)實(shí)現(xiàn)這些功能。只有不斷完善網(wǎng)上訂餐系統(tǒng)功能,才能讓所有客戶在一個(gè)互相信任和安全的環(huán)境中享受到訂餐的樂(lè)趣。
參考文獻(xiàn):
[1] 騰訊公布2014 年第二季度及中期業(yè)績(jī)[EB/OL].http://tech.qq.com/a/20140813/058951.htm,2014-08-13.
[2] 微信公眾平臺(tái)開(kāi)發(fā)者文檔. 自定義菜單創(chuàng)建接口[EB/OL].http://mp.weixin.qq.com/wiki/index.php?title=自定義菜單創(chuàng)建接口, 2014-08- 11.
[3] 易偉. 微信公眾平臺(tái)服務(wù)號(hào)開(kāi)發(fā):揭秘九大高級(jí)接口[M]. 北京:機(jī)械工業(yè)出版社,2014.
[4] 夏凌云,韓立峰,王長(zhǎng)慶. 利用微信公眾平臺(tái)打造校園信息移動(dòng)發(fā)布平臺(tái)[J]. 信息技術(shù),2014(2):183-185.
[5] 方倍工作室. 微信公眾平臺(tái)開(kāi)發(fā)最佳實(shí)踐[M].北京:機(jī)械工業(yè)出版社,2014.
(責(zé)任編輯:杜能鋼)