程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> asp.net微信公眾平台開發(三) 微信消息封裝及反射賦值

asp.net微信公眾平台開發(三) 微信消息封裝及反射賦值

編輯:關於ASP.NET

上一篇已經搭建好整體框架,實現了入口的驗證,   驗證通過後就交給LookMsgType方法處理,LookMsgType方法主要是對微信發來的不同的消息進行分解,不同的類型交給業務邏輯層不同的方法處理,   對不同類型的消息判斷,可以用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);//未關注的新用戶,掃描帶參數的二維碼關注
                            }
                            else
                            {
                                RSub mSub = new RSub();
                                mSub = ReadXml.GetModel<RSub>(mSub, xmlModel);
                                BLLWei.DoSub(dbHome,mSub);//普通關注
                            }
                            break;
                        case "unsubscribe":
                            RUnsub mUnSub = new RUnsub ();
                            mUnSub = ReadXml.GetModel<RUnsub>(mUnSub, xmlModel);
                            BLLWei.DoUnSub(dbHome,mUnSub);//取消關注
                            break;
    
                        case "SCAN":
                            RCodeSub mCodeSub = new RCodeSub();
                            mCodeSub = ReadXml.GetModel<RCodeSub>(mCodeSub, xmlModel);
                            BLLWei.DoCodeSub(dbHome,mCodeSub);//已經關注的用戶掃描帶參數的二維碼
                            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"://自定義菜單跳轉事件
    
                            RMenuView mMenuVw = new RMenuView();
                            mMenuVw = ReadXml.GetModel<RMenuView>(mMenuVw, xmlModel);
                            BLLWei.DoMenuView(dbHome, mMenuVw);
                            break;
                    };
                    break;
                #endregion
            }
            #endregion
        }

外層switch判斷msgtype,   在event類型時,再次switch判斷具體的事件類型(關注、取消關注、自定義菜單事件等),  至此所有的微信發來的消息都有處理了,在上面代碼中用到消息模型以及ReadXml.GetModel方法給模型賦值, 賦值之後傳遞給業務邏輯層對應的方法處理,  下面寫出消息封裝和給模型賦值的方法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved