前不久微信上線(xiàn)了個(gè)性化菜單接口,Senparc.Weixin SDK也已經(jīng)同步更新。
本次更新升級(jí)Senparc.Weixin.MP版本到v13.5.2,依賴(lài)Senparc.Weixin版本4.5.4。.NET4.5(master) / .NET4.0兩個(gè)分支都已同步更新。
由于個(gè)性化菜單變化比較大,所以對(duì)整個(gè)菜單接口進(jìn)行了目前為止最大面積的重構(gòu)(可以向下兼容)。
相比之前的自定義菜單,目前整個(gè)菜單相關(guān)功能針對(duì)文件結(jié)構(gòu)進(jìn)行了全面的整理,:
?
接口
菜單接口已經(jīng)全部歸入CommonAPIs/Menu目錄下,CommonApi部分類(lèi)下面再分出3個(gè)類(lèi)文件:
文件名 | 說(shuō)明 |
CommonApi.Menu.Common.cs | 菜單公共方法 |
CommonApi.Menu.Conditional.cs | 個(gè)性化菜單 |
CommonApi.Menu.Custom.cs | 普通自定義菜單 |
菜單接口文件
其中自定義菜單接口已經(jīng)確保向下兼容,以前如果有已經(jīng)開(kāi)發(fā)自定義菜單功能的項(xiàng)目,可以放心升級(jí)。
個(gè)性化菜單類(lèi)內(nèi)容如下:
/*---------------------------------------------------------------- Copyright (C) 2015 Senparc 文件名:CommonApi.Menu.Conditional 文件功能描述:個(gè)性化自定義菜單接口 創(chuàng)建標(biāo)識(shí):Senparc - 20151222 修改標(biāo)識(shí):Senparc - 20151222 修改描述:v13.5.1 添加個(gè)性化菜單接口 ----------------------------------------------------------------*/ /* API:http://mp.weixin.qq.com/wiki/0/c48ccd12b69ae023159b4bfaa7c39c20.html */ using Senparc.Weixin.Entities; using Senparc.Weixin.Helpers; using Senparc.Weixin.MP.Entities; using Senparc.Weixin.MP.Entities.Menu; namespace Senparc.Weixin.MP.CommonAPIs { public partial class CommonApi { /// <summary> /// 創(chuàng)建個(gè)新華菜單 /// </summary> /// <param name="accessTokenOrAppId">AccessToken或AppId。當(dāng)為AppId時(shí),如果AccessToken錯(cuò)誤將自動(dòng)獲取一次。當(dāng)為null時(shí),獲取當(dāng)前注冊(cè)的第一個(gè)AppId。</param> /// <param name="buttonData">菜單內(nèi)容</param> /// <returns></returns> public static CreateMenuConditionalResult CreateMenuConditional(string accessTokenOrAppId, ConditionalButtonGroup buttonData, int timeOut = Config.TIME_OUT) { return ApiHandlerWapper.TryCommonApi(accessToken => { var urlFormat = "https://api.weixin.qq.com/cgi-bin/menu/addconditional?access_token={0}"; var jsonSetting = new JsonSetting(true); return CommonJsonSend.Send<CreateMenuConditionalResult>(accessToken, urlFormat, buttonData, timeOut: timeOut, jsonSetting: jsonSetting); }, accessTokenOrAppId); } #region GetMenu /* 使用普通自定義菜單查詢(xún)接口可以獲取默認(rèn)菜單和全部個(gè)性化菜單信息,請(qǐng)見(jiàn)自定義菜單查詢(xún)接口的說(shuō)明 */ /// <summary> /// 測(cè)試個(gè)性化菜單匹配結(jié)果 /// </summary> /// <param name="accessTokenOrAppId"></param> /// <param name="userId">可以是粉絲的OpenID,也可以是粉絲的微信號(hào)。</param> /// <returns></returns> public static MenuTryMatchResult TryMatch(string accessTokenOrAppId, string userId) { return ApiHandlerWapper.TryCommonApi(accessToken => { var url = string.Format("https://api.weixin.qq.com/cgi-bin/menu/delconditional?access_token={0}", accessToken); var data = new { user_id = userId }; return CommonJsonSend.Send<MenuTryMatchResult>(accessToken, url, data, CommonJsonSendType.POST); }, accessTokenOrAppId); } #endregion /// <summary> /// 刪除菜單 /// </summary> /// <param name="accessTokenOrAppId"></param> /// <param name="menuId">菜單Id</param> /// <returns></returns> public static WxJsonResult DeleteMenuConditional(string accessTokenOrAppId, string menuId) { return ApiHandlerWapper.TryCommonApi(accessToken => { var url = string.Format("https://api.weixin.qq.com/cgi-bin/menu/delconditional?access_token={0}", accessToken); var data = new { menuId = menuId }; return CommonJsonSend.Send(accessToken, url, data, CommonJsonSendType.POST); }, accessTokenOrAppId); } /* 使用普通自定義菜單刪除接口可以刪除所有自定義菜單(包括默認(rèn)菜單和全部個(gè)性化菜單),請(qǐng)見(jiàn)自定義菜單刪除接口的說(shuō)明。 */ } }
菜單公共方法中,GetButtonGroup()方法添加了一個(gè)參數(shù):buttonGroup,用于指定菜單按鈕列表類(lèi)型(屬于個(gè)性化菜單還是自定義菜單)。
實(shí)體
有關(guān)實(shí)體類(lèi)的變化都體現(xiàn)在Entities/Menu目錄下,新建了IButtonGroupBase接口以及ButtonGroupBase基類(lèi)。ButtonGroup(自定義菜單)和ConditionalButtonGroup(個(gè)性化菜單)按鈕都繼承自ButtonGroupBase。
Entities/Menu/Buttons/目錄下的所有按鈕類(lèi)型是通用的。
?
返回類(lèi)型
重新整理的返回類(lèi)型都在Entities/JsonResult/Menu/目錄下:
?
?
注意點(diǎn)
自定義菜單和個(gè)性化菜單的菜單添加、刪除接口是不同的,使用的時(shí)候需要調(diào)用各自不同的接口。
如果使用個(gè)性化菜單,MenuMatchRule中的規(guī)則必須至少填寫(xiě)一個(gè)。
對(duì)于使用了個(gè)性化菜單和不使用,獲取菜單時(shí)返回的數(shù)據(jù)是不同的(前者包含后者),因此SDK針對(duì)這兩種情況只提供了同一個(gè)實(shí)體:GetMenuResult(對(duì)應(yīng)的接收消息實(shí)體為GetMenuResultFull)。有關(guān)個(gè)新華菜單的信息(列表)可以直接從GetMenuResult.conditionalmenu讀取,如果為null或者列表為空,則表示沒(méi)有個(gè)性化菜單。
?
測(cè)試和可視化編輯
源代碼中提供了一個(gè)簡(jiǎn)易的可視化編輯工具,同時(shí)可以查看得到的菜單JSON數(shù)據(jù)格式(顯示的是操作的實(shí)體轉(zhuǎn)換成的JSON,非原始JSON)。
更多微信公眾平臺(tái)開(kāi)發(fā):個(gè)性化菜單接口說(shuō)明相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!

熱AI工具

Undress AI Tool
免費(fèi)脫衣服圖片

Undresser.AI Undress
人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線(xiàn)人工智能工具。

Clothoff.io
AI脫衣機(jī)

Video Face Swap
使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱門(mén)文章

熱工具

記事本++7.3.1
好用且免費(fèi)的代碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)代碼編輯軟件(SublimeText3)