


asp.net を使用した WeChat パブリック プラットフォームの開(kāi)発 (3) WeChat メッセージのカプセル化とリフレクション割り當(dāng)て
Feb 23, 2017 pm 02:07 PM前回の記事では、全體的なフレームワークを構(gòu)築し、入口検証を?qū)g裝しました。検証が完了すると、LookMsgType メソッドに渡されます。LookMsgType メソッドは、主に WeChat によって送信されるさまざまなタイプを分解します。ビジネス ロジック層に渡して、さまざまな種類(lèi)のメッセージを処理するには、if または switch を使用します。一般的に、if が 5 つを超える場(chǎng)合は switch を使用することをお?jiǎng)幛幛筏蓼?。外?cè)のスイッチは msgtype を決定します。イベント タイプでは、再度スイッチして特定のイベント タイプ (フォロー、フォロー解除、カスタム メニュー イベントなど) を決定します。この時(shí)點(diǎn)で、WeChat によって送信されたすべてのメッセージと ReadXml が処理されます。上記のコードでは GetModel が使用されており、このメソッドはモデルに値を割り當(dāng)てます。割り當(dāng)て後、その値は処理のためにビジネス ロジック層の対応するメソッドに渡されます。メッセージのカプセル化とモデルへの割り當(dāng)てのメソッドは次のとおりです。 。実裝 1. メッセージのパッケージ化:
WeChat によって送信されたすべてのメッセージをパッケージ化し、DataModel で受信フォルダーと送信フォルダーを構(gòu)築し、その中に対応するメッセージ クラスを確立します。完了すると、以下に示すように、完全な DataModel クラス ライブラリが完成します。
例-----メッセージの受信: テキストメッセージ RText.cspublic?void?LookMsgType(string?msgType) ????????{ ????????????#region?判斷消息類(lèi)型 ????????????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>

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;?}?//消息類(lèi)型 ????????public?string?Content?{?get;?set;?}//內(nèi)容 ????????public?long?MsgId?{?get;?set;?}//消息ID ????}
他も同様なので、一つずつ記載しません。 。
-----メッセージを送信する
テキスト メッセージを送信する SText.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;?}?//消息類(lèi)型 ????????public?string?Event?{?get;?set;?}//事件類(lèi)型 ????????public?string?EventKey?{?get;?set;?}//事件key ???????? ????}
グラフィック メッセージを送信する SNews.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";?}?}?//消息類(lèi)型 ????????public?string?Content?{?get;?set;?}//內(nèi)容 ????} SText
グラフィック メッセージを送信するのは、グラフィック メッセージに返信するためです。 WeChat では、特定のグラフィック コンテンツが複數(shù)(最大 10 個(gè))あるため、個(gè)別の ArticlesModel が存在します。 次の記事では、グラフィック メッセージの送信について説明します。
2. リフレクションを通じてモデルに値を割り當(dāng)てる
前の記事の冒頭で、XML を解析する方法がすでに説明されており、メッセージは手動(dòng)でカプセル化されます。通常のアプローチは、値を割り當(dāng)てるコードを手動(dòng)で記述することです。対応するモデルが使用されるたびに、LookMsgType メソッドのメッセージへのすべての割り當(dāng)てで同じメソッド ReadXml.GetModel が使用されます。ここでは Reflection が使用され、メソッドは次のとおりです。使用するメッセージクラス、入り口でxmlmodelを渡す WeChatから送信された解析済みのxml情報(bào)が入ってきます。 これにより、毎回手動(dòng)でコードを書(shū)いて値を代入する必要がありません。
この記事では、lookmsgtype メソッドの実裝、メッセージのカプセル化とリフレクション割り當(dāng)ての実裝、そしてビジネス ロジック層での処理と具體的な実裝について説明します...
その他の asp.net 開(kāi)発 WeChat パブリック プラットフォーム (3 ) 関連記事についてWeChat メッセージのカプセル化とリフレクション割り當(dāng)てについては、PHP 中國(guó)語(yǔ) Web サイトに注意してください。

ホットAIツール

Undress AI Tool
脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress
リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

AI Clothes Remover
寫(xiě)真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類(lèi)リムーバー

Video Face Swap
完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版
中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)