亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

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

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

Feb 23, 2017 pm 02:07 PM
微信大眾平臺(tái)

上一篇已經(jīng)搭建好整體框架,實(shí)現(xiàn)了入口的驗(yàn)證, ? 驗(yàn)證通過(guò)後就交給LookMsgType方法處理,LookMsgType方法主要是對(duì)微信發(fā)來(lái)的不同的訊息進(jìn)行分解,不同的類型交給業(yè)務(wù)邏輯層不同的方法處理, ? 對(duì)不同類型的訊息判斷,可以用if,也可以用switch ? 一般來(lái)說(shuō)超過(guò)5個(gè)的if用switch會(huì)更好, 這裡貼出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"://用戶上報(bào)地理位置

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

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

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

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

? ? ? ? ? ?對(duì)所有微型訊號(hào)傳送來(lái)的訊息進(jìn)行封裝,datamodel中建立一個(gè)Receive資料夾和一個(gè)send資料夾,在其中分別建立一個(gè)資料夾的類,對(duì)應(yīng)於訊息完成之後,完整的datamodel類別庫(kù)如下圖:

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

範(fàn)例

-----接收訊息:

文字訊息RText .cs

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

????}

自訂選單點(diǎn)擊RMenuClick.cs

public?class?RMenuClick
????{
????????public?string?ToUserName?{?get;?set;?}//?開(kāi)發(fā)者微信號(hào)
????????public?string?FromUserName?{?get;?set;?}//?用戶號(hào)(OpenID)
????????public?long?CreateTime?{?get;?set;?}//?創(chuàng)建時(shí)間
????????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;?}//?用戶號(hào)(OpenID)
????????public?string?FromUserName?{?get;?set;?}//?開(kāi)發(fā)者微信號(hào)

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

????????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;?}//?用戶號(hào)(OpenID)
????????public?string?FromUserName?{?get;?set;?}//?開(kāi)發(fā)者微信號(hào)

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

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

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

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

????}
}</articlesmodel>

在發(fā)送圖文訊息中,因?yàn)榛馗步o微信的圖文訊息中,具體的圖文內(nèi)容是多條(最多可以10條),所以單獨(dú)會(huì)有ArticlesModel。 ? ?後面文章會(huì)寫出圖文訊息的發(fā)送。

? ? ?2、透過(guò)反射給model賦值?

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

///?<summary>
????????///?通過(guò)反射給接收消息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是在入口處傳遞進(jìn)來(lái)的解析的微信發(fā)來(lái)的xml訊息, ?這樣,就不需要每次手動(dòng)寫程式碼賦值了。

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

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


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

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72