Senparc.Weixin.MP SDK 微信公众平台开发教程(十七):个性化菜单接口说明

简介:   前不久微信上线了个性化菜单接口,Senparc.Weixin SDK也已经同步更新。   本次更新升级Senparc.Weixin.MP版本到v13.5.2,依赖Senparc.Weixin版本4.5.4。

  前不久微信上线了个性化菜单接口,Senparc.Weixin SDK也已经同步更新。

  本次更新升级Senparc.Weixin.MP版本到v13.5.2,依赖Senparc.Weixin版本4.5.4。.NET4.5(master) / .NET4.0两个分支都已同步更新。

  由于个性化菜单变化比较大,所以对整个菜单接口进行了目前为止最大面积的重构(可以向下兼容)。

  相比之前的自定义菜单,目前整个菜单相关功能针对文件结构进行了全面的整理,:

 

接口

  菜单接口已经全部归入CommonAPIs/Menu目录下,CommonApi部分类下面再分出3个类文件:

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

菜单接口文件

  其中自定义菜单接口已经确保向下兼容,以前如果有已经开发自定义菜单功能的项目,可以放心升级。

  个性化菜单类内容如下:

 1 /*----------------------------------------------------------------
 2     Copyright (C) 2015 Senparc
 3     
 4     文件名:CommonApi.Menu.Conditional
 5     文件功能描述:个性化自定义菜单接口
 6     
 7     
 8     创建标识:Senparc - 20151222
 9         
10     修改标识:Senparc - 20151222
11     修改描述:v13.5.1 添加个性化菜单接口
12 ----------------------------------------------------------------*/
13 
14 /*
15     API:http://mp.weixin.qq.com/wiki/0/c48ccd12b69ae023159b4bfaa7c39c20.html
16  */
17 
18 using Senparc.Weixin.Entities;
19 using Senparc.Weixin.Helpers;
20 using Senparc.Weixin.MP.Entities;
21 using Senparc.Weixin.MP.Entities.Menu;
22 
23 namespace Senparc.Weixin.MP.CommonAPIs
24 {
25     public partial class CommonApi
26     {
27         /// <summary>
28         /// 创建个新华菜单
29         /// </summary>
30         /// <param name="accessTokenOrAppId">AccessToken或AppId。当为AppId时,如果AccessToken错误将自动获取一次。当为null时,获取当前注册的第一个AppId。</param>
31         /// <param name="buttonData">菜单内容</param>
32         /// <returns></returns>
33         public static CreateMenuConditionalResult CreateMenuConditional(string accessTokenOrAppId, ConditionalButtonGroup buttonData, int timeOut = Config.TIME_OUT)
34         {
35             return ApiHandlerWapper.TryCommonApi(accessToken =>
36              {
37                  var urlFormat = "https://api.weixin.qq.com/cgi-bin/menu/addconditional?access_token={0}";
38                  var jsonSetting = new JsonSetting(true);
39                  return CommonJsonSend.Send<CreateMenuConditionalResult>(accessToken, urlFormat, buttonData, timeOut: timeOut, jsonSetting: jsonSetting);
40 
41              }, accessTokenOrAppId);
42         }
43 
44 
45         #region GetMenu
46 
47         /* 使用普通自定义菜单查询接口可以获取默认菜单和全部个性化菜单信息,请见自定义菜单查询接口的说明 */
48 
49         /// <summary>
50         /// 测试个性化菜单匹配结果
51         /// </summary>
52         /// <param name="accessTokenOrAppId"></param>
53         /// <param name="userId">可以是粉丝的OpenID,也可以是粉丝的微信号。</param>
54         /// <returns></returns>
55         public static MenuTryMatchResult TryMatch(string accessTokenOrAppId, string userId)
56         {
57             return ApiHandlerWapper.TryCommonApi(accessToken =>
58             {
59                 var url = string.Format("https://api.weixin.qq.com/cgi-bin/menu/delconditional?access_token={0}", accessToken);
60 
61                 var data = new
62                 {
63                     user_id = userId
64                 };
65 
66                 return CommonJsonSend.Send<MenuTryMatchResult>(accessToken, url, data, CommonJsonSendType.POST);
67 
68             }, accessTokenOrAppId);
69         }
70 
71         #endregion
72 
73         /// <summary>
74         /// 删除菜单
75         /// </summary>
76         /// <param name="accessTokenOrAppId"></param>
77         /// <param name="menuId">菜单Id</param>
78         /// <returns></returns>
79         public static WxJsonResult DeleteMenuConditional(string accessTokenOrAppId, string menuId)
80         {
81             return ApiHandlerWapper.TryCommonApi(accessToken =>
82             {
83                 var url = string.Format("https://api.weixin.qq.com/cgi-bin/menu/delconditional?access_token={0}", accessToken);
84 
85                 var data = new
86                 {
87                     menuId = menuId
88                 };
89 
90                 return CommonJsonSend.Send(accessToken, url, data, CommonJsonSendType.POST);
91 
92             }, accessTokenOrAppId);
93 
94         }
95 
96         /* 使用普通自定义菜单删除接口可以删除所有自定义菜单(包括默认菜单和全部个性化菜单),请见自定义菜单删除接口的说明。 */
97     }
98 }
View Code

  菜单公共方法中,GetButtonGroup()方法添加了一个参数:buttonGroup,用于指定菜单按钮列表类型(属于个性化菜单还是自定义菜单)。

  

