Maison  >  Article  >  Applet WeChat  >  Développement de la plateforme publique WeChat : description de l'interface de menu personnalisée

Développement de la plateforme publique WeChat : description de l'interface de menu personnalisée

高洛峰
高洛峰original
2017-02-27 13:45:092396parcourir

Il n'y a pas si longtemps, WeChat a lancé une interface de menu personnalisée et le SDK Senparc.Weixin a également été mis à jour simultanément.

Cette mise à jour met à niveau la version Senparc.Weixin.MP vers la v13.5.2, qui dépend de la version Senparc.Weixin 4.5.4. Les deux branches de .NET4.5(master) / .NET4.0 ont été mises à jour simultanément.

En raison des changements importants apportés au menu personnalisé, toute l'interface du menu a été reconstruite dans la plus grande zone jusqu'à présent (elle peut être rétrocompatible).

Par rapport au menu personnalisé précédent, les fonctions actuelles liées au menu ont été entièrement organisées en fonction de la structure du fichier :

Développement de la plateforme publique WeChat : description de linterface de menu personnalisée

Interface

Les interfaces de menu ont toutes été classées dans le répertoire CommonAPIs/Menu. Il y a 3 fichiers de classe sous la section CommonApi :

 
文件名 说明
CommonApi.Menu.Common.cs 菜单公共方法
CommonApi.Menu.Conditional.cs 个性化菜单
CommonApi.Menu.Custom.cs 普通自定义菜单

Fichier d'interface de menu

L'interface du menu personnalisé a été assurée pour être rétrocompatible. S'il existe des projets qui ont développé des fonctions de menu personnalisées dans le passé, vous pouvez mettre à niveau en toute confiance.

Le contenu de la classe menu personnalisé est le suivant :

/*----------------------------------------------------------------
    Copyright (C) 2015 Senparc
    
    文件名:CommonApi.Menu.Conditional
    文件功能描述:个性化自定义菜单接口
    
    
    创建标识: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>
        /// 创建个新华菜单
        /// </summary>
        /// <param name="accessTokenOrAppId">AccessToken或AppId。当为AppId时,如果AccessToken错误将自动获取一次。当为null时,获取当前注册的第一个AppId。</param>
        /// <param name="buttonData">菜单内容</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>
        /// 测试个性化菜单匹配结果
        /// </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);

        }

        /* 使用普通自定义菜单删除接口可以删除所有自定义菜单(包括默认菜单和全部个性化菜单),请见自定义菜单删除接口的说明。 */
    }
}


Dans la méthode publique menu, la méthode GetButtonGroup() ajoute un paramètre : ButtonGroup pour spécifier le type de liste de boutons de menu (qu'il s'agisse d'un menu personnalisé ou d'un menu personnalisé).

 

Entity

Les modifications liées aux classes d'entités sont reflétées dans le répertoire Entities/Menu, et l'interface IButtonGroupBase et la classe de base ButtonGroupBase sont nouvellement créées. Les boutons ButtonGroup (menu personnalisé) et ConditionalButtonGroup (menu personnalisé) héritent tous deux de ButtonGroupBase.

Tous les types de boutons du répertoire Entities/Menu/Buttons/ sont communs.

Type de retour

Les types de retour réorganisés se trouvent dans le répertoire Entities/JsonResult/Menu/ :

Développement de la plateforme publique WeChat : description de linterface de menu personnalisée

Remarques

  1. Les interfaces d'ajout et de suppression de menus pour les menus personnalisés et les menus personnalisés sont différentes, et vous devez appeler différentes interfaces lorsque vous les utilisez.

  2. Si vous utilisez un menu personnalisé, au moins une règle du MenuMatchRule doit être renseignée.

  3. Les données renvoyées lors de l'obtention du menu sont différentes pour l'utilisation du menu personnalisé et pour ne pas l'utiliser (le premier inclut le second), donc le SDK ne fournit la même que pour ces deux cas . Entité : GetMenuResult (l'entité de message de réception correspondante est GetMenuResultFull). Les informations (liste) sur les menus Xinhua peuvent être lues directement depuis GetMenuResult.conditionalmenu. Si elles sont nulles ou si la liste est vide, cela signifie qu'il n'y a pas de menu personnalisé.

Tests et édition visuelle

Un outil d'édition visuelle simple est fourni dans le code source, et le format de données JSON du menu résultant peut être visualisé (Ce qui est affiché est le JSON converti par l'entité exploitée, pas le JSON d'origine).


Pour plus de développement de la plateforme publique WeChat : instructions d'interface de menu personnalisées et articles connexes, veuillez faire attention au site Web PHP chinois !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn