您现在的位置是:网站首页>>微信>>微信公众号

PHP实现微信公众号自定义菜单

发布时间:2019-02-28 16:35:46作者:wangjian浏览量:754点赞量:0

    自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。订阅号没有自定义菜单功能

    一:自定义菜单按钮类型:

    1、click:点击推事件用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;

    2、view:跳转URL用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息。

    3、scancode_push:扫码推事件用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后显示扫描结果(如果是URL,将进入URL),且会将扫码的结果传给开发者,开发者可以下发消息。

    4、scancode_waitmsg:扫码推事件且弹出“消息接收中”提示框用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后,将扫码的结果传给开发者,同时收起扫一扫工具,然后弹出“消息接收中”提示框,随后可能会收到开发者下发的消息。

    5、pic_sysphoto:弹出系统拍照发图用户点击按钮后,微信客户端将调起系统相机,完成拍照操作后,会将拍摄的相片发送给开发者,并推送事件给开发者,同时收起系统相机,随后可能会收到开发者下发的消息。

    6、pic_photo_or_album:弹出拍照或者相册发图用户点击按钮后,微信客户端将弹出选择器供用户选择“拍照”或者“从手机相册选择”。用户选择后即走其他两种流程。

    7、pic_weixin:弹出微信相册发图器用户点击按钮后,微信客户端将调起微信相册,完成选择操作后,将选择的相片发送给开发者的服务器,并推送事件给开发者,同时收起相册,随后可能会收到开发者下发的消息。

    8、location_select:弹出地理位置选择器用户点击按钮后,微信客户端将调起地理位置选择工具,完成选择操作后,将选择的地理位置发送给开发者的服务器,同时收起位置选择工具,随后可能会收到开发者下发的消息。

    9、media_id:下发消息(除文本消息)用户点击media_id类型按钮后,微信服务器会将开发者填写的永久素材id对应的素材下发给用户,永久素材类型可以是图片、音频、视频、图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。

    10、view_limited:跳转图文消息URL用户点击view_limited类型按钮后,微信客户端将打开开发者在按钮中填写的永久素材id对应的图文消息URL,永久素材类型只支持图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。

    二:自定义菜单接口说明

    自定义菜单接口地址: https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

    接口post传值示例:

    {
         "button":[
         {    
              "type":"click",
              "name":"今日歌曲",
              "key":"V1001_TODAY_MUSIC"
          },
          {
               "name":"菜单",
               "sub_button":[
               {    
                   "type":"view",
                   "name":"搜索",
                   "url":"http://www.soso.com/"
                },
                {
                     "type":"miniprogram",
                     "name":"wxa",
                     "url":"http://mp.weixin.qq.com",
                     "appid":"wx286b93c14bbf93aa",
                     "pagepath":"pages/lunar/index"
                 },
               ]
           },
           {
                "type":"scancode_waitmsg",
                "name":"扫一扫",
                "key":"rselfmenu_0_0"
           }]
     }

     参数说明:

    参数                 是否必须                                                             说明

    button                                                                                  一级菜单数组,个数应为1~3个

    sub_button                                                                          二级菜单数组,个数应为1~5个

    type                                                                                          菜单的响应动作类型,view表示网页类型,click表示点击类型,miniprogram表示小程序类型

    name                                                                                  菜单标题,不超过16个字节,子菜单不超过60个字节

    key                     click等点击类型必须                                     菜单KEY值,用于消息接口推送,不超过128字节

    url                     view、miniprogram类型必须                     网页 链接,用户点击菜单可打开链接,不超过1024字节。 type为miniprogram时,不支持小程序的老版本客户端将打开本url。

    media_id             media_id类型和view_limited类型必须             调用新增永久素材接口返回的合法media_id

    appid             miniprogram类型必须                                     小程序的appid(仅认证公众号可配置)

    pagepath             miniprogram类型必须                                     小程序的页面路径

    调用上述接口时成功返回如下:

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

    自定义菜单如下:

    public function actionIndex(){
        $url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$this->getToken();
        $data = [
            'button'=>[
                [
                    "type"=>"scancode_waitmsg",
                    "name"=>"扫一扫",
                    "key"=>"rselfmenu_0_0"
                ],
                [
                    'type'=>'click',
                    'name'=>'展示信息',
                    'key'=>'V1001_GOOD'
                ],
                [
                    'name'=>'个人中心',
                    "sub_button"=>[
                        [
                            "type"=>"view",
                            "name"=>"个人博客",
                            "url"=>"https://www.wj0511.com"
                        ]
                    ]
                ],
            ]
        ];
        
        $data = json_encode($data, JSON_UNESCAPED_UNICODE);
        $info = $this->curl($url,'post',$data);
        $info = json_decode($info,true);
        if($info['errcode'] == 0){
            return true;
        }else{
            return false;
        }
    }

    /**
    *[getToken 获取token]
    * @author wangjian
    * @version [0.1]
    * @date 2019/2/27 11:16
    */
    public function getToken()
    {
       $url ='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx0e01bbb8f0e5ab9f&secret=5ea12213e4c7efa2c1ca3377762efc04';
       $obj = $this->curl($url);
       $info = json_decode($obj);
       Yii::error($info->access_token);
       return $info->access_token;
    }

    /**
    *[curl 根据接口获取信息]
    * @author wangjian
    * @version [0.1]
    * @param $url
    * @return mixed
    * @date 2019/2/27 11:22
    */
    public function curl($url, $method = 'get', $data = ''){
       $ch = curl_init(); //初始化
       $headers = array('Accept-Charset: utf-8');
       //设置URL和相应的选项
       curl_setopt($ch, CURLOPT_URL, $url); //指定请求的URL
       curl_setopt($ch, CURLOPT_CUSTOMREQUEST, strtoupper($method)); //提交方式
       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //不验证SSL
       curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); //不验证SSL
       curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //设置HTTP头字段的数组
       curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible;MSIE5.01;Windows NT 5.0)'); //头的字符串

       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
       curl_setopt($ch, CURLOPT_AUTOREFERER, 1); //自动设置header中的Referer:信息
       curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //提交数值
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //是否输出到屏幕上,true不直接输出
       $temp = curl_exec($ch); //执行并获取结果
       curl_close($ch);
       return $temp; //return 返回值
    }

    现象如下:

    image.png

    其他的一些功能可以参考微信公众号文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141013

0 +1