前两节说的都是微信开发的初级篇,这一节说高级篇。微信公众号关注以后,下面都是有菜单的,底部有三个一级菜单,每个一级菜单可以添加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);

              }

         }

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

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