本章節咱們來實現一個微信庫存查詢功能,使用咱們前面的BIZ業務邏輯層示例如何利用微信入口來實現文本消息類的庫存查詢服務。編程
def responseMsg(postContent): postStr = smart_str(postContent) #postStr = postContent if postStr: msg = xmlContent2Dic(postStr) if msg['MsgType']: if msg['MsgType'] == 'event': resultStr = handleEvent(msg) #處理事件類型推送 elif msg['MsgType'] == 'text': resultStr =handleText(msg) #處理文本類型推送 else: resultStr = 'Input something...' return resultStr
def handleText(msg): resultStr="<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>" if msg['Content'] == '1': resultStr = resultStr % (msg['FromUserName'],msg['ToUserName'],str(int(time.time())),'text',u'請輸入查詢物料名稱,格式「K螺母」。') elif string.upper(msg['Content'][0])=='K': itemName = msg['Content'][1:len( msg['Content'])] strs = '' biz = InventoryBiz() inventorys = biz.getInventoryByItemName(itemName) for inventory in inventorys: strs = strs + inventory.Item.ItemName + u' 庫存數量:' + str( inventory.Amount) + '\n' if strs == '': strs = u'當前物料:"'+ itemName +u'"未查詢到庫存數據' resultStr = resultStr % (msg['FromUserName'],msg['ToUserName'],str(int(time.time())),'text',strs) else: resultStr = resultStr % (msg['FromUserName'],msg['ToUserName'],str(int(time.time())),'text',u'感謝您關注【微人人公衆號】\n目前功能以下:【1】 庫存查詢;') return resultStr
注意:咱們仍然是經過業務邏輯層的查詢函數調用來得到庫存信息,而後返回給「微信」的查詢用戶。代碼只是調用了BIZ層接口,做爲「微信」接口的開發人員不須要再考慮業務邏輯層具體的的邏輯實現。這樣咱們也能夠把「微信」看作MVC裏view的一種展示模式。json
代碼更新到雲,咱們就能夠在微信端進行庫存查詢了。以下圖:微信
本章節咱們演示了庫存查詢是如何快速擴展到支持微信查詢的,因爲業務邏輯層的代碼是共用的,也就意味着真正的庫存查詢的業務邏輯對於微信接口的開發人員來講就是一個黑盒,開發人員只管調用biz層接口就能夠完成功能從網頁查詢到微信查詢的擴展。函數
進一步若是開發團隊內部定義了本身的信息封裝格式,微信端的庫存查詢與extjs網頁端庫存查詢就能夠統一調用一個服務接口。好比:前面咱們發佈的getInventoryByItemName服務,期返回json數據格式。這樣客戶端開發人員均可以不用知道服務端是如何實現的,只管調用服務便可。這樣的編程模式就能夠實現界面展現層與服務層開發的徹底分離,進一步下降系統的耦合。統一的服務層來實現不一樣終端訪問結果的一致性,提升系統的總體開發效率。post