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

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

  前不久微信上线了个性化菜单接口,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 }
复制代码

  菜单公共方法中,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要使用Senparc.Weixin.AspNet写微信分享接口,需要按照以下步骤进行操作: 1. 安装Senparc.Weixin.AspNet 使用NuGet安装Senparc.Weixin.AspNet,可以在Visual Studio的NuGet包管理器中搜索并安装。 2. 配置微信公众号信息 在Web.config文件中配置微信公众号的AppId、AppSecret等信息,以便进行微信授权和分享。例如: ```xml <appSettings> <add key="WeixinAppId" value="your_appid" /> <add key="WeixinAppSecret" value="your_appsecret" /> <add key="WeixinToken" value="your_token" /> <add key="WeixinEncodingAESKey" value="your_encodingAESKey" /> </appSettings> ``` 3. 创建分享接口 创建一个Controller,并添加一个Action来处理分享请求,例如: ```csharp public class WeixinShareController : Controller { [HttpPost] public ActionResult Share(string url) { var jssdkUiPackage = JSSDKHelper.GetJsSdkUiPackage(WeixinConfig.WeixinAppId, WeixinConfig.WeixinAppSecret, url); return Json(jssdkUiPackage); } } ``` 在Action中,调用Senparc.Weixin.MP.Helpers.JSSDKHelper.GetJsSdkUiPackage方法获取JSSDK的UiPackage信息,并返回Json格式的结果。 4. 在前端页面中调用分享接口 在前端页面中,通过Ajax调用分享接口获取分享信息,例如: ```javascript $.post('/WeixinShare/Share', { url: location.href }, function (result) { wx.config({ debug: false, appId: result.appId, timestamp: result.timestamp, nonceStr: result.nonceStr, signature: result.signature, jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage'] }); wx.ready(function () { wx.onMenuShareTimeline({ title: '分享标题', link: location.href, imgUrl: '分享图片地址' }); wx.onMenuShareAppMessage({ title: '分享标题', desc: '分享描述', link: location.href, imgUrl: '分享图片地址' }); }); }); ``` 在页面加载完成后,通过Ajax调用分享接口获取分享信息,然后使用wx.config和wx.ready方法进行微信JSSDK的初始化和分享设置。 以上是使用Senparc.Weixin.AspNet写微信分享接口的基本流程,希望能对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值