微信公众平台服务号以及之前成功申请内测资格的订阅号都具有自定义菜单的功能。开发者可利用该功能为公众账号的会话界面底部增加自定义菜单,用户点击菜单中的选项,可以调出相应的回复信息或网页链接。自定义菜单接口将为公众账号的信息展示空间提供更多可能性。本文将针对自定义菜单做简单的开发应用,
开发者获取使用凭证后,可以使用该凭证对公众账号的自定义菜单进行创建、查询和删除等操作。 自定义菜单接口可实现以下类型按钮:
click(点击事件):
view(访问网页):
创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来。建议测试时可以尝试取消关注公众账号后,再次关注,则可以看到创建后的效果。
文档地址:http://mp.weixin.qq.com/wiki/index.php?title=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E6%8E%A5%E5%8F%A3
3.1 获取appid 和appsecret
在 微信公众平台 > 高级功能 > 开发模式中找到appid 和appsecret。
3.2 使用appid 和appsecret 向微信凭证获取接口请求access_token
请求地址:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
请求参数说明:
获取access_token填写client_credential
第三方用户唯一凭证
第三方用户唯一凭证密钥,既appsecret
返回说明:
正确的Json返回结果:
1 | { "access_token" : "ACCESS_TOKEN" , "expires_in" :7200}
|
로그인 후 복사
返回参数说明:
access_token:获取到的凭证
expires_in:凭证有效时间,单位:秒
3.3 具体实现
a. 打印出格式
1 2 3 4 5 6 7 8 9 10 11 12 | <?<span php
</span><span $APPID </span>= "wxdxxxxxxxxxxxxxxx" <span ;
</span><span $APPSECRET </span>= "96xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" <span ;
</span><span $TOKEN_URL </span>= "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" .<span $APPID </span>. "&secret=" .<span $APPSECRET </span><span ;
</span><span $json </span>=<span file_get_contents </span>(<span $TOKEN_URL </span><span );
</span><span $result </span>=json_decode(<span $json </span>,<span true</span><span );
</span><span print_r</span>(<span $result </span><span );
</span>?>
|
로그인 후 복사
结果如下:

b. 获取access_token
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?<span php
</span><span $APPID </span>= "wxdxxxxxxxxxxxxxxx" <span ;
</span><span $APPSECRET </span>= "96xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" <span ;
</span><span $TOKEN_URL </span>= "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" .<span $APPID </span>. "&secret=" .<span $APPSECRET </span><span ;
</span><span $json </span>=<span file_get_contents </span>(<span $TOKEN_URL </span><span );
</span><span $result </span>=json_decode(<span $json </span>,<span true</span><span );
</span><span $ACC_TOKEN </span>=<span $result </span>[ 'access_token' <span ];
</span><span echo </span> <span $ACC_TOKEN </span><span ;
</span>?>
|
로그인 후 복사

注:access_token对应于公众号是全局唯一的票据,重复获取将导致上次获取的access_token失效。
方法:通过POST一个特定结构体,实现在微信客户端创建自定义菜单。
请求地址:https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | <span {
"button" :[
{
"name" : "公共查询" ,
"sub_button" :[
{
"type" : "click" ,
"name" : "天气查询" ,
"key" : "tianQi"
},
{
"type" : "click" ,
"name" : "公交查询" ,
"key" : "gongJiao"
},
{
"type" : "click" ,
"name" : "翻译" ,
"key" : "fanYi"
}]
},
{
"name" : "苏州本地" ,
"sub_button" :[
{
"type" : "click" ,
"name" : "爱上苏州" ,
"key" : "loveSuzhou"
},
{
"type" : "click" ,
"name" : "苏州景点" ,
"key" : "suzhouScenic"
},
{
"type" : "click" ,
"name" : "苏州美食" ,
"key" : "suzhouFood"
},
{
"type" : "click" ,
"name" : "住在苏州" ,
"key" : "liveSuzhou"
}]
},
{
"type" : "click" ,
"name" : "联系我们" ,
"key" : "lianxiUs"
}]
}</span>
|
로그인 후 복사
示例说明:
菜单结构及说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <span {
"button" :[
{
"name" : "分支主菜单名" ,
"sub_button" :[
{
"type" : "click" ,
"name" : "分支子菜单名1" ,
"key" : "loveSuzhou"
},
{
"type" : "click" ,
"name" : "分支子菜单名2" ,
"key" : "liveSuzhou"
}]
},
{
"type" : "click" ,
"name" : "独立菜单" ,
"key" : "lianxiUs"
}]
}</span>
|
로그인 후 복사
返回说明:
正确的Json返回结果:
1 | { "errcode" :0, "errmsg" : "ok" }
|
로그인 후 복사
提交菜单:
通过curl 提交以上的菜单数据,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <span $MENU_URL </span>= "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" .<span $ACC_TOKEN </span><span ;
</span><span $ch </span> =<span curl_init();
curl_setopt(</span><span $ch </span>, CURLOPT_URL, <span $MENU_URL </span><span );
curl_setopt(</span><span $ch </span>, CURLOPT_CUSTOMREQUEST, "POST" <span );
curl_setopt(</span><span $ch </span>, CURLOPT_SSL_VERIFYPEER, <span FALSE</span><span );
curl_setopt(</span><span $ch </span>, CURLOPT_SSL_VERIFYHOST, <span FALSE</span><span );
curl_setopt(</span><span $ch </span>, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)' <span );
curl_setopt(</span><span $ch </span>, CURLOPT_FOLLOWLOCATION, 1<span );
curl_setopt(</span><span $ch </span>, CURLOPT_AUTOREFERER, 1<span );
curl_setopt(</span><span $ch </span>, CURLOPT_POSTFIELDS, <span $data </span><span );
curl_setopt(</span><span $ch </span>, CURLOPT_RETURNTRANSFER, <span true</span><span );
</span><span $info </span> = curl_exec(<span $ch </span><span );
</span><span if </span> (curl_errno(<span $ch </span><span )) {
</span><span echo </span> 'Errno' .curl_error(<span $ch </span><span );
}
curl_close(</span><span $ch </span><span );
</span><span var_dump</span>(<span $info </span>);
|
로그인 후 복사
运行结果:

测试结果:

菜单创建成功。
查询当前使用的自定义菜单结构。
请求地址:https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN
curl 代码如下:
1 2 3 4 5 6 7 8 9 10 | <span $MENU_URL </span>= "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=" .<span $ACC_TOKEN </span><span ;
</span><span $cu </span> =<span curl_init();
curl_setopt(</span><span $cu </span>, CURLOPT_URL, <span $MENU_URL </span><span );
curl_setopt(</span><span $cu </span>, CURLOPT_RETURNTRANSFER, 1<span );
</span><span $menu_json </span> = curl_exec(<span $cu </span><span );
</span><span $menu </span> = json_decode(<span $menu_json </span><span );
curl_close(</span><span $cu </span><span );
</span><span echo </span> <span $menu_json </span>;
|
로그인 후 복사
取消当前使用的自定义菜单。
请求地址:https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN
curl 代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <span $MENU_URL </span>= "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" .<span $ACC_TOKEN </span><span ;
</span><span $cu </span> =<span curl_init();
curl_setopt(</span><span $cu </span>, CURLOPT_URL, <span $MENU_URL </span><span );
curl_setopt(</span><span $cu </span>, CURLOPT_RETURNTRANSFER, 1<span );
</span><span $info </span> = curl_exec(<span $cu </span><span );
</span><span $res </span> = json_decode(<span $info </span><span );
curl_close(</span><span $cu </span><span );
</span><span if </span>(<span $res </span>->errcode == "0" <span ){
</span><span echo </span> "菜单删除成功" <span ;
}</span><span else </span><span {
</span><span echo </span> "菜单删除失败" <span ;
}</span>
|
로그인 후 복사
运行结果:

测试结果:

菜单删除成功。
七、完整代码获取
请到QQ群213260412共享里下载使用。
八、关注
请关注 卓锦苏州 微信公众帐号,卓锦苏州 基于SAE 平台开发,针对于主流的微信功能进行开发测试。
您可以关注 卓锦苏州 公众帐号进行功能测试,以及获取新的应用开发。
1. 登录微信客户端,朋友们 -> 添加朋友 -> 搜号码 -> zhuojinsz,查找并关注。
2. 扫描二维码:

卓锦苏州菜单功能:
目前菜单具体功能还在开发之中,会陆续更新,敬请期待。。。

We Believe, Great People Share Knowledge...
http://www.bkjia.com/PHPjc/440160.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/440160.htmlTechArticle微信公众平台 服务号 以及 之前成功申请内测资格的订阅号 都具有自定义菜单的功能。开发者可利用该功能为公众账号的会话界面底部增加...