微信應(yīng)用如火如荼,很多公司都希望搭上資訊快車,這個(gè)是一個(gè)商機(jī),也是一個(gè)技術(shù)的方向,因此,有空研究下、學(xué)習(xí)下微信的相關(guān)開發(fā),也就成為計(jì)劃的安排事情之一了。本系列文章希望從一個(gè)循序漸進(jìn)的角度上,全面介紹微信的相關(guān)開發(fā)過(guò)程和相關(guān)經(jīng)驗(yàn)總結(jié),希望給大家了解一下相關(guān)的開發(fā)歷程。本篇隨筆主要基於上一篇《C#開發(fā)微信門戶及應(yīng)用(1)--開始使用微信接口》的基礎(chǔ)上進(jìn)行深入的介紹,介紹微信訊息的處理和應(yīng)答的過(guò)程。
1、微信的訊息應(yīng)答互動(dòng)
我們知道,微信的伺服器架起了客戶手機(jī)和開發(fā)者伺服器的一個(gè)橋樑,透過(guò)訊息的傳遞和回應(yīng),實(shí)現(xiàn)了與使用者的互動(dòng)操作,以下是它的訊息流程圖。
微信向開發(fā)者伺服器請(qǐng)求的訊息包含了多種類型,不過(guò)基本上,分為了文字訊息處理、事件訊息處理、語(yǔ)音訊息的識(shí)別,以及成為開發(fā)者之前的那個(gè)訊息認(rèn)證操作基本分類,以下是我繪製的一個(gè)訊息分類圖,其中介紹了這幾種關(guān)係,以及各自的訊息細(xì)化分類。
對(duì)於這些訊息的請(qǐng)求,我們?cè)陂_發(fā)伺服器端,需要編寫相關(guān)的邏輯進(jìn)行對(duì)應(yīng)給的處理,然後給微信伺服器平臺(tái)回應(yīng)訊息即可。
在前一篇的隨筆裡面我貼過(guò)程式碼,介紹微信訊息處理的入口操作,程式碼如下圖所示。
????????public?void?ProcessRequest(HttpContext?context) ????????{????????????//WHC.Framework.Commons.LogTextHelper.Info("測(cè)試記錄"); ????????????string?postString?=?string.Empty;???????????? ????????????if?(HttpContext.Current.Request.HttpMethod.ToUpper()?==?"POST") ????????????{????????????????using?(Stream?stream?=?HttpContext.Current.Request.InputStream) ????????????????{ ????????????????????Byte[]?postBytes?=?new?Byte[stream.Length]; ????????????????????stream.Read(postBytes,?0,?(Int32)stream.Length); ????????????????????postString?=?Encoding.UTF8.GetString(postBytes); ????????????????}????????????????if?(!string.IsNullOrEmpty(postString)) ????????????????{????????????????????Execute(postString); ????????????????} ????????????}????????????else ????????????{ ????????????????Auth(); ????????????} ????????}
其中的Execute(postString);就是對(duì)訊息的處理函數(shù),它實(shí)作了不同訊息的分發(fā)處理過(guò)程。 '
????????///?<summary> ????????///?處理各種請(qǐng)求信息并應(yīng)答(通過(guò)POST的請(qǐng)求)????????///?</summary> ????????///?<param name="postStr">POST方式提交的數(shù)據(jù)</param> ????????private?void?Execute(string?postStr) ????????{????????????WeixinApiDispatch?dispatch?=?new?WeixinApiDispatch(); ????????????string?responseContent?=?dispatch.Execute(postStr); ????????????HttpContext.Current.Response.ContentEncoding?=?Encoding.UTF8; ????????????HttpContext.Current.Response.Write(responseContent); ????????}
裡面的WeixinApiDispatch就是一個(gè)分發(fā)的管理類,它提取請(qǐng)求訊息的內(nèi)容,並建構(gòu)不同類型的訊息參數(shù),傳遞給不同的回應(yīng)函數(shù)進(jìn)行處理,然後傳回封裝好的XML內(nèi)容,作為響應(yīng)。
具體的程式碼處理邏輯如下圖所示。
這個(gè)消息處理接口,其實(shí)就是定義好一系列的對(duì)請(qǐng)求消息的處理操作,參數(shù)是不同給的消息對(duì)象,具體的代碼定義如下所示(由於篇幅原因,省略部分接口,具體可以參考上圖)。
????///?<summary> ????///?客戶端請(qǐng)求的數(shù)據(jù)接口????///?</summary> ????public?interface?IWeixinAction ????{????????///?<summary> ????????///?對(duì)文本請(qǐng)求信息進(jìn)行處理????????///?</summary> ????????///?<param name="info">文本信息實(shí)體</param> ????????///?<returns></returns> ????????string?HandleText(RequestText?info);????????///?<summary> ????????///?對(duì)圖片請(qǐng)求信息進(jìn)行處理????????///?</summary> ????????///?<param name="info">圖片信息實(shí)體</param> ????????///?<returns></returns> ????????string?HandleImage(RequestImage?info); ...........................????????///?<summary> ????????///?對(duì)訂閱請(qǐng)求事件進(jìn)行處理????????///?</summary> ????????///?<param name="info">訂閱請(qǐng)求事件信息實(shí)體</param> ????????///?<returns></returns> ????????string?HandleEventSubscribe(RequestEventSubscribe?info);????????///?<summary> ????????///?對(duì)菜單單擊請(qǐng)求事件進(jìn)行處理????????///?</summary> ????????///?<param name="info">菜單單擊請(qǐng)求事件信息實(shí)體</param> ????????///?<returns></returns> ????????string?HandleEventClick(RequestEventClick?info); .............................. ????}
從上面的程式碼可以看出,不同的訊息,到處理函數(shù)這裡,就以不同的訊息實(shí)體類別的方式傳遞過(guò)來(lái)了(注意:實(shí)體類別是我根據(jù)程式開發(fā)需要自己定義的,非微信本身的實(shí)體類),這樣非常方便我們處理操作,否則每次需要解析不同的消息內(nèi)容,很容易出現(xiàn)問(wèn)題,這樣強(qiáng)類型的數(shù)據(jù)類型,提高了我們開發(fā)微信應(yīng)用的強(qiáng)壯型和高效性。這些實(shí)體類別的物件有一定的繼承關(guān)係的,他們的繼承關(guān)係如下所示。
2、微信的管理介面
上面的訊息分類是微信伺服器向開發(fā)者伺服器發(fā)送的訊息請(qǐng)求操作,還有一種訊息,是我們開發(fā)者伺服器向微信伺服器進(jìn)行的訊息請(qǐng)求或回應(yīng),這種這裡暫且稱之為微信的管理接口,它表明了我們可以透過(guò)這些接口進(jìn)行相關(guān)的訊息回復(fù)或資料管理操作。它的分類圖如下所示。
微信的回覆訊息處理,它也和上面小節(jié)的資訊一樣,它也是繼承自BaseMessage實(shí)體類別的(同樣,下圖的實(shí)體類別及其繼承關(guān)係也是自訂的,方便程式開發(fā) ),它的關(guān)係如下圖
回覆的訊息,一般用的最多的是文字訊息和圖文訊息。
文字訊息的效果如下所示。
圖文訊息,可以增加圖片,還可以增加詳細(xì)的連結(jié)頁(yè)面,是非常好看的一種效果,對(duì)於一些內(nèi)容比較多,希望展現(xiàn)更好效果的,一般採(cǎi)用這種,效果如下所示。
更多C#開發(fā)微信入口網(wǎng)站及應(yīng)用(2)--微信訊息的處理與應(yīng)答?相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)