微信公众平台开发(109) 个性化菜单

关键字:微信公众平台 个性化菜单 conditionalmenu 
作者:方倍工作室 
原文:http://www.cnblogs.com/txw1958/p/weixin-menu-conditional.html 

 

为了帮助公众号实现灵活的业务运营,微信公众平台新增了个性化菜单接口,开发者可以通过该接口,让公众号的不同用户群体看到不一样的自定义菜单。该接口开放给已认证订阅号和已认证服务号。

在这篇微信公众平台开发教程中,我们将介绍如何开发个性化菜单的功能。

 

一、个性化菜单接口

开发者可以通过以下条件来设置用户看到的菜单:

1、用户分组(开发者的业务需求可以借助用户分组来完成)
2、性别
3、手机操作系统
4、地区

个性化菜单接口说明:

1、个性化菜单要求用户的微信客户端版本在iPhone6.2.2,Android 6.2.4以上。
2、菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。
3、普通公众号的个性化菜单的新增接口每日限制次数为2000次,删除接口也是2000次,测试个性化菜单匹配结果接口为20000次
4、出于安全考虑,一个公众号的所有个性化菜单,最多只能设置为跳转到3个域名下的链接
5、创建个性化菜单之前必须先创建默认菜单(默认菜单是指使用普通自定义菜单创建接口创建的菜单)。如果删除默认菜单,个性化菜单也会全部删除

个性化菜单匹配规则说明:

当公众号创建多个个性化菜单时,将按照发布顺序,由新到旧逐一匹配,直到用户信息与matchrule相符合。如果全部个性化菜单都没有匹配成功,则返回默认菜单。
例如公众号先后发布了默认菜单,个性化菜单1,个性化菜单2,个性化菜单3。那么当用户进入公众号页面时,将从个性化菜单3开始匹配,如果个性化菜单3匹配成功,则直接返回个性化菜单3,否则继续尝试匹配个性化菜单2,直到成功匹配到一个菜单。

微信个性化菜单接口地址为(注意和创建默认菜单的接口不一样)

https://api.weixin.qq.com/cgi-bin/menu/addconditional?access_token=ACCESS_TOKEN
请求参数示例如下
{
     "button":[
     {
        "type":"click",
        "name":"今日歌曲",
         "key":"V1001_TODAY_MUSIC"
    },
    {
        "name":"菜单",
        "sub_button":[
        {
            "type":"view",
            "name":"搜索",
            "url":"http://www.soso.com/"
        },
        {
            "type":"view",
            "name":"视频",
            "url":"http://v.qq.com/"
        },
        {
            "type":"click",
            "name":"赞一下我们",
            "key":"V1001_GOOD"
        }]
 }],
"matchrule":{
  "group_id":"2",
  "sex":"1",
  "country":"中国",
  "province":"广东",
  "city":"广州",
  "client_platform_type":"2"
  }
}

参数说明

参数 是否必须 说明
button 一级菜单数组,个数应为1~3个
sub_button 二级菜单数组,个数应为1~5个
type 菜单的响应动作类型
name 菜单标题,不超过16个字节,子菜单不超过40个字节
key click等点击类型必须 菜单KEY值,用于消息接口推送,不超过128字节
url view类型必须 网页链接,用户点击菜单可打开链接,不超过256字节
media_id media_id类型和view_limited类型必须 调用新增永久素材接口返回的合法media_id
matchrule 菜单匹配规则
group_id 用户分组id,可通过用户分组管理接口获取
sex 性别:男(1)女(2),不填则不做匹配
client_platform_type 客户端版本,当前只具体到系统型号:IOS(1), Android(2),Others(3),不填则不做匹配
country 国家信息,是用户在微信中设置的地区,具体请参考地区信息表
province 省份信息,是用户在微信中设置的地区,具体请参考地区信息表
city 城市信息,是用户在微信中设置的地区,具体请参考地区信息表

matchrule共六个字段,均可为空,但不能全部为空,至少要有一个匹配信息是不为空的。 country、province、city组成地区信息,将按照country、province、city的顺序进行验证,要符合地区信息表的内容。地区信息从大到小验证,小的可以不填,即若填写了省份信息,则国家信息也必填并且匹配,城市信息可以不填。 例如 “中国 广东省 广州市”、“中国 广东省”都是合法的地域信息,而“中国 广州市”则不合法,因为填写了城市信息但没有填写省份信息。 地区信息表请点击下载

返回结果

正确时的返回JSON数据包如下,错误时的返回码请见接口返回码说明

{"errcode":0,"errmsg":"ok"}

接口实现如下:

 

菜单配置实现如下:

上述菜单将会给 性别为男,地区在 新疆 五家渠,手机类型为IOS 的微信用户设置一个个性化的菜单。

微信中查看用户信息如下

 

二、查询菜单

