Heim  >  Artikel  >  php教程  >  微信公众平台开发(八) 自定义菜单功能开发

微信公众平台开发(八) 自定义菜单功能开发

WBOY
WBOYOriginal
2016-06-13 11:31:38951Durchsuche

微信公众平台服务号以及之前成功申请内测资格的订阅号都具有自定义菜单的功能。开发者可利用该功能为公众账号的会话界面底部增加自定义菜单,用户点击菜单中的选项,可以调出相应的回复信息或网页链接。自定义菜单接口将为公众账号的信息展示空间提供更多可能性。本文将针对自定义菜单做简单的开发应用,

开发者获取使用凭证后,可以使用该凭证对公众账号的自定义菜单进行创建、查询和删除等操作。 自定义菜单接口可实现以下类型按钮:

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返回结果:

{"access_token":"ACCESS_TOKEN","expires_in":7200}

返回参数说明:

access_token:获取到的凭证

expires_in:凭证有效时间,单位:秒

3.3 具体实现

a. 打印出格式

<?<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

<?<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

<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>

示例说明:

菜单结构及说明:

<span {
 "button":[             //button定义该结构为一个菜单
  {
       "name":"分支主菜单名",  
       "sub_button":[    //sub_button定义子菜单
        {
           "type":"click",  //按钮类型
           "name":"分支子菜单名1",  //菜单名称
           "key":"loveSuzhou"  //菜单key值
        },
        {
           "type":"click",
           "name":"分支子菜单名2",
           "key":"liveSuzhou"
        }]
   },    //菜单之间用 , 分隔
   {
       "type":"click",
       "name":"独立菜单",
       "key":"lianxiUs"
   }]
}</span>

返回说明:

正确的Json返回结果:

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

提交菜单:

通过curl 提交以上的菜单数据,代码如下:

<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 代码如下:

<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 代码如下:

<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...

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn