前两节说的都是微信开发的初级篇,这一节说高级篇。微信公众号关注以后,下面都是有菜单的,底部有三个一级菜单,每个一级菜单可以添加5个二级菜单。一级菜单最多四个汉字,二级菜单最多7个汉字,多出来的汉字用“......”号,菜单自定义以后,由于缓存原因,需要取消再次关注才能生效。微信的菜单本质上就是一个按钮,既然是按钮,他就是有多种属性的按钮,微信开发中我们最常用的按钮类型是clickview,其他的按钮类型还有scancode_push(调用扫一扫)、scancode_waitmsgpic_sysphotopic_photo_or_albumpic_weixin等等,这些不常用而已。所以我主要说的菜单类型click,view这两种,创建菜单,代码如下:

<?php
          //自定义菜单需要access_token,所以我们这里先获取票据access_token,这里可以写一个方法,
         public function getToken(){
            //由于token一天的访问次数是两千次,并且每次的有效时长是7200秒,所以我们可以给他做一存储,可以在cookie,session,redis,memcache,mysql中都可以,我们这里存储在session中
             if( $SESSION['token'] && $SESSION[keeptime]>time() ){
                             //直接返回票据access_token()
                            return  $SESSION['token'];
                }else{
                   $appid = "";          //这里填写你自己的公众号里的appid
                   $appsecret = "";   //这里填写你自己的公众号里的appsecret
                   $url  =  "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
                   //初始化curl
                   $ch = curl_init();
                   //设置参数
                  curl_setopt($ch,CURLOPT_URL,$url);
                  curl_setopt($ch,CURLOPT_RETURNTRNSFER,1);
                  //执行curl
                  $token = curl_exec($ch);
                  //关闭curl
                  curl_close();
                  //由于返回的数据是json个格式,需要进行转换
                  $token  = json_decode($token,true);
                  $SESSION['token'] = $token['access_token'];
                  $SESSION['keeptime'] = $tokenp['exprires_in']+time();
               }
         }
      //定义自定义菜单的方法
      public function createcai(){
                  //获取token
                  $token = $this->$getToken();
                  //api请求URL,这里用的是POST方法
                  $url  =  "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$token;
                  //数据设置
                  /**
                     下面是微信公众平台官方提供的数据格式
                       {
          "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":"click",
              "name":"赞一下我们",
              "key":"V1001_GOOD"
            }]
           }]
          }
                 **/
                 //数据设置
                 $arr = array(
                              "button"=>array(
                                       array("type"=>"click","name"=>"今日新闻","key"=>"item1"),
                                       array("name"=>"网红新闻","sub_button"=>array(
                                               array("type"=>"view","name"=>"网红天佑","url"=>"http://www.baidu.com"),
                                               array("type"=>"click","name"=>"网红大事件","key"=>"item2"),
                                       ),
                                      array("type"=>"click","name"=>"关于我们","key"=>"item3")
                                );
                  );
                //把上面的数据的转换为json个格式,这里需要注意一个问题,json_encode()函数在转换时,中文的会乱码,所以这里需要urlencode()函数
               $arr = urldecode(json_decode(urlencode($arr)));
               //使用curl的post请求,curl在微信开发中的使用非常的频繁,可以写一个方法封装好,我这里为了方便大家学习就没有封装
               $ch = curl_init();
               curl_setopt($ch,CURLOPT_URL,$url);
               curl_setopt($ch,CURLOPT_HEADER,false);
               curl_setopt($ch,CURLOPT_POSTFILDS,$arr);
               curl_setopt($ch,CURLOPT_POST,true);
               curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
               $res = curl_exec();
               if(curl_errno($ch)){
                     return curl_error($ch);
              }else{
                     return json_decode($res,true);
               }
               curl_close();
       }

      这样自定义菜单就实现了,其实还是非常简单的,需要大家反复的联系。

微信公众号群发功能也是一个常见的功能,群发功能是订阅号每天一次,服务号是一个月4次,所以开发的时候切记不要直接用群发接口,可以使用预览接口,这样可以防止错误后不能再发顺。群发可以是文本,图片,视频,音频等。这个功能实现起来也是非常简单,话不多说,代码如下:

<?php
          //这里我调用的接口是预览接口,其实是一样的,只是把请求的URL换掉就可以了
          public function qunfa(){
                   //获取token
                   $token = $this->getToken();
                  //这是预览接口的url,POST请求
                   $url = "https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=".$token;
                  /**
                     这是文本的格式
                     { 
        "touser":"OPENID",
        "text":{ 
          "content":"CONTENT" 
         }, 
        "msgtype":"text"
       }
                 **/
                   //设置数据,按照文档给的文本格式
                  $arr = array(
                          "touser"=>" 填写用户ID","text"=>array("content"=>"大家好,新年快乐!"),"msgtype"=>"text"   
                  );
                 //curl发顺请求
                 $ch = curl_init();
                 //设置参数
                curl_setopt($ch,CURLOPT_URL,$url);
                curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
                curl_setopt($ch,CURLOPT_POSTFIELDS,$arr);
                curl_setopt($ch,CURLOPT_POST,true);
                $res = curl_exec();
                if(curl_errno($ch)){
                        return curl_error($ch);
               }else{
                      return json_decode($res,true);
              }
         }

以上就是预览群发功能,接下来是给大家讲一讲网页授权的功能

网页授权是微信开发非常重要的知识点,也是必须要掌握的,在公司的营销,以及业务场景中是经常用到的,学习的时候建议结合开发文档进行,应用场景:如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。今天有点累了,后边明天给大家分享。