Senparc.Weixin.MP SDK 微信公众平台开发教程(十七):个性化菜单接口说明
2015-12-22 16:49
1096 查看
前不久微信上线了个性化菜单接口,Senparc.Weixin SDK也已经同步更新。
本次更新升级Senparc.Weixin.MP版本到v13.5.2,依赖Senparc.Weixin版本4.5.4。.NET4.5(master) / .NET4.0两个分支都已同步更新。
由于个性化菜单变化比较大,所以对整个菜单接口进行了目前为止最大面积的重构(可以向下兼容)。
相比之前的自定义菜单,目前整个菜单相关功能针对文件结构进行了全面的整理,:
View Code
菜单公共方法中,GetButtonGroup()方法添加了一个参数:buttonGroup,用于指定菜单按钮列表类型(属于个性化菜单还是自定义菜单)。
Entities/Menu/Buttons/目录下的所有按钮类型是通用的。
如果使用个性化菜单,MenuMatchRule中的规则必须至少填写一个。
对于使用了个性化菜单和不使用,获取菜单时返回的数据是不同的(前者包含后者),因此SDK针对这两种情况只提供了同一个实体:GetMenuResult(对应的接收消息实体为GetMenuResultFull)。有关个新华菜单的信息(列表)可以直接从GetMenuResult.conditionalmenu读取,如果为null或者列表为空,则表示没有个性化菜单。
地址:http://weixin.senparc.com/Menu
Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册
Senparc.Weixin.MP SDK 微信公众平台开发教程(二):成为开发者
Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证
Senparc.Weixin.MP SDK 微信公众平台开发教程(四):Hello World
Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK
Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler
Senparc.Weixin.MP SDK 微信公众平台开发教程(七):解决用户上下文(Session)问题
Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明
Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明
Senparc.Weixin.MP SDK 微信公众平台开发教程(十):多客服接口说明
Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明
Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明
Senparc.Weixin.MP SDK 微信公众平台开发教程(十三):地图相关接口说明
Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重
Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密
Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制
Senparc.Weixin.MP SDK 微信公众平台开发教程(十七):个性化菜单接口说明
Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能
本次更新升级Senparc.Weixin.MP版本到v13.5.2,依赖Senparc.Weixin版本4.5.4。.NET4.5(master) / .NET4.0两个分支都已同步更新。
由于个性化菜单变化比较大,所以对整个菜单接口进行了目前为止最大面积的重构(可以向下兼容)。
相比之前的自定义菜单,目前整个菜单相关功能针对文件结构进行了全面的整理,:
/*---------------------------------------------------------------- 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); } /* 使用普通自定义菜单删除接口可以删除所有自定义菜单(包括默认菜单和全部个性化菜单),请见自定义菜单删除接口的说明。 */ } }
View Code
菜单公共方法中,GetButtonGroup()方法添加了一个参数:buttonGroup,用于指定菜单按钮列表类型(属于个性化菜单还是自定义菜单)。
实体
有关实体类的变化都体现在Entities/Menu目录下,新建了IButtonGroupBase接口以及ButtonGroupBase基类。ButtonGroup(自定义菜单)和ConditionalButtonGroup(个性化菜单)按钮都继承自ButtonGroupBase。Entities/Menu/Buttons/目录下的所有按钮类型是通用的。
返回类型
重新整理的返回类型都在Entities/JsonResult/Menu/目录下:注意点
自定义菜单和个性化菜单的菜单添加、删除接口是不同的,使用的时候需要调用各自不同的接口。如果使用个性化菜单,MenuMatchRule中的规则必须至少填写一个。
对于使用了个性化菜单和不使用,获取菜单时返回的数据是不同的(前者包含后者),因此SDK针对这两种情况只提供了同一个实体:GetMenuResult(对应的接收消息实体为GetMenuResultFull)。有关个新华菜单的信息(列表)可以直接从GetMenuResult.conditionalmenu读取,如果为null或者列表为空,则表示没有个性化菜单。
测试和可视化编辑
源代码中提供了一个简易的可视化编辑工具,同时可以查看得到的菜单JSON数据格式(显示的是操作的实体转换成的JSON,非原始JSON)。地址:http://weixin.senparc.com/Menu
系列教程索引
地址:/article/4837502.htmlSenparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册
Senparc.Weixin.MP SDK 微信公众平台开发教程(二):成为开发者
Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证
Senparc.Weixin.MP SDK 微信公众平台开发教程(四):Hello World
Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK
Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler
Senparc.Weixin.MP SDK 微信公众平台开发教程(七):解决用户上下文(Session)问题
Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明
Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明
Senparc.Weixin.MP SDK 微信公众平台开发教程(十):多客服接口说明
Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明
Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明
Senparc.Weixin.MP SDK 微信公众平台开发教程(十三):地图相关接口说明
Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重
Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密
Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制
Senparc.Weixin.MP SDK 微信公众平台开发教程(十七):个性化菜单接口说明
Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能
相关文章推荐
- 闪客工具:微信本地调试工具
- Android微信分享 一闪而过 的解决方法
- cc2541 cc2640 接入微信AirSync协议
- 微信生成二维码
- 分享Android微信红包插件
- java接入微信公众平台
- 仿微信图片选择及多张图片上传
- 微信证书问题
- 【学习】Android 高仿微信图片选择器
- 仿微信雷达扫描
- 微信开放平台开发(2) 微信登录
- 微信开放平台开发(1) 语义理解
- ShareSDK 微信及其朋友圈集成步骤
- java 复制 删除 改文件 后缀名小程序
- 微信生态圈盈利模式分析
- android中service的总结,特别是关于如何设置类似qq,微信防止被清除
- Android 仿微信支付密码输入框
- 微信公众号antian365sec
- iOS之微信支付开发
- Android应用实现微信登录与分享