使用普通自定义菜单查询接口可以获取默认菜单和全部个性化菜单信息,查询结果如下所示。

{
    "menu": {
        "button": [
            {
                "name": "自助查询",
                "sub_button": [
                    {
                        "type": "view",
                        "name": "天气预报",
                        "url": "http://m.weather.com.cn/",
                        "sub_button": [ ]
                    },
                    {
                        "type": "view",
                        "name": "快递查询",
                        "url": "http://m.cnblogs.com/?u=txw1958",
                        "sub_button": [ ]
                    },
                    {
                        "type": "view",
                        "name": "苹果产品",
                        "url": "http://m.cnblogs.com/?u=txw1958",
                        "sub_button": [ ]
                    },
                    {
                        "type": "view",
                        "name": "四六级成绩",
                        "url": "http://m.cnblogs.com/?u=txw1958",
                        "sub_button": [ ]
                    }
                ]
            },
            {
                "name": "每日更新",
                "sub_button": [
                    {
                        "type": "click",
                        "name": "历史今天",
                        "key": "HISTORY",
                        "sub_button": [ ]
                    },
                    {
                        "type": "click",
                        "name": "每日英语",
                        "key": "ENGLISH",
                        "sub_button": [ ]
                    },
                    {
                        "type": "click",
                        "name": "股票指数",
                        "key": "STOCK",
                        "sub_button": [ ]
                    },
                    {
                        "type": "click",
                        "name": "最新地震",
                        "key": "EARTHQUAKE",
                        "sub_button": [ ]
                    },
                    {
                        "type": "click",
                        "name": "开心一笑",
                        "key": "JOKE",
                        "sub_button": [ ]
                    }
                ]
            },
            {
                "name": "互动交流",
                "sub_button": [
                    {
                        "type": "click",
                        "name": "每日签到",
                        "key": "SIGNIN",
                        "sub_button": [ ]
                    },
                    {
                        "type": "view",
                        "name": "社区交流",
                        "url": "http://wx.wsq.qq.com/182998484",
                        "sub_button": [ ]
                    }
                ]
            }
        ],
        "menuid": 401260075
    },
    "conditionalmenu": [
        {
            "button": [
                {
                    "name": "自助查询",
                    "sub_button": [
                        {
                            "type": "view",
                            "name": "天气预报",
                            "url": "http://m.weather.com.cn/",
                            "sub_button": [ ]
                        },
                        {
                            "type": "view",
                            "name": "快递查询",
                            "url": "http://m.cnblogs.com/?u=txw1958",
                            "sub_button": [ ]
                        },
                        {
                            "type": "view",
                            "name": "苹果产品",
                            "url": "http://m.cnblogs.com/?u=txw1958",
                            "sub_button": [ ]
                        },
                        {
                            "type": "view",
                            "name": "四六级成绩",
                            "url": "http://m.cnblogs.com/?u=txw1958",
                            "sub_button": [ ]
                        }
                    ]
                },
                {
                    "name": "每日更新",
                    "sub_button": [
                        {
                            "type": "click",
                            "name": "历史今天",
                            "key": "HISTORY",
                            "sub_button": [ ]
                        },
                        {
                            "type": "click",
                            "name": "每日英语",
                            "key": "ENGLISH",
                            "sub_button": [ ]
                        },
                        {
                            "type": "click",
                            "name": "股票指数",
                            "key": "STOCK",
                            "sub_button": [ ]
                        },
                        {
                            "type": "click",
                            "name": "最新地震",
                            "key": "EARTHQUAKE",
                            "sub_button": [ ]
                        },
                        {
                            "type": "click",
                            "name": "开心一笑",
                            "key": "JOKE",
                            "sub_button": [ ]
                        }
                    ]
                },
                {
                    "name": "互动交流",
                    "sub_button": [
                        {
                            "type": "click",
                            "name": "每日签到",
                            "key": "SIGNIN",
                            "sub_button": [ ]
                        },
                        {
                            "type": "view",
                            "name": "社区交流",
                            "url": "http://wx.wsq.qq.com/182998484",
                            "sub_button": [ ]
                        },
                        {
                            "type": "view",
                            "name": "五家渠人",
                            "url": "http://wx.wsq.qq.com/182998484",
                            "sub_button": [ ]
                        }
                    ]
                }
            ],
            "matchrule": {
                "sex": "1",
                "country": "中国",
                "province": "新疆",
                "city": "五家渠"
            },
            "menuid": 401285125
        }
    ]
}

 

三、实现效果

下面是默认菜单和个性化菜单的对比图

   

 

时间: 2024-11-10 00:30:37

微信公众平台开发(109) 个性化菜单的相关文章

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

关键字:微信公众平台 自定义菜单 扫一扫 发图片 发地理位置作者:方倍工作室原文:http://www.cnblogs.com/txw1958/p/weixin-menu-new-type.html    自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的重要功能.微信增加了点击菜单后调起扫一扫(支持二维码/一维码).发图片.发地理位置的能力,需开发实现.原有自定义菜单开发权限的公众号,均可获得以上能力. 在这篇微信公众平台开发教程中,我们将介绍如何在自定义菜单上开发扫一扫.发图片.

微信公众平台开发(99) 自定义菜单获取OpenID

关键字 微信公众平台 自定义菜单 OpenID作者:方倍工作室原文:http://www.cnblogs.com/txw1958/p/weixin-menu-get-openid.html   在这篇微信公众平台开发教程中,我们将介绍如何在自定义菜单中获得用户的OpenID. 本篇开发教程的实质是微信自定义菜单及OAuth2.0授权的灵活运用. 本文分为以下两个部分: 拥有高级接口权限时的获取(基于view事件) 没有高级接口权限时的获取(基于click事件)   一.拥有高级接口权限 拥有高级

微信公众平台开发之自定义菜单.Net代码解析_实用技巧

用户自定义菜单制作时,需要用到access_token,我们直接使用前面讲解的IsExistAccess_Token()函数.我理解的微信公共平台里面菜单分为button和sub_button,即菜单和子菜单,这些菜单都有一个name的属性,类别分为click和view,click类有key属性:而view类有url属性,含有子菜单的菜单没有key属性也没有url属性.这些情况可以从下面的例子看出来. public void MyMenu() { string weixin1 = ""

微信公众平台开发教程

本系列微信公众平台教程以PHP+MySQL为开发环境,介绍了微信公众平台开发模式下基础接口.自定义菜单.高级接口.WeiXin JS接口.微信支付等接口以及在此基础上的功能或应用开发的方法及技巧,案例极具实用价值,是学习微信公众平台开发实战的经典教材.   配套书籍 <微信公众平台开发最佳实践> 由方倍工作室编写,覆盖基础接口.自定义菜单.高级接口.微信支付.转发分享等五大接口,包含近30个案例及技巧,已成功帮助无数人进入微信开发领域. 购买地址        准备工作 微信公众平台的注册 介

微信公众平台 开发 openId的获取

问题描述 微信公众平台 开发 openId的获取 哪位微信大牛出个获取微信openId的视屏或者博文啊! 解决方案 微信公众平台获取"openid"的方法微信公众平台开发(99) 自定义菜单获取OpenID微信公众平台开发 获得所有关注者的Openid 解决方案二: 我会贴我们公司写的代码吗~~不会~~百度一下 你就知道~

【微信Java开发 --2】接入微信公众平台开发,配置自己的服务器,验证过程【验证服务器、自定义菜单、微信端消息分发】

接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑 好我们就开始:1.登录微信公众平台,进入基本配置  修改配置,将自己的服务器的URL地址,配置在此处: 填写完成后,[先不用 提交],先进行第二步 服务器端代码的配置   注意: 如果想使用  自定义菜单等相关接口权限,需要注意:   可以看到  个人订阅号是没有 使用自定义菜单的相关接口能力的,如果需要使用的话,需要注册服务号或使用测试号:    那么 在服务器端代

Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明     上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>介绍了如何通过通用接口获取AccessToken,有了AccessToken,我们就可以来操作自定义菜单,以及其他的高级接口,这一篇单讲自定义菜单.   一.自定义菜单规则 自定义菜单分为一级菜单和二级菜单. 一级菜单数量为1-3个,即打开公众账号直接可以看到排列在最下方的最多3个按钮.一级菜单的

微信公众平台开发最佳实践(第2版)

  <微信公众平台开发最佳实践 第2版>微信公众平台开发经典之作全新改版,精心挑选最经典的商业项目开发,成千上万人次微信公众平台开发者从中受益 方倍工作室已出版本书的第3版电子版,内容更多,价格更优惠,欢迎查看购买,地址:http://www.cnblogs.com/txw1958/p/buy-ebook.html       前言 出版说明 自从方倍工作室在博客园推出微信公众平台开发系列教程后,受到广大微信开发人员及爱好者的热情关注,相关文章的日访问量高达2万人次,而<微信公众平台开发

微信公众平台开发最佳实践

<微信公众平台开发最佳实践>共分10章,案例程序采用广泛流行的PHP.MySQL.XML.CSS.JavaScript.HTML5等程序语言及数据库实现.系统完整地介绍微信公众平台基础接口.自定义菜单.高级接口.微信支付.分享转发等所有相关技术,以生活类.娱乐类.企业类微信开发为切入点,讲解了30多个功能或应用案例. 前言 自从方倍工作室在博客园推出微信公众平台开发系列教程后,受到广大微信开发人员及爱好者的热情关注,相头文章的日访问量高达上万人次,而<微信公众平台开发入门教程>一门