微信公众号中个性化菜单的开发实例
个性化菜单让公众号的不同用户群体看到不一样的自定义菜单。该接口开放给已认证订阅号和已认证服务号,个性化菜单要求用户的微信客户端版本在iPhone6.2.2,Android 6.2.4以上,暂时不支持其他版本微信,另外定义个性化菜单之前必须先定义默认菜单。
个性化菜单匹配规则说明:
个性化菜单的更新是会被覆盖的。
例如公众号先后发布了默认菜单,个性化菜单1,个性化菜单2,个性化菜单3。那么当用户进入公众号页面时,将从个性化菜单3开始匹配,如果个性化菜单3匹配成功,则直接返回个性化菜单3,否则继续尝试匹配个性化菜单2,直到成功匹配到一个菜单。
根据上述匹配规则,为了避免菜单生效时间的混淆,决定不予提供个性化菜单编辑API,开发者需要更新菜单时,需将完整配置重新发布一轮。
本例的项目结构如下,除了上一章的文件之外,还增加了三个处理个性化菜单的文件。
addconditional_menu.PHP:创建个性化菜单
delconditional_menu.PHP:删除个性化菜单
1、创建个性化菜单
创建个性化菜单的接口是https://api.weixin.qq.com/cgi-bin/menu/addconditional?access_token=ACCESS_TOKEN,以post方式发送菜单字符串。
addconditional_menu.PHP
<?PHP require_once('./Utils.PHP'); //个性化菜单字符串 $menujson = '{ button:[ { type:click, name:单击, key:V1001_TODAY_MUSIC }, { name:搜素, sub_button:[ { type:view, name:百度, url:http://www.baidu.com/ } ] }], matchrule:{ sex:1 } }'; $url = https://api.weixin.qq.com/cgi-bin/menu/addconditional?access_token=.Utils::get_access_token(); //创建个性化菜单 $result = Utils::https_request($url, $menujson); //返回返回menuid表示成功 echo $result;
返回结果如下:
这里只设置了性别过滤,1表示男性,有关其他的条件设置请参看个性化菜单接口。
2、测试个性化菜单匹配结果
测试接口是https://api.weixin.qq.com/cgi-bin/menu/trymatch?access_token=ACCESS_TOKEN,需要post user_id过去。
trymatch.PHP
<?PHP @header('Content-type: text/plain;charset=UTF-8'); require_once('./Utils.PHP'); $url = https://api.weixin.qq.com/cgi-bin/menu/trymatch?access_token=.Utils::get_access_token(); //user_id可以是粉丝的OpenID,也可以是粉丝的微信号 $userID = '{user_id:o4WmZ0h-4huBUVQUczx2ezaxIL9c}'; $result = Utils::https_request($url, $userID); echo $result; ?>
返回结果如下:
3、删除个性化菜单
删除个性化菜单接口是https://api.weixin.qq.com/cgi-bin/menu/delconditional?access_token=ACCESS_TOKEN,需要post“menuid”过去。
delconditional_menu.PHP
<?PHP @header('Content-type: text/plain;charset=UTF-8'); require_once('./Utils.PHP'); $url = https://api.weixin.qq.com/cgi-bin/menu/delconditional?access_token=.Utils::get_access_token(); //menuid,个性化菜单的menuid $menuID = '{menuid:414784577}'; $result = Utils::https_request($url, $menuID); echo $result; ?>
返回结果如下表示成功:
4、查询个性化菜单
使用普通自定义菜单查询接口可以获取默认菜单和全部个性化菜单信息,请参看上一章。
查询之后结果如下:
这里的menuid和上面的不一样是因为我删除了之前的个性化菜单,然后重新初始化了一次。