PHPOS开发网

微信自定义菜单查询接口开发

PHPOS开发网 http://www.phpos.net 2016-12-08 00:18 出处:未知 作者:微信公众号网 编辑:@
有时候为了需要可能要查询自己的微信公众号里面的菜单结构,比如,您开发了一个微信项目,用户可以通过系统后台创建自己的菜单,也可以通过后台简单的点击一个按扭后,就可以

  有时候为了需要可能要查询自己的微信公众号里面的菜单结构,比如,您开发了一个微信项目,用户可以通过系统后台创建自己的菜单,也可以通过后台简单的点击一个按扭后,就可以查看自己微信公众号里面的菜单。类似的例子非常多,总之,查询公众号里面的自定义菜单时常会用到,本教程将介绍如何查询自定义菜单结构。

  要注意的是:这里说的查询是使用接口创建的自定义菜单,而不是在编辑模式下创建的菜单,使用接口创建自定义菜单后,可以查询自定义的菜单的结构,另外请注意,在设置了个性化菜单后,使用本自定义菜单查询接口可以获取默认菜单和全部个性化菜单信息。

请求说明

http请求方式:GET

https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN


返回说明(无个性化菜单时)

对应创建接口,正确的Json返回结果:
{
    "menu": {
        "button": [
            {
                "type": "click", 
                "name": "今日歌曲", 
                "key": "V1001_TODAY_MUSIC", 
                "sub_button": [ ]
            }, 
            {
                "type": "click", 
                "name": "歌手简介", 
                "key": "V1001_TODAY_SINGER", 
                "sub_button": [ ]
            }, 
            {
                "name": "菜单", 
                "sub_button": [
                    {
                        "type": "view", 
                        "name": "搜索", 
                        "url": "http://www.soso.com/", 
                        "sub_button": [ ]
                    }, 
                    {
                        "type": "view", 
                        "name": "视频", 
                        "url": "http://v.qq.com/", 
                        "sub_button": [ ]
                    }, 
                    {
                        "type": "click", 
                        "name": "赞一下我们", 
                        "key": "V1001_GOOD", 
                        "sub_button": [ ]
                    }
                ]
            }
        ]
    }
}

返回说明(有个性化菜单时)

{
    "menu": {
        "button": [
            {
                "type": "click", 
                "name": "今日歌曲", 
                "key": "V1001_TODAY_MUSIC", 
                "sub_button": [ ]
            }
        ], 
        "menuid": 208396938
    }, 
    "conditionalmenu": [
        {
            "button": [
                {
                    "type": "click", 
                    "name": "今日歌曲", 
                    "key": "V1001_TODAY_MUSIC", 
                    "sub_button": [ ]
                }, 
                {
                    "name": "菜单", 
                    "sub_button": [
                        {
                            "type": "view", 
                            "name": "搜索", 
                            "url": "http://www.soso.com/", 
                            "sub_button": [ ]
                        }, 
                        {
                            "type": "view", 
                            "name": "视频", 
                            "url": "http://v.qq.com/", 
                            "sub_button": [ ]
                        }, 
                        {
                            "type": "click", 
                            "name": "赞一下我们", 
                            "key": "V1001_GOOD", 
                            "sub_button": [ ]
                        }
                    ]
                }
            ], 
            "matchrule": {
                "group_id": 2, 
                "sex": 1, 
                "country": "中国", 
                "province": "广东", 
                "city": "广州", 
                "client_platform_type": 2
            }, 
            "menuid": 208396993
        }
    ]
  }



腾讯官方给我们提供了查询自定义菜单接口url,为了更好的理解查询接口url跟创建菜单接口url对比如下:

  查询菜单接口url:https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN

  创建菜单接口url:https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

  通过上面的接口对比我们发现:这两url唯一不同是查询菜单用的是get,而创建菜单是create,其它完全一样。从这里我们再来推测一下删除菜单接口是不是也只有一个单词不同呢?

  删除菜单接口url:https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN

  我们发现确实是这样,创建菜单、删除菜单和查询菜单,唯一不同的就是一个单词不同,即menu后面的单词不同。

  从上面的对比我们可以知道,无论是创建菜单还是删除菜单,还是查询菜单,都需要access_token,所以,做微信自定义菜单开发首先要获取这个token,其它的步骤基本上都一样了。


查询菜单方法

  根据不同的需要我们可以把查询菜单的方法分为三种:一是直接在浏览器查询,一种是通过使用网页调试工具调试该接口查询菜单,最后一种是通过编写代码开发,编写代码也是我们重要要讲的,因为,通过代码开发的查询功能是最灵活,而其它两种带有学习测试性质。

浏览器查询菜单

  这种方法获取自定义菜单结构非常简单,只需要获取access_token,然后,把查询菜单的接口url放到地址栏回车即可查看相应的微信公众号菜单结构。

  1)获取token:把下面的url放到浏览器回车后,就可以获取到对应的微信公众号对应的token。

    https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx140b1767991b6c80&secret=488571aeb401c9e9b56b5861a1f6ac4a


   access_token是:
CfZhiovBCFITbjwSu4IGCZ75STKx2uaI2NRrT-YY5Gg4VZN3zoNXihmoa4DiCeJBoaZ0Jq70V9KYjPWsNXWDmYYOcqvHnPDT0HfxAiZyWC0GJsu0R5OYpbsyxGpDiYmDKKNcAEAVVY


    在上面的url中appid和secret分别对应着微信公众号里面的appid和appsecret,这也决定了获取到的access_token是这个公众号的token而不是其它公众号的token。

  2)获取到access_token后,放到查询url的后面,即:
https://api.weixin.qq.com/cgi-bin/menu/get?access_token=CfZhiovBCFITbjwSu4IGCZ75STKx2uaI2NRrT-YY5Gg4VZN3zoNXihmoa4DiCeJBoaZ0Jq70V9KYjPWsNXWDmYYOcqvHnPDT0HfxAiZyWC0GJsu0R5OYpbsyxGpDiYmDKKNcAEAVVY


  把这个url放到浏览器里面回车后,得到的结果如下:

{"menu":{"button":[{"type":"click","name":"儿童歌曲","key":"V1001_TODAY_MUSIC","sub_button":[]},{"name":"网站建设","sub_button":[{"type":"view","name":"微信开发","url":"http:\/

\/www.phpos.net\/","sub_button":[]},{"type":"view","name":"搜索","url":"http:\/\/www.soso.com\/","sub_button":[]},{"type":"click","name":"为我们点赞","key":"V1001_GOOD","sub_button":[]}]}]}}


  从上面获取到的json结果可以知道,这个公众号里面有两个一级菜单,在“网站建设”这个一级菜单下面有三个子菜单,如下图所示:



  正好是上面返回的json的结果,这说明我们查询的菜单结果是正确的。



网页调试工具接口查询菜单

  在浏览器打开调试工具接口:
https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95&form=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E6%9F%A5%E8%AF%A2%E6%8E%A5%E5%8F%A3%20/menu/get


   然后,在access_token选项里面填写token,然后,点击“检查问题”后,就可以查询出该access_token对应的菜单,如下图所示:

接口查询菜单

  这样就把access_token对应的微信公众号里面的菜单查询出来了。


编写代码查询菜单

  上面两种查询自定义菜单的方法对于程序员来说非常方便,但是,如果对一般的用户而言就不适合了,因为,并不是所有的用户都是程序员,而且,在一些项目中,上面二种无法满足要求,缺乏灵活性。正如上面提到的上面两种只是一种测试学习用的,无法应用到项目中,所以,要克服上面两种查询菜单的缺点,就要通过编写代码来实现查询菜单。

  由上面可以知道要查询菜单首先要获取access_token,然后,再通过查询菜单的url来查询菜单。

  获取access_token方法我们在“用php开发创建微信公众号自定义菜单”已经详细讲过了,这里不再讲解,具体代码请看那个教程。

  我们创建文件get_menu.php代码如下:

<?php
    header('content-type:text/html;charset=utf-8');
    require_once 'get_token.php';
    $url = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token={$access_token}";
    $result = http_request($url);
    var_dump($result);
    //我把请求内容封装到函数中
    function  http_request($url, $data = null)
    {
        //初识化
        $ch = curl_init();
        //设置变量
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        if(!empty($data))
        {
            curl_setopt($ch,  CURLOPT_POST, 1);
            curl_setopt($ch,  CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //执行
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }


  如果我们对比教程“用php开发创建微信公众号自定义菜单”的话,我们发现“创建菜单”和“查询菜单”有二点不同,一个是接口url不同,再一个就是在函数http_request($url)里面查询菜单只传一个url,而创建菜单还要传入创建菜单的内容,除了这二点外,其它代码完全一样,所以,我们也不再对上面的代码一行一行解释了。

  只要把文件get_menu.php和get_token.php文件上传到服务器,然后,打开get_menu.php文件,就可以得到期个json格式的菜单结构。

  有了json格式菜单我们可以通过php里面的函数,例如,json_decode()进行解码成一个数组,然后,根据项目来处理就可以了。
0

精彩评论

暂无评论...
验证码 换一张
取 消