国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 微信小程式 微信開發(fā) asp.net開發(fā)微信公眾平臺(3)微信訊息封裝及反射賦值

asp.net開發(fā)微信公眾平臺(3)微信訊息封裝及反射賦值

Feb 23, 2017 pm 02:07 PM
微信大眾平臺

上一篇已經(jīng)搭建好整體框架,實現(xiàn)了入口的驗證, ? 驗證通過後就交給LookMsgType方法處理,LookMsgType方法主要是對微信發(fā)來的不同的訊息進行分解,不同的類型交給業(yè)務(wù)邏輯層不同的方法處理, ? 對不同類型的訊息判斷,可以用if,也可以用switch ? 一般來說超過5個的if用switch會更好, 這裡貼出LookMsgType方法:

public?void?LookMsgType(string?msgType)
????????{

????????????#region?判斷消息類型
????????????switch?(msgType)
????????????{
????????????????case?"text":
????????????????????RText?mText?=?new?RText();
????????????????????mText?=?ReadXml.GetModel<rtext>(mText,?xmlModel);
????????????????????BLLWei.DoText(dbHome,?mText);//文本消息
????????????????????break;
????????????????case?"image":
????????????????????RImg?mImg?=?new?RImg();
????????????????????mImg?=?ReadXml.GetModel<rimg>(mImg,?xmlModel);
????????????????????BLLWei.DoImg(dbHome,mImg);//圖片
????????????????????break;
????????????????case?"voice":?//聲音
????????????????????RVoice?mVoice?=?new?RVoice();
????????????????????mVoice?=?ReadXml.GetModel<rvoice>(mVoice,?xmlModel);
????????????????????BLLWei.DoVoice(dbHome,mVoice);
????????????????????break;

????????????????case?"video"://視頻
????????????????????RVideo?mVideo?=?new?RVideo();
????????????????????mVideo?=?ReadXml.GetModel<rvideo>(mVideo,?xmlModel);
????????????????????BLLWei.DoVideo(dbHome,?mVideo);
????????????????????break;

????????????????case?"location"://地理位置
????????????????????RLocation?mLocation?=?new?RLocation();
????????????????????mLocation?=?ReadXml.GetModel<rlocation>(mLocation,?xmlModel);
????????????????????BLLWei.DoLocation(dbHome,mLocation);
????????????????????break;
????????????????case?"link"://鏈接
????????????????????RLink?mLink?=?new?RLink();
????????????????????mLink?=?ReadXml.GetModel<rlink>(mLink,?xmlModel);
????????????????????BLLWei.DoLink(dbHome,mLink);
????????????????????break;
????????????????#region?事件
????????????????case?"event":

????????????????????switch?(ReadXml.ReadModel("Event",?xmlModel))
????????????????????{
????????????????????????case?"subscribe":

????????????????????????????if?(ReadXml.ReadModel("EventKey",?xmlModel).IndexOf("qrscene_")?>=?0)
????????????????????????????{
????????????????????????????????RCodeNotSub?mNotSub?=?new?RCodeNotSub();
????????????????????????????????mNotSub?=?ReadXml.GetModel<rcodenotsub>(mNotSub,?xmlModel);
????????????????????????????????BLLWei.DoCodeNotSub(dbHome,mNotSub);//未關(guān)注的新用戶,掃描帶參數(shù)的二維碼關(guān)注
????????????????????????????}
????????????????????????????else
????????????????????????????{
????????????????????????????????RSub?mSub?=?new?RSub();
????????????????????????????????mSub?=?ReadXml.GetModel<rsub>(mSub,?xmlModel);
????????????????????????????????BLLWei.DoSub(dbHome,mSub);//普通關(guān)注
????????????????????????????}
????????????????????????????break;
????????????????????????case?"unsubscribe":
????????????????????????????RUnsub?mUnSub?=?new?RUnsub?();
????????????????????????????mUnSub?=?ReadXml.GetModel<runsub>(mUnSub,?xmlModel);
????????????????????????????BLLWei.DoUnSub(dbHome,mUnSub);//取消關(guān)注
????????????????????????????break;

????????????????????????case?"SCAN":
????????????????????????????RCodeSub?mCodeSub?=?new?RCodeSub();
????????????????????????????mCodeSub?=?ReadXml.GetModel<rcodesub>(mCodeSub,?xmlModel);
????????????????????????????BLLWei.DoCodeSub(dbHome,mCodeSub);//已經(jīng)關(guān)注的用戶掃描帶參數(shù)的二維碼
????????????????????????????break;
????????????????????????case?"LOCATION"://用戶上報地理位置

????????????????????????????RSubLocation?mSubLoc?=?new?RSubLocation();
????????????????????????????mSubLoc?=?ReadXml.GetModel<rsublocation>(mSubLoc,?xmlModel);

????????????????????????????BLLWei.DoSubLocation(dbHome,?mSubLoc);
????????????????????????????break;
????????????????????????case?"CLICK"://自定義菜單點擊

????????????????????????????RMenuClick?mMenuClk?=?new?RMenuClick();
????????????????????????????mMenuClk?=?ReadXml.GetModel<rmenuclick>(mMenuClk,?xmlModel);
????????????????????????????BLLWei.DoMenuClick(dbHome,?mMenuClk);
????????????????????????????break;
????????????????????????case?"VIEW"://自定義菜單跳轉(zhuǎn)事件

????????????????????????????RMenuView?mMenuVw?=?new?RMenuView();
????????????????????????????mMenuVw?=?ReadXml.GetModel<rmenuview>(mMenuVw,?xmlModel);
????????????????????????????BLLWei.DoMenuView(dbHome,?mMenuVw);
????????????????????????????break;
????????????????????};
????????????????????break;
????????????????#endregion
????????????}
????????????#endregion
????????}</rmenuview></rmenuclick></rsublocation></rcodesub></runsub></rsub></rcodenotsub></rlink></rlocation></rvideo></rvoice></rimg></rtext>

