これまでの記事では、WeChat ポータルとアプリケーションの C# 開発に関する私自身の技術(shù)的探求と関連する経験の概要を続けていますが、一方では、これに関してすべての人と対話し、コミュニケーションをとることも目的としています。一方で、WeChat アプリケーションの基盤技術(shù)の開発と、將來のアプリケーションで使用できるように基本モジュールを統(tǒng)合することにも注力しています。このエッセイでは引き続き、WeChat ポータル メニューの管理操作を紹介します。
1. メニューの基本情報(bào)
WeChatポータルのメニューでは、サービスアカウントとサブスクリプションアカウントの両方がこのモジュールを開発できますが、サブスクリプションアカウントを所有するには認(rèn)証が必要なようです。一方、サービス アカウントは認(rèn)証なしで所有できます。このメニューには編集モードと開発モードがあります。編集モードは主に WeChat ポータル プラットフォーム上のメニューを編集します。開発モードは、ユーザーが WeChat API を呼び出して WeChat サーバーにデータを送信することによってメニューをカスタマイズして開発できることを意味します。対応するメニューコンテンツを生成します。この記事では主に開発モードに基づいたメニュー管理操作を紹介します。
カスタマイズされたメニューは、公式アカウントのインターフェースを強(qiáng)化するのに役立ち、ユーザーが公式アカウントの機(jī)能をより良く、より早く理解できるようになります?,F(xiàn)在、カスタム メニューには最大 3 つの第 1 レベルのメニューが含まれており、各第 1 レベルのメニューには最大 5 つの第 2 レベルのメニューが含まれています。第 1 レベルのメニューには最大 4 文字、第 2 レベルのメニューには最大 7 文字の中國(guó)語(yǔ)を含めることができます。余分な部分は「...」に置き換えられます?,F(xiàn)在、カスタム メニュー インターフェイスは次の 2 種類のボタンを?qū)g裝できます:
click: 用戶點(diǎn)擊click類型按鈕后,微信服務(wù)器會(huì)通過消息接口推送消息類型為event????的結(jié)構(gòu)給開發(fā)者(參考消息接口指南),并且?guī)习粹o中開發(fā)者填寫的key值,開發(fā)者可以通過自定義的key值與用戶進(jìn)行交互; view: 用戶點(diǎn)擊view類型按鈕后,微信客戶端將會(huì)打開開發(fā)者在按鈕中填寫的url值????(即網(wǎng)頁(yè)鏈接),達(dá)到打開網(wǎng)頁(yè)的目的,建議與網(wǎng)頁(yè)授權(quán)獲取用戶基本信息接口結(jié)合,獲得用戶的登入個(gè)人信息。
メニュー自體によって送信されるデータは Json データ文字列であり、その公式のサンプル データは次のとおりです。
?{?????"button":[ ?????{???? ??????????"type":"click",??????????"name":"今日歌曲",??????????"key":"V1001_TODAY_MUSIC" ??????}, ??????{???????????"type":"click",???????????"name":"歌手簡(jiǎn)介",???????????"key":"V1001_TODAY_SINGER" ??????}, ??????{???????????"name":"菜單",???????????"sub_button":[ ???????????{???? ???????????????"type":"view",???????????????"name":"搜索",???????????????"url":"http://www.soso.com/" ????????????}, ????????????{???????????????"type":"view",???????????????"name":"視頻",???????????????"url":"http://v.qq.com/" ????????????}, ????????????{???????????????"type":"click",???????????????"name":"贊一下我們",???????????????"key":"V1001_GOOD" ????????????}] ???????}] ?}
上記から、異なるタイプのメニューには異なるフィールド內(nèi)容があることがわかります。たとえば、タイプ ビューのメニューには url 屬性があり、タイプ クリックのメニューには key 屬性があります。一般に、メニューにはサブメニューの sub_button 屬性を含めることができますが、対応するメニュー エンティティ クラス情報(bào)を一度に分析することはできません。
2. メニューエンティティクラス定義
メニューをいくつかのエンティティクラスに分割し、継承関係を指定し、それぞれの屬性を設(shè)定するいくつかの WeChat インターフェイス開発コードを見てきました。おおよその関係は次のとおりです。
このマルチレベルの関係継承方法は問題を解決できますが、それがエレガントな解決策であるとは思いません。実際、Json.NET 獨(dú)自の Attribute プロパティ構(gòu)成と組み合わせることで、シリアル番號(hào)が Json 文字列の場(chǎng)合にそれらの空のコンテンツを表示しないように指定できます。
[JsonProperty(?NullValueHandling?=?NullValueHandling.Ignore)]
この屬性を使用すると、メニューのエンティティクラス情報(bào)のより多くの屬性を統(tǒng)一的に定義でき、View タイプと Click タイプのメニュー屬性の URL とキーをマージできます。
????///?<summary> ????///?菜單基本信息????///?</summary> ????public?class?MenuInfo ????{????????///?<summary> ????????///?按鈕描述,既按鈕名字,不超過16個(gè)字節(jié),子菜單不超過40個(gè)字節(jié)????????///?</summary> ????????public?string?name?{?get;?set;?}????????///?<summary> ????????///?按鈕類型(click或view)????????///?</summary> ????????[JsonProperty(NullValueHandling?=?NullValueHandling.Ignore)]????????public?string?type?{?get;?set;?}????????///?<summary> ????????///?按鈕KEY值,用于消息接口(event類型)推送,不超過128字節(jié)????????///?</summary> ????????[JsonProperty(NullValueHandling?=?NullValueHandling.Ignore)]????????public?string?key?{?get;?set;?}????????///?<summary> ????????///?網(wǎng)頁(yè)鏈接,用戶點(diǎn)擊按鈕可打開鏈接,不超過256字節(jié)????????///?</summary> ????????[JsonProperty(NullValueHandling?=?NullValueHandling.Ignore)]????????public?string?url?{?get;?set;?}????????///?<summary> ????????///?子按鈕數(shù)組,按鈕個(gè)數(shù)應(yīng)為2~5個(gè)????????///?</summary> ????????[JsonProperty(NullValueHandling?=?NullValueHandling.Ignore)]????????public?List<menuinfo>?sub_button?{?get;?set;?} .......</menuinfo>
しかし、情報(bào)が多すぎると、タイプごとに異なる屬性タイプを指定する必要があり、これはあまり面倒ではありませんが、View type メニューで key 屬性を設(shè)定するとどうなるでしょうか。
その解決策は、以下に示すように、さまざまなメニュー情報(bào)を構(gòu)築するために複數(shù)のコンストラクターを定義し、さまざまな種類のメニューのさまざまな屬性にコンストラクターを割り當(dāng)てます。
????????///?<summary> ????????///?參數(shù)化構(gòu)造函數(shù)????????///?</summary> ????????///?<param>按鈕名稱 ????????///?<param>菜單按鈕類型 ????????///?<param>按鈕的鍵值(Click),或者連接URL(View) ????????public?MenuInfo(string?name,?ButtonType?buttonType,?string?value) ????????{????????????this.name?=?name;????????????this.type?=?buttonType.ToString();????????????if?(buttonType?==?ButtonType.click) ????????????{????????????????this.key?=?value; ????????????}????????????else?if(buttonType?==?ButtonType.view) ????????????{????????????????this.url?=?value; ????????????} ????????}
サブメニュー、つまり sub_button 屬性は不要ですが、Name 屬性を指定してその sub_button コレクション オブジェクトを追加する必要があります。サブメニューのオブジェクト情報(bào)を構(gòu)築するコンストラクター。
????????///?<summary> ????????///?參數(shù)化構(gòu)造函數(shù),用于構(gòu)造子菜單????????///?</summary> ????????///?<param>按鈕名稱 ????????///?<param>子菜單集合 ????????public?MenuInfo(string?name,?IEnumerable<menuinfo>?sub_button) ????????{????????????this.name?=?name;????????????this.sub_button?=?new?List<menuinfo>();????????????this.sub_button.AddRange(sub_button); ????????}</menuinfo></menuinfo>
Nameとsub_buttonの屬性內(nèi)容だけを指定しているので、他の內(nèi)容がnullであれば自然に構(gòu)築されるJsonにはそれらが含まれないので完璧です!
メニュー情報(bào)を取得するには、以下に示すように 2 つのエンティティ オブジェクトを定義する必要もあります。
????///?<summary> ????///?菜單的Json字符串對(duì)象????///?</summary> ????public?class?MenuJson ????{????????public?List<menuinfo>?button?{?get;?set;?}????????public?MenuJson() ????????{ ????????????button?=?new?List<menuinfo>(); ????????} ????}????///?<summary> ????///?菜單列表的Json對(duì)象????///?</summary> ????public?class?MenuListJson ????{????????public?MenuJson?menu?{?get;?set;?} ????}</menuinfo></menuinfo>
3. メニュー管理操作のインターフェース実裝
WeChat の定義から、API を介してメニュー情報(bào)を取得し、メニューを作成し、メニューを削除できることがわかります。次に、それらのインターフェースを次のように定義します。 。
????///?<summary> ????///?菜單的相關(guān)操作????///?</summary> ????public?interface?IMenuApi ????{?????????????? ????????///?<summary> ????????///?獲取菜單數(shù)據(jù)????????///?</summary> ????????///?<param>調(diào)用接口憑證 ????????///?<returns></returns> ????????MenuJson?GetMenu(string?accessToken);??????????????????????? ????????///?<summary> ????????///?創(chuàng)建菜單????????///?</summary> ????????///?<param>調(diào)用接口憑證 ????????///?<param>菜單對(duì)象 ????????///?<returns></returns> ????????CommonResult?CreateMenu(string?accessToken,?MenuJson?menuJson);??????????????????????? ????????///?<summary> ????????///?刪除菜單????????///?</summary> ????????///?<param>調(diào)用接口憑證 ????????///?<returns></returns> ????????CommonResult?DeleteMenu(string?accessToken); ????}
メニュー情報(bào)を取得する具體的な実裝は以下の通りです。
????????///?<summary> ????????///?獲取菜單數(shù)據(jù)????????///?</summary> ????????///?<param>調(diào)用接口憑證 ????????///?<returns></returns> ????????public?MenuJson?GetMenu(string?accessToken) ????????{ ????????????MenuJson?menu?=?null;????????????var?url?=?string.Format("http://www.miracleart.cn/{0}",?accessToken); ????????????MenuListJson?list?=?JsonHelper<menulistjson>.ConvertJson(url);????????????if?(list?!=?null) ????????????{ ????????????????menu?=?list.menu; ????????????}????????????return?menu; ????????}</menulistjson>
ここでは、返された Json データを必要なエンティティ情報(bào)に 1 ステップで均一に変換します。
呼び出しコードは次のとおりです。
????????private?void?btnGetMenuJson_Click(object?sender,?EventArgs?e) ????????{ ????????????IMenuApi?menuBLL?=?new?MenuApi(); ????????????MenuJson?menu?=?menuBLL.GetMenu(token);????????????if?(menu?!=?null) ????????????{ ????????????????Console.WriteLine(menu.ToJson()); ????????????} ????????}
メニューオブジェクトの作成と削除の動(dòng)作実裝は以下の通りです。
????????///?<summary> ????????///?創(chuàng)建菜單????????///?</summary> ????????///?<param>調(diào)用接口憑證 ????????///?<param>菜單對(duì)象 ????????///?<returns></returns> ????????public?CommonResult?CreateMenu(string?accessToken,?MenuJson?menuJson) ????????{????????????var?url?=?string.Format("http://www.miracleart.cn/{0}",?accessToken);????????????string?postData?=?menuJson.ToJson();????????????return?Helper.GetExecuteResult(url,?postData); ????????}???????????????? ????????///?<summary> ????????///?刪除菜單????????///?</summary> ????????///?<param>調(diào)用接口憑證 ????????///?<returns></returns> ????????public?CommonResult?DeleteMenu(string?accessToken) ????????{????????????var?url?=?string.Format("http://www.miracleart.cn/{0}",?accessToken);????????????return?Helper.GetExecuteResult(url); ????????}
これを見て、エンティティクラスを簡(jiǎn)略化した場(chǎng)合、メニューの作成、特に対応する情報(bào)の構(gòu)築方法が面倒ではないのかと疑問に思う人もいるかもしれません。以前にさまざまなコンストラクターを?qū)毪筏蓼筏郡瑜? それを使用すると、メニュー情報(bào)を処理するためにあまりにも多くのエンティティ クラスとその継承関係を覚える必要がなくなります。
????????private?void?btnCreateMenu_Click(object?sender,?EventArgs?e) ????????{??????????????????????? ????????????MenuInfo?productInfo?=?new?MenuInfo("軟件產(chǎn)品",?new?MenuInfo[]?{? ????????????????new?MenuInfo("病人資料管理系統(tǒng)",?ButtonType.click,?"patient"),? ????????????????new?MenuInfo("客戶關(guān)系管理系統(tǒng)",?ButtonType.click,?"crm"),? ????????????????new?MenuInfo("酒店管理系統(tǒng)",?ButtonType.click,?"hotel"),? ????????????????new?MenuInfo("送水管理系統(tǒng)",?ButtonType.click,?"water") ????????????});???????????????????????????????????? ????????????MenuInfo?frameworkInfo?=?new?MenuInfo("框架產(chǎn)品",?new?MenuInfo[]?{? ????????????????new?MenuInfo("Win開發(fā)框架",?ButtonType.click,?"win"),????????????????new?MenuInfo("WCF開發(fā)框架",?ButtonType.click,?"wcf"),????????????????new?MenuInfo("混合式框架",?ButtonType.click,?"mix"),? ????????????????new?MenuInfo("Web開發(fā)框架",?ButtonType.click,?"web"),????????????????new?MenuInfo("代碼生成工具",?ButtonType.click,?"database2sharp") ????????????}); ????????????MenuInfo?relatedInfo?=?new?MenuInfo("相關(guān)鏈接",?new?MenuInfo[]?{? ????????????????new?MenuInfo("公司介紹",?ButtonType.click,?"Event_Company"),????????????????new?MenuInfo("官方網(wǎng)站",?ButtonType.view,?"http://www.miracleart.cn/"),????????????????new?MenuInfo("提點(diǎn)建議",?ButtonType.click,?"Event_Suggestion"),????????????????new?MenuInfo("聯(lián)系客服",?ButtonType.click,?"Event_Contact"),????????????????new?MenuInfo("發(fā)郵件",?ButtonType.view,?"http://www.miracleart.cn/") ????????????}); ????????????MenuJson?menuJson?=?new?MenuJson(); ????????????menuJson.button.AddRange(new?MenuInfo[]?{?productInfo,?frameworkInfo,?relatedInfo?});????????????//Console.WriteLine(menuJson.ToJson()); ????????????if?(MessageUtil.ShowYesNoAndWarning("您確認(rèn)要?jiǎng)?chuàng)建菜單嗎")?==?System.Windows.Forms.DialogResult.Yes) ????????????{ ????????????????IMenuApi?menuBLL?=?new?MenuApi(); ????????????????CommonResult?result?=?menuBLL.CreateMenu(token,?menuJson); ????????????????Console.WriteLine("創(chuàng)建菜單:"?+?(result.Success???"成功"?:?"失敗:"?+?result.ErrorMessage)); ????????????} ????????}
這個(gè)就是我微信門戶里面的菜單操作了,具體效果可以關(guān)注我的微信門戶:廣州愛奇迪,也可以掃描下面二維碼進(jìn)行關(guān)注了解。
菜單的效果如下:
更多WeChat ポータルとアプリケーションの C# 開発 (6) ~ WeChat ポータル メニューの管理操作相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

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

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

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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