年底了,比較忙,大家都在展望未來,對於30+的我來說,發展和穩定是個難以取捨的問題。最近發了些求職信,鳥無音訊,沒事做,做點幫助大家的東西吧。
之前做了個微信公眾平台的查詢系統,在開發中,發覺了一些微信公眾平台的接口問題《對微信公眾平台開發的消息處理》,開發起來比較痛苦,對於微信過來的消息,需要解析後一個一個來返回,編寫之痛苦,相信有人明白。在開發中,一直考慮著如何來簡化開發,暫時想不到好的模式來開發,就自己胡亂寫了一個,希望對大家有幫助。
代碼已發布到github:https://github.com/JamesYing/JCWX
第一步:創建Model類庫,我把微信發送來的消息,事件、返回回去的消息,都寫成了Demo
RequestMessage:微信發送過來的消息、事件。此類是個虛類,繼承自WXMessage。
ResponseMessage:返回給微信服務器端的消息,同樣也是虛類,繼承自WXMessage。
在《對微信公眾平台開發的消息處理》中,已經知道,微信服務器端通過Post方式,發來一段xml,通過Request.InputStream獲取,是個Stream類型,之前一直考慮著,用XmlSerializer.Deserialize(stream)來解析成對象,但在實踐當中,發覺無法判斷MsgType,我必須先判斷再解析,從性能上來說不太合適,所以我又重寫了RequestMessage的構造函數,RequestMessage(XElement),把Stream –> XElement,就可以構造RequestMessage(要使用.net framework 3.5以上版本,您也可以自己修改成適合3.5以下版本)。不過我還是保留了原先的Deserialize方式,使用方法:RequestMessage.Deserializ<RequestMessage>(stream),具體可以參考我的源代碼。
我們知道返回給用戶的也是一個Xml信息,您可以直接使用ResponseMessage.Serializable()返回給用戶xml文檔。ResponseMessage的構造函數中,有一個ResponseMessage(RequestMessage message),這是為了把FromUserName, ToUserName轉換一下,後續文章會繼續講解。
第二步:創建了Business類庫,提供一些公開接口,方便大家來進行開發。
IMessageRole:信息處理規則,規則的具體實現,請繼承此接口
IMessageHandler:信息處理,根據信息,反饋給用戶。
NotHandlerMessage:繼承自IMessageHandler,這是一個在無法處理情況下,返回一個null的實現,您也可以自己來寫。
IMessageRole接口中,只有一個IMessageHandler MessageRole(XElement xml);方法,為了提高性能,我把過來的Stream轉換成了XElement,通過xml.Element(“MsgType”)進行類型判斷,返回一個IMessageHandler。
IMEssageHandler:ResponseMessage HandlerRequestMessage(XElement xml);根據不同的Request返回給用戶不同的ResponseMessage。
這個快速框架就這些,很簡單,實踐的話,需要自己編寫:
1、信息處理規則,繼承IMessageRole,在處理中,您可以根據MsgType進行分析,也可以根據不同Text內容進行分析,返回不同IMessageHanlder就可以了。
2、信息處理,繼承IMessageHandler,這個可能要寫很多個,看你的項目要求了。
微信公眾平台提供了測試接口,但暫時我還沒有用,就簡單自己模擬了下。
創建一個RequestTextMessage(文本信息):
模擬成Stream:
好了,有了模擬環境,我們,我們寫一個自己的規則:
再編寫2個消息處理類:
TextMessageHandler中,處理的類型為文本信息,判斷內容中含有info,返回一個ResponseTextMessage。下面我們實踐下:
請加入response的判斷,檢查是否為空,因為我們不是每條消息都必須處理的。
看下運行結果:
ok,運行成功,目前還未進行測試,後續會加入測試代碼,相信有了這個快速開發框架,會給大家開發微信公眾平台有更好的幫助。好了,下班了,明天繼續說明一些Model。
代碼已發布到github:https://github.com/JamesYing/JCWX