?? ????? WeChat ?? ? ??????? C# ??? ?? ??? ?? ?? ? ?? ?? ??? ???? ????. ????? ?? ???? ?? ??? ?? ???? ????. ????? WeChat ??????? ?? ??? ???? ?? ???????? ??? ? ??? ?? ??? ???? ??? ???? ????. ? ?????? ???? WeChat ?? ??? ?? ??? ?????.
1. ?? ?? ??
?? ?? ??? ?? ?? ??? ??? ?? ?? ?? ? ??? ??? ? ??? ?? ??? ??? ? ????. ??? ??? ??? ????, ??? ??? ?? ??? ?? ? ????. ? ???? ?? ??? ?? ??? ???, ?? ??? ?? WeChat ?? ???? ??? ????, ?? ??? ???? WeChat API ? POST ???? WeChat ??? ???? ??? ??? ???? ??? ? ??? ?????. ?? ?? ???? ?????. ? ???? ?? ?? ??? ?? ?? ?? ??? ?????.
??? ??? ?? ??? ?????? ???? ?? ???? ?? ??? ??? ? ??? ? ? ??? ? ??? ?????. ?? ??? ?? ???? ?? 3?? 1?? ??? ????, ? 1?? ???? ?? 5?? 2?? ??? ?????. 1?? ???? ?? 4?? ??? ??? ? ???, 2?? ???? ?? 7?? ??? ??? ? ????. ?? ??? "..."?? ?????. ?? ??? ?? ?? ?????? ??? ?? ? ?? ??? ??? ??? ? ????.
click: 用戶點(diǎn)擊click類(lèi)型按鈕后,微信服務(wù)器會(huì)通過(guò)消息接口推送消息類(lèi)型為event????的結(jié)構(gòu)給開(kāi)發(fā)者(參考消息接口指南),并且?guī)习粹o中開(kāi)發(fā)者填寫(xiě)的key值,開(kāi)發(fā)者可以通過(guò)自定義的key值與用戶進(jìn)行交互; view: 用戶點(diǎn)擊view類(lèi)型按鈕后,微信客戶端將會(huì)打開(kāi)開(kāi)發(fā)者在按鈕中填寫(xiě)的url值????(即網(wǎng)頁(yè)鏈接),達(dá)到打開(kāi)網(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" ????????????}] ???????}] ?}
??? ?? ?? ???? ?? ??? ???? ?? ? ? ????. ?? ?? ?? ???? url ??? ??, ???? ? ??? ????. ??? ?? ?? sub_button ??? ?? ? ????. ????? ?? ?? ??? ??? ??? ???? ?? ? ?? ??? ?? ????.
2. ?? ??? ??? ??
??? ?? ??? ???? ??? ?? ??? ??? ?? ??? ??? ???? WeChat ????? ?? ??? ? ?? ????. , ???? ??? ??? ????.
?? ???? ?? ?? ??? ??? ??? ? ???, ??? ???? ???? ?????. ??? Json.NET? ?? ?? ?? ??? ???? ?? ??? Json ???? ?? ? ??? ???? ??? ??? ? ????.
[JsonProperty(?NullValueHandling?=?NullValueHandling.Ignore)]
? ??? ???? ??? ??? ??? ??? ?? ? ?? ??? ???? ??? ? ????. ?? ??? ?? ?? ?? ??? ??? ? ????. URL? ?? ?? ?????.
????///?<summary> ????///?菜單基本信息????///?</summary> ????public?class?MenuInfo ????{????????///?<summary> ????????///?按鈕描述,既按鈕名字,不超過(guò)16個(gè)字節(jié),子菜單不超過(guò)40個(gè)字節(jié)????????///?</summary> ????????public?string?name?{?get;?set;?}????????///?<summary> ????????///?按鈕類(lèi)型(click或view)????????///?</summary> ????????[JsonProperty(NullValueHandling?=?NullValueHandling.Ignore)]????????public?string?type?{?get;?set;?}????????///?<summary> ????????///?按鈕KEY值,用于消息接口(event類(lèi)型)推送,不超過(guò)128字節(jié)????????///?</summary> ????????[JsonProperty(NullValueHandling?=?NullValueHandling.Ignore)]????????public?string?key?{?get;?set;?}????????///?<summary> ????????///?網(wǎng)頁(yè)鏈接,用戶點(diǎn)擊按鈕可打開(kāi)鏈接,不超過(guò)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>
??? ??? ?? ??? ???? ?? ?? ?? ??? ???? ???, ?? ?? ???? ????. ?? ?? ??, ? ??? ???????. ??? ?? ????
???? ??? ?? ??? ???? ?? ?? ???? ???? ????. ??? ?? ??? ??? ??? ?? ??? ??? ???? ?????.
????????///?<summary> ????????///?參數(shù)化構(gòu)造函數(shù)????????///?</summary> ????????///?<param>按鈕名稱(chēng) ????????///?<param>菜單按鈕類(lèi)型 ????????///?<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 ??? ??? ???? ?? ??? ?? ??? ???? ???? ?????.
????????///?<summary> ????????///?參數(shù)化構(gòu)造函數(shù),用于構(gòu)造子菜單????????///?</summary> ????????///?<param>按鈕名稱(chēng) ????????///?<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? ?? ??? ???? ??? ?? ??? null?? ????? ??? Json?? ?? ??? ???? ???? ?????. !
?? ??? ???? ??? ?? ? ?? ??? ??? ???? ???.
????///?<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 ??, ?? ??, ?? ??? ?? ?????? ??? ?? ?????.
????///?<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); ????}
?? ?? ??? ???? ??? ??? ????.
????????///?<summary> ????????///?獲取菜單數(shù)據(jù)????????///?</summary> ????????///?<param>調(diào)用接口憑證 ????????///?<returns></returns> ????????public?MenuJson?GetMenu(string?accessToken) ????????{ ????????????MenuJson?menu?=?null;????????????var?url?=?string.Format("http://m.miracleart.cn/{0}",?accessToken); ????????????MenuListJson?list?=?JsonHelper<menulistjson>.ConvertJson(url);????????????if?(list?!=?null) ????????????{ ????????????????menu?=?list.menu; ????????????}????????????return?menu; ????????}</menulistjson>
??? Json ???? ??? ??? ??? ? ??? ???? ???? ?????.
?? ??? ??? ????.
????????private?void?btnGetMenuJson_Click(object?sender,?EventArgs?e) ????????{ ????????????IMenuApi?menuBLL?=?new?MenuApi(); ????????????MenuJson?menu?=?menuBLL.GetMenu(token);????????????if?(menu?!=?null) ????????????{ ????????????????Console.WriteLine(menu.ToJson()); ????????????} ????????}
?? ?? ?? ? ?? ??? ??? ?? ?????.
??????? ?? ??? ???? ?????? ??, ?? ??? ??? ?? ???? ???? ?? ??? ?? ????. ?? ??? ??? ????? ???? ??? ?? ???? ???? ????? ?? ??? ???? ?? ?? ?? ??? ???? ?? ?? ??? ??? ??? ????.
????????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開(kāi)發(fā)框架",?ButtonType.click,?"win"),????????????????new?MenuInfo("WCF開(kāi)發(fā)框架",?ButtonType.click,?"wcf"),????????????????new?MenuInfo("混合式框架",?ButtonType.click,?"mix"),? ????????????????new?MenuInfo("Web開(kāi)發(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://m.miracleart.cn/"),????????????????new?MenuInfo("提點(diǎn)建議",?ButtonType.click,?"Event_Suggestion"),????????????????new?MenuInfo("聯(lián)系客服",?ButtonType.click,?"Event_Contact"),????????????????new?MenuInfo("發(fā)郵件",?ButtonType.view,?"http://m.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è)就是我微信門(mén)戶里面的菜單操作了,具體效果可以關(guān)注我的微信門(mén)戶:廣州愛(ài)奇迪,也可以掃描下面二維碼進(jìn)行關(guān)注了解。
菜單的效果如下:
更多C# ?? ?? ? ?????? ??(6) - ?? ?? ?? ?? ??相關(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 ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)