前不久微信上线了个性化菜单接口,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普通自定义菜单

菜单接口文件

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

个性化菜单类内容如下:/*----------------------------------------------------------------

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

{

///

/// 创建个新华菜单

///

/// AccessToken或AppId。当为AppId时,如果AccessToken错误将自动获取一次。当为null时,获取当前注册的第一个AppId。

/// 菜单内容

///

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(accessToken, urlFormat, buttonData, timeOut: timeOut, jsonSetting: jsonSetting);

}, accessTokenOrAppId);

}

#region GetMenu

/* 使用普通自定义菜单查询接口可以获取默认菜单和全部个性化菜单信息,请见自定义菜单查询接口的说明 */

///

/// 测试个性化菜单匹配结果

///

///

/// 可以是粉丝的OpenID,也可以是粉丝的微信号。

///

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(accessToken, url, data, CommonJsonSendType.POST);

}, accessTokenOrAppId);

}

#endregion

///

/// 删除菜单

///

///

/// 菜单Id

///

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()方法添加了一个参数:buttonGroup,用于指定菜单按钮列表类型(属于个性化菜单还是自定义菜单)。

实体

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

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

返回类型

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

注意点自定义菜单和个性化菜单的菜单添加、删除接口是不同的,使用的时候需要调用各自不同的接口。

如果使用个性化菜单,MenuMatchRule中的规则必须至少填写一个。

对于使用了个性化菜单和不使用,获取菜单时返回的数据是不同的(前者包含后者),因此SDK针对这两种情况只提供了同一个实体:GetMenuResult(对应的接收消息实体为GetMenuResultFull)。有关个新华菜单的信息(列表)可以直接从GetMenuResult.conditionalmenu读取,如果为null或者列表为空,则表示没有个性化菜单。

测试和可视化编辑

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

更多微信公众平台开发:个性化菜单接口说明相关文章请关注PHP中文网!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php微信个性化菜单,微信公众平台开发:个性化菜单接口说明相关推荐

  1. 微信公众平台开发 高级群发接口

    在这篇微信公众平台高级接口开发教程中,我们将介绍如何使用接口实现微信公众平台群发功能.本文分为以下四个部分:准备群发内容选择群发对象执行群发接收群发结果一.准备群发内容群发内容可以是文本.图片.语音. ...

  2. C#微信公众平台开发—高级群发接口

    涉及access_token的获取请参考<C#微信公众平台开发-access_token的获取存储与更新> 一.为了实现高级群发功能,需要解决的问题 1.通过微信接口上传图文消息素材时,J ...

  3. php微信自定义菜单开发,微信公众平台开发自定义菜单功能开发

    一.简介 微信公众平台服务号以及之前成功申请内测资格的订阅号都具有自定义菜单的功能.开发者可利用该功能为公众账号的会话界面底部增加自定义菜单,用户点击菜单中的选项,可以调出相应的回复信息或网页链接.自 ...

  4. Java微信公众平台开发之群发接口(高级群发)

    再次吐槽下,微信素材管理和群发这块文档对Java很不友好,此文需要结合我前文和官方文档. 测试号调试群发只需看是否群发消息是否能组装成功,不需要看结果如何(反正不会发送成功的),因为微信还没开放这个功 ...

  5. 微信公众平台开发(73) 客服接口发送客服消息

    微信公众平台开发(73) 客服接口发送客服消息 原文:微信公众平台开发(73) 客服接口发送客服消息 微信公众平台开发 客服接口 发送客服消息 作者:方倍工作室  地址:http://www.cnbl ...

  6. 微信公众平台开发精彩花絮------文章来源:方倍工作室

    关键字:微信公众平台开发 作者:方倍工作室 在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/JS等基础. 我们将使用微信公 ...

  7. 微信公众平台开发入门教程(SAE方倍工作室)

    在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/JS等基础 我们将使用微信公众账号方倍工作室作为讲解的例子,二维码见底部. ...

  8. php 自定义菜单 openid,微信公众平台开发(99) 自定义菜单获取OpenID

    关键字 微信公众平台 自定义菜单 OpenID 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/p/weixin-menu-get-openid.html 在这篇 ...

  9. 微信公众平台开发(104) 自定义菜单扫一扫、发图片、发地理位置

    关键字:微信公众平台 自定义菜单 扫一扫 发图片 发地理位置 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/p/weixin-menu-new-type.htm ...

  10. 微信公众平台开发(58)自定义菜单

    微信公众平台开发 微信公众平台开发模式 企业微信公众平台 自定义菜单 开发教程  作者:方倍工作室  地址:http://www.cnblogs.com/txw1958/p/weixin-58-cus ...

最新文章

  1. 首创模拟电子计算机,指导日本原子弹投射,这个大佬有点牛
  2. Javascript跨域后台设置拦截
  3. 支持插件的消息中间件【msg broker with plugin】 - 知然 - 博客园
  4. 开源论文推荐:含人脸识别、实例分割、跟踪、SR等
  5. Mybatis like查询的写法--转载
  6. echart 图谱_zrend echart 展示家庭图谱示例代码(类思维导图)
  7. 使用iconv-lite解决node当中不支持GBK编码的问题
  8. 获得Open Images冠军,商汤TSD目标检测算法入选CVPR 2020 ​
  9. 计蒜客---函数规律
  10. 情爱宝典:识破男女间的“放电”信号
  11. 30天React Native从零到IOS/Android双平台发布总结
  12. 一元、二元、三元逻辑运算符
  13. 语言混编之java调用c_Java通过JNI调用C语言库
  14. PAIP.SQL的跟踪与调试
  15. 文件分片_文件分片上传原理解析
  16. 软件测试中根据测试用例设计的方法,测试用例设计方法有哪些?举例说明
  17. 图像处理:理想低通滤波器、butterworth滤波器(巴特沃斯)、高斯滤波器实现(python)
  18. 高可靠性技术之RRPP和VRRP
  19. 数据分析面试手册《指标篇》
  20. 计算机文化论文5000字,大学生科技论文5000字

热门文章

  1. nginx+uwsgi+django
  2. Android项目文件的目录结构(1)
  3. asp.net.mvc 中form表单提交控制器的2种方法和控制器接收页面提交数据的4种方法...
  4. Drupal开发时如何使用远端图片减轻工作量
  5. RS报内存错误XQE-ROL-0183
  6. 分享最新十个流行的 jQuery 插件
  7. SCVMM2008测试手册
  8. VS2005 SP1 “无法使用此产品的安装源,请确认安装源存在,并且您可以访问它”的错误...
  9. JSP 内置对象request常见用法
  10. 24. Magento 创建新闻模块(4)