Welcome 微信登录

首页 / 网页编程 / ASP.NET / asp.net微信公众平台开发(三) 微信消息封装及反射赋值

asp.net微信公众平台开发(三) 微信消息封装及反射赋值2015-01-31上一篇已经搭建好整体框架,实现了入口的验证,   验证通过后就交给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方法给模型赋值, 赋值之后传递给业务逻辑层对应的方法处理,  下面写出消息封装和给模型赋值的方法。