zoukankan      html  css  js  c++  java
  • 微信公众平台开发,自定义菜单,群发消息,网页授权(3)

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

                  }

             }

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

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

  • 相关阅读:
    内存管理 Autorelease、retain、copy、assign的set方法和含义?
    解决 项目cocoapods diff: /../Podfile.lock: No such file or directory
    iOS按钮点击的频率 防止按钮连续点击时重复执行按钮的点击方法
    iOS 网络篇--PDF网络文件下载和打开
    使用runtime获取属性
    取到 tableview 自定义section header 上的button
    JavaScript第一天 改变DIV的样式
    iOS 因为reason: 'Pushing the same view controller instance more than once is not supported而奔溃(下)
    iOS 因为reason: 'Pushing the same view controller instance more than once is not supported而奔溃(上)
    iOS缓存功能
  • 原文地址:https://www.cnblogs.com/beili/p/8436210.html
Copyright © 2011-2022 走看看