外層switch判斷msgtype, ? 在event類型時,再次switch判斷特定的事件類型(追蹤、取消追蹤、自訂選單事件等), ?至此所有的微信發(fā)來的訊息都有處理了,在上面程式碼中用到訊息模型以及ReadXml.GetModel方法給模型賦值, 賦值之後傳遞給業(yè)務(wù)邏輯層對應(yīng)的方法處理, ?下面寫出訊息封裝和給模型賦值的方法。

? ? 1、訊息封裝: ? ??

? ? ? ? ? ?對所有微型訊號傳送來的訊息進行封裝,datamodel中建立一個Receive資料夾和一個send資料夾,在其中分別建立一個資料夾的類,對應(yīng)於訊息完成之後,完整的datamodel類別庫如下圖:

asp.net開發(fā)微信公眾平臺(3)微信訊息封裝及反射賦值

範例

-----接收訊息:

文字訊息RText .cs

public?class?RText
????{
????????public?string?ToUserName?{?get;?set;?}//?開發(fā)者微信號
????????public?string?FromUserName?{?get;?set;?}//?用戶號(OpenID)
????????public?long?CreateTime?{?get;?set;?}//?創(chuàng)建時間
????????public?string?MsgType?{?get;?set;?}?//消息類型
????????public?string?Content?{?get;?set;?}//內(nèi)容
????????public?long?MsgId?{?get;?set;?}//消息ID

????}

自訂選單點擊RMenuClick.cs

public?class?RMenuClick
????{
????????public?string?ToUserName?{?get;?set;?}//?開發(fā)者微信號
????????public?string?FromUserName?{?get;?set;?}//?用戶號(OpenID)
????????public?long?CreateTime?{?get;?set;?}//?創(chuàng)建時間
????????public?string?MsgType?{?get;?set;?}?//消息類型

????????public?string?Event?{?get;?set;?}//事件類型
????????public?string?EventKey?{?get;?set;?}//事件key
????????
????}

#其他也都類似,不一一列舉。

-----發(fā)送訊息

?

發(fā)送文字訊息SText.cs

public?class?SText
????{



????????public?string?ToUserName?{?get;?set;?}//?用戶號(OpenID)
????????public?string?FromUserName?{?get;?set;?}//?開發(fā)者微信號

????????public?long?CreateTime?{?get;?set;?}//?創(chuàng)建時間

????????public?string?MsgType?{?get?{?return?"text";?}?}?//消息類型

????????public?string?Content?{?get;?set;?}//內(nèi)容


????}

SText

傳送圖文訊息SNews.cs

namespace?DataModel.Send
{
????public?class?SNews
????{
????????public?string?ToUserName?{?get;?set;?}//?用戶號(OpenID)
????????public?string?FromUserName?{?get;?set;?}//?開發(fā)者微信號

????????public?long?CreateTime?{?get;?set;?}//?創(chuàng)建時間

????????public?string?MsgType?{?get?{?return?"news";?}?}?//消息類型

????????public?int?ArticleCount?{?get;?set;?}//圖文個數(shù)

????????public?List<articlesmodel>?Articles?{?get;?set;?}//圖文列表
????}
????public?class?ArticlesModel?//默認第一條大圖顯示
????{
????????public?string?Title?{?get;?set;?}//標題
????????public?string?Description?{?get;?set;?}//描述
????????public?string?PicUrl?{?get;?set;?}//圖片鏈接??
????????public?string?Url?{?get;?set;?}//點擊之后跳轉(zhuǎn)的鏈接

????}
}</articlesmodel>

在發(fā)送圖文訊息中,因為回覆給微信的圖文訊息中,具體的圖文內(nèi)容是多條(最多可以10條),所以單獨會有ArticlesModel。 ? ?後面文章會寫出圖文訊息的發(fā)送。

? ? ?2、透過反射給model賦值?

? ? ? ?在上篇文章寫的入口處,已經(jīng)有了解析xml的方法,現(xiàn)在封裝了訊息,通常的做法,是每次用到對應(yīng)的model就手動寫程式碼賦值, ?而我這裡LookMsgType方法中所有給訊息賦值時全用的ReadXml.GetModel這同一個方法, ?這裡用的就是反射,方法如下:

///?<summary>
????????///?通過反射給接收消息model賦值
????????///?</summary>
????????///?<typeparam></typeparam>
????????///?<param>
????????///?<returns></returns>
????????public?static?T?GetModel<t>(T?model,?Dictionary<string>?xmlModel)?where?T?:?class
????????{
????????????var?m?=?model.GetType();
????????????foreach?(PropertyInfo?p?in?m.GetProperties())
????????????{
????????????????string?name?=?p.Name;
????????????????if?(xmlModel.Keys.Contains(name))
????????????????{
????????????????????string?value=xmlModel.Where(x?=>?x.Key?==?name).FirstOrDefault().Value;
????????????????????p.SetValue(model,
????????????????????string.IsNullOrEmpty(value)???null?:?Convert.ChangeType(value,?p.PropertyType),?null);?
????????????????}
????????????}
????????????return?model;
????????}</string></t>

T model 就是要使用的訊息類, ? xmlmodel是在入口處傳遞進來的解析的微信發(fā)來的xml訊息, ?這樣,就不需要每次手動寫程式碼賦值了。

好了,此篇實作了lookmsgtype方法, 實作了訊息封裝與反射賦值,接下去就是到了業(yè)務(wù)邏輯層中的處理與具體實作了...

更多asp .net開發(fā)微信公眾平臺(3)微信訊息封裝及反射賦值相關(guān)文章請關(guān)注PHP中文網(wǎng)!


本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應(yīng)的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)