实体

  有关实体类的变化都体现在Entities/Menu目录下,新建了IButtonGroupBase接口以及ButtonGroupBase基类。ButtonGroup(自定义菜单)和ConditionalButtonGroup(个性化菜单)按钮都继承自ButtonGroupBase。

  Entities/Menu/Buttons/目录下的所有按钮类型是通用的。

 

返回类型

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

 

 

注意点

  1. 自定义菜单和个性化菜单的菜单添加、删除接口是不同的,使用的时候需要调用各自不同的接口。
  2. 如果使用个性化菜单,MenuMatchRule中的规则必须至少填写一个。
  3. 对于使用了个性化菜单和不使用,获取菜单时返回的数据是不同的(前者包含后者),因此SDK针对这两种情况只提供了同一个实体:GetMenuResult(对应的接收消息实体为GetMenuResultFull)。有关个新华菜单的信息(列表)可以直接从GetMenuResult.conditionalmenu读取,如果为null或者列表为空,则表示没有个性化菜单。

 

测试和可视化编辑

  源代码中提供了一个简易的可视化编辑工具,同时可以查看得到的菜单JSON数据格式(显示的是操作的实体转换成的JSON,非原始JSON)。

  地址:http://weixin.senparc.com/Menu

 

系列教程索引

地址:http://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html

  1. Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册
  2. Senparc.Weixin.MP SDK 微信公众平台开发教程(二):成为开发者
  3. Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证
  4. Senparc.Weixin.MP SDK 微信公众平台开发教程(四):Hello World
  5. Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK
  6. Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler
  7. Senparc.Weixin.MP SDK 微信公众平台开发教程(七):解决用户上下文(Session)问题
  8. Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明
  9. Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明
  10. Senparc.Weixin.MP SDK 微信公众平台开发教程(十):多客服接口说明
  11. Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明
  12. Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明
  13. Senparc.Weixin.MP SDK 微信公众平台开发教程(十三):地图相关接口说明
  14. Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重
  15. Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密
  16. Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制
  17. Senparc.Weixin.MP SDK 微信公众平台开发教程(十七):个性化菜单接口说明
  18. Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能

 

QQ:498977166

http://szw.cnblogs.com/
研究、探讨.NET开发
转载请注明出处和作者,谢谢!

 

微信开发深度解析:微信公众号、小程序高效开发秘籍
Senparc官方教程《微信开发深度解析:微信公众号、小程序高效开发秘籍》,耗时2年精心打造的微信开发权威教程,点击这里,购买正版

 

目录
相关文章
|
26天前
|
Python
微信推送 听说有人想要换最后的文字 教程来啦 进来学
微信推送 听说有人想要换最后的文字 教程来啦 进来学
22 0
|
30天前
|
人工智能 文字识别 前端开发
印刷文字操作报错合集之sdk调接口的时候报code":"10001","参数出错"如何解决
在使用印刷文字识别(OCR)技术过程中,可能会遇到各种错误或问题。以下是一些常见的报错情况及其可能的原因和解决建议。包括但不限于:1.识别率低,错误多、2.无法识别特定字符或字体、3.文件格式不支持、4.内存或资源不足、5.网络连接问题、6.API调用限制或授权问题、7.语言识别错误、8.安全与隐私问题。
|
1月前
|
开发框架 Java .NET
闪速码短信Python接口SDK
闪速码短信Python接口SDK
76 4
|
1月前
|
Web App开发 前端开发 JavaScript
如何快速与呼叫中心系统CTI/API/SDK接口集成
由于呼叫中心系统涉及通信、CTI、终端设备、中继线路等技术与概念,从事信息管理系统、ERP、CRM、工单系统等的研发人员一般不是非常熟悉这部分技术,当需要提供具备呼叫中心能力的解决方案时,往往要用较多的时间来研究这些相对复杂的技术,对接过程比较长,开发调试有一定的阻力,基于此,我们提出一种更加简便高效的集成方法,可以零代码集成呼叫中心平台,实现项目快速上线。
如何快速与呼叫中心系统CTI/API/SDK接口集成
|
1月前
|
前端开发
命令行创建React项目
命令行创建React项目
命令行创建React项目
|
1月前
|
定位技术 C#
.NET微信网页开发相关文章教程
.NET微信网页开发相关文章教程
|
1月前
|
JSON JavaScript 前端开发
全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名生成详解
全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名生成详解
|
6月前
|
小程序 编译器 定位技术
微信小程序地理位置权限申请及使用教程
微信小程序地理位置权限申请及使用教程
228 0
|
6月前
|
JSON 小程序 前端开发
微信公众号开发(三)设置底部菜单
填写access_token值,关于如何获取accesstoken值,请参见《微信公众号开发(二)微信公众号的access_token》 最后,将想要设置菜单的json写入body中。
125 0
|
7月前
|
Ubuntu Shell Android开发
微信小游戏跳一跳外挂教程(安卓版)
微信小游戏跳一跳外挂教程(安卓版)
113 0