


Développement de la plateforme publique WeChat avec asp.net (3) Encapsulation des messages WeChat et mission de réflexion
Feb 23, 2017 pm 02:07 PMDans l'article précédent, le cadre global a été construit et la vérification d'entrée a été mise en ?uvre. Une fois la vérification réussie, elle est transmise à la méthode LookMsgType. La méthode LookMsgType décompose principalement les différents messages envoyés par WeChat, et différents. Les types sont transmis à la logique métier. Différentes méthodes sont utilisées pour traiter les couches. Pour juger différents types de messages, vous pouvez utiliser if ou switch. De manière générale, il est préférable d'utiliser switch s'il y a plus de 5 if. La méthode LookMsgType est publiée ici?:
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>
Le commutateur externe détermine le type de message. Lorsque le type d'événement est utilisé, basculez à nouveau pour déterminer le type d'événement spécifique (suivre, ne plus suivre, menu personnalisé. événement, etc.). à ce stade, tous les messages envoyés par WeChat ont été traités. Dans le code ci-dessus, le modèle de message et la méthode ReadXml.GetModel sont utilisés pour attribuer des valeurs au modèle. ??sont transmis aux méthodes correspondantes de la couche de logique métier pour le traitement. Les méthodes d'encapsulation des messages et d'affectation au modèle sont écrites ci-dessous.
1. Encapsulation des messages?:
Encapsulez tous les messages envoyés par WeChat. Créez un dossier de réception et un dossier d'envoi dans le modèle de données, et créez des classes correspondant aux messages qu'ils contiennent. la bibliothèque complète de classes de modèles de données est la suivante?:
Exemple
-----Recevoir un message?:
Message texte 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 ????}
Menu personnalisé cliquez sur 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 ???????? ????}
D'autres sont similaires, je ne les listerai donc pas un par un.
-----Envoyer un message
Envoyer un message texte 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
Envoyer un message graphique 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>
Lors de l'envoi de messages graphiques, comme il y a plusieurs messages graphiques spécifiques (jusqu'à 10) dans le message graphique répondu à WeChat, il y aura un modèle d'articles distinct. L'article suivant décrira l'envoi de messages graphiques.
2. Attribuez des valeurs au modèle par réflexion
A l'entrée de l'article précédent, il existe déjà une méthode d'analyse XML, et maintenant le message est encapsulé L'approche habituelle. est de l'utiliser à chaque fois. Le modèle correspondant est attribué en écrivant manuellement du code. Dans la méthode LookMsgType ici, j'utilise la même méthode ReadXml.GetModel lors de l'attribution de valeurs aux messages. La méthode utilisée ici est la réflexion. :
///?<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 Le modèle est la classe de message à utiliser, et le modèle xml est l'information XML analysée envoyée par WeChat qui est transmise à l'entrée. De cette fa?on, il n'est pas nécessaire de le faire manuellement. écrivez du code et attribuez des valeurs à chaque fois.
D'accord, cet article a implémenté la méthode lookmsgtype, implémenté l'encapsulation des messages et l'affectation de réflexion, puis vient le traitement et l'implémentation spécifique dans la couche de logique métier...
Plus de développement asp .net de la plate-forme publique WeChat (3) Articles liés à l'encapsulation des messages WeChat et à l'affectation de réflexion, veuillez faire attention au site Web chinois PHP !

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)