


Entwicklung der ?ffentlichen WeChat-Plattform mit asp.net (3) WeChat-Nachrichtenkapselung und Reflexionszuweisung
Feb 23, 2017 pm 02:07 PMIm vorherigen Artikel wurde das Gesamtframework erstellt und die Eingangsüberprüfung implementiert. Nach bestandener überprüfung wird sie an die LookMsgType-Methode übergeben. Die LookMsgType-Methode zerlegt haupts?chlich verschiedene von WeChat gesendete Nachrichten Um verschiedene Arten von Nachrichten zu beurteilen, ist es besser, Schalter zu verwenden, wenn es mehr als 5 Typen gibt Die LookMsgType-Methode wird hier ver?ffentlicht:
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>
Der ?u?ere Schalter bestimmt den Nachrichtentyp. Wenn der Ereignistyp verwendet wird, wechseln Sie erneut, um den spezifischen Ereignistyp (Folgen, Nicht mehr folgen, benutzerdefiniertes Menü) zu bestimmen Zu diesem Zeitpunkt wurden alle von WeChat gesendeten Nachrichten verarbeitet. Im obigen Code werden dem Modell Werte zugewiesen ??werden zur Verarbeitung an die entsprechenden Methoden der Gesch?ftslogikschicht übergeben. Die Methoden zur Nachrichtenkapselung und Zuweisung zum Modell werden unten beschrieben.
1. Nachrichtenkapselung:
Kapseln Sie alle von WeChat gesendeten Nachrichten. Erstellen Sie einen Empfangsordner und einen Sendeordner im Datenmodell und erstellen Sie nach Abschluss Klassen, die den darin enthaltenen Nachrichten entsprechen. Die vollst?ndige Datenmodell-Klassenbibliothek sieht wie folgt aus:
Beispiel
-----Nachricht empfangen:
Textnachricht 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 ????}
Benutzerdefiniertes Menü klicken Sie auf 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 ???????? ????}
Andere sind ?hnlich, daher werde ich sie nicht einzeln auflisten.
-----Nachricht senden
Textnachricht SText.cs senden
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
Grafiknachricht SNews.cs senden
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?//默認(rèn)第一條大圖顯示 ????{ ????????public?string?Title?{?get;?set;?}//標(biāo)題 ????????public?string?Description?{?get;?set;?}//描述 ????????public?string?PicUrl?{?get;?set;?}//圖片鏈接?? ????????public?string?Url?{?get;?set;?}//點擊之后跳轉(zhuǎn)的鏈接 ????} }</articlesmodel>
Da beim Senden von Grafiknachrichten mehrere spezifische Grafikinhalte (bis zu 10) in der an WeChat geantworteten Grafiknachricht vorhanden sind, gibt es ein separates ArticlesModel. Der folgende Artikel beschreibt das Versenden von grafischen Nachrichten.
2. Weisen Sie dem Modell Werte durch Reflexion zu
Am Eingang des vorherigen Artikels gibt es bereits eine Methode zum Parsen von XML, und jetzt ist die Nachricht gekapselt Der übliche Ansatz ist es, jedes Mal das entsprechende Modell zu verwenden, indem ich Code hier manuell schreibe. Ich verwende die gleiche Methode ReadXml.GetModel, wenn ich Nachrichten Werte zuweise. Die hier verwendete Methode ist wie folgt :
///?<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 Das Modell ist die zu verwendende Nachrichtenklasse, und das XML-Modell sind die von WeChat gesendeten analysierten XML-Informationen, die am Eingang übergeben werden. Auf diese Weise ist keine manuelle Eingabe erforderlich Schreiben Sie Code und weisen Sie jedes Mal Werte zu.
Okay, in diesem Artikel wurde die Methode ?lookmsgtype“ implementiert, die Nachrichtenkapselung und die Reflexionszuweisung implementiert, und dann folgt die Verarbeitung und spezifische Implementierung in der Gesch?ftslogikschicht ...
Mehr asp .net-Entwicklung Bitte achten Sie auf die ?ffentliche WeChat-Plattform (3). Artikel zu WeChat-Nachrichtenkapselung und Reflexionszuweisung beachten Sie bitte die chinesische PHP-Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)