溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

微信公眾平臺開發(fā)之個性化菜單接口的示例分析

發(fā)布時間:2021-09-10 11:37:30 來源:億速云 閱讀:114 作者:小新 欄目:移動開發(fā)

這篇文章主要為大家展示了“微信公眾平臺開發(fā)之個性化菜單接口的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學習一下“微信公眾平臺開發(fā)之個性化菜單接口的示例分析”這篇文章吧。

前不久微信上線了個性化菜單接口,Senparc.Weixin SDK也已經(jīng)同步更新。

本次更新升級Senparc.Weixin.MP版本到v13.5.2,依賴Senparc.Weixin版本4.5.4。.NET4.5(master) / .NET4.0兩個分支都已同步更新。

由于個性化菜單變化比較大,所以對整個菜單接口進行了目前為止最大面積的重構(gòu)(可以向下兼容)。

相比之前的自定義菜單,目前整個菜單相關(guān)功能針對文件結(jié)構(gòu)進行了全面的整理,:

微信公眾平臺開發(fā)之個性化菜單接口的示例分析

接口

  菜單接口已經(jīng)全部歸入CommonAPIs/Menu目錄下,CommonApi部分類下面再分出3個類文件:


文件名說明
CommonApi.Menu.Common.cs菜單公共方法
CommonApi.Menu.Conditional.cs個性化菜單
CommonApi.Menu.Custom.cs普通自定義菜單

菜單接口文件

  其中自定義菜單接口已經(jīng)確保向下兼容,以前如果有已經(jīng)開發(fā)自定義菜單功能的項目,可以放心升級。

  個性化菜單類內(nèi)容如下:

/*----------------------------------------------------------------
    Copyright (C) 2015 Senparc
    
    文件名:CommonApi.Menu.Conditional
    文件功能描述:個性化自定義菜單接口
    
    
    創(chuàng)建標識:Senparc - 20151222
        
    修改標識:Senparc - 20151222
    修改描述:v13.5.1 添加個性化菜單接口
----------------------------------------------------------------*/

/*
    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)建個新華菜單
        /// </summary>
        /// <param name="accessTokenOrAppId">AccessToken或AppId。當為AppId時,如果AccessToken錯誤將自動獲取一次。當為null時,獲取當前注冊的第一個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

        /* 使用普通自定義菜單查詢接口可以獲取默認菜單和全部個性化菜單信息,請見自定義菜單查詢接口的說明 */

        /// <summary>
        /// 測試個性化菜單匹配結(jié)果
        /// </summary>
        /// <param name="accessTokenOrAppId"></param>
        /// <param name="userId">可以是粉絲的OpenID,也可以是粉絲的微信號。</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);

        }

        /* 使用普通自定義菜單刪除接口可以刪除所有自定義菜單(包括默認菜單和全部個性化菜單),請見自定義菜單刪除接口的說明。 */
    }
}

  菜單公共方法中,GetButtonGroup()方法添加了一個參數(shù):buttonGroup,用于指定菜單按鈕列表類型(屬于個性化菜單還是自定義菜單)。

實體

  有關(guān)實體類的變化都體現(xiàn)在Entities/Menu目錄下,新建了IButtonGroupBase接口以及ButtonGroupBase基類。ButtonGroup(自定義菜單)和ConditionalButtonGroup(個性化菜單)按鈕都繼承自ButtonGroupBase。

  Entities/Menu/Buttons/目錄下的所有按鈕類型是通用的。

返回類型

  重新整理的返回類型都在Entities/JsonResult/Menu/目錄下:

微信公眾平臺開發(fā)之個性化菜單接口的示例分析

注意點

  1. 自定義菜單和個性化菜單的菜單添加、刪除接口是不同的,使用的時候需要調(diào)用各自不同的接口。

  2. 如果使用個性化菜單,MenuMatchRule中的規(guī)則必須至少填寫一個。

  3. 對于使用了個性化菜單和不使用,獲取菜單時返回的數(shù)據(jù)是不同的(前者包含后者),因此SDK針對這兩種情況只提供了同一個實體:GetMenuResult(對應(yīng)的接收消息實體為GetMenuResultFull)。有關(guān)個新華菜單的信息(列表)可以直接從GetMenuResult.conditionalmenu讀取,如果為null或者列表為空,則表示沒有個性化菜單。

測試和可視化編輯

  源代碼中提供了一個簡易的可視化編輯工具,同時可以查看得到的菜單JSON數(shù)據(jù)格式(顯示的是操作的實體轉(zhuǎn)換成的JSON,非原始JSON)。

以上是“微信公眾平臺開發(fā)之個性化菜單接口的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI