tp6下保存微信公众号的access_token以及ticket

磊落不羁 by:磊落不羁 分类:thinkphp6 时间:1年前 阅读:77 评论:0

在做公众号开发的时候,无非就是用接口调用。首先是获取access_token,然后把它保存起来。之后就可以拿这个access_token做为参数来调用一些接口。

<?php
    //以下两个方法是一样的,只是写法不一样而已。在实际开发中,任选一个即可
    //它的做用是用来curl请求(我的专业述语不好,暂且这样子称呼)
    //以下两个方法的代码也是来源于网上找的。
    public function https_request($url,$data = null){
           $curl = curl_init();
           curl_setopt($curl, CURLOPT_URL, $url);
           curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
           curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
           if (!empty($data)){
               curl_setopt($curl, CURLOPT_POST, 1);
               curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
           }
           curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
           $output = curl_exec($curl);
           curl_close($curl);
           return $output;
       }

    public function https_request($url,$data = null){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER , true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }
?>
//注意,如果调用这些接口,第二个参数需要传入json的格式,不然会报错。
//例如 https_request($url,$json);
//json 格式如下 $json = '{"tag":{"name":"小冰"}}'
//或者直接将数组 利用 json_encode($arr,JSON_UNESCAPED_UNICODE); //也可以转换成带中文的json

获取access_token

<?php
    public function getAccessToken(){
        $appid = '你的appid';
        $appsecret = '你的appsecret ';
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
        $weChatApi = new weChatApi;
        $output = $weChatApi->https_request($url);
        $output = json_decode( $output, true);
        Cache::set('access_token', $output['access_token'], 7200); //这儿 我把token保存在缓存
    }
?>
//当然,在实际中,如果需要使用access_token来调用接口的时候,我们还需要在调用之前做一个判断,
//判断当前的access_token是否会过期或不存在,如果是过期或者是不存在。
//那么,请重新发起一次请求,来获取最新的access_token

//这儿,以获取ticket为例,来说明一下。
<?php
    $access_token = Cache::get('access_token');
    if($access_token){
        $this->getAccessToken();
    }
    $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" . $access_token . "&type=jsapi";
    $output = $this->https_request($url);
    $output = json_decode( $output, true);
    Cache::set('ticket', $output['ticket'], 7200); //这儿 我把ticket保存在缓存
?>
//分享好友
//控制器
<?php  
    namespace app\weChat\controller;
    use think\facade\Config;
    use think\facade\Cache;
    use app\BaseController;
    use think\facade\View;

    class GetApi extends BaseController{
        public function onMenuShareAppMessage(){
            if(request()->isAjax()){
                $noncestr = getRandStr(32); //随机数
                $jsapi_ticket = Cache::get('ticket');
                $timestamp = time();
                $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
                $string1 = 'jsapi_ticket=' . $jsapi_ticket . '&' . 'noncestr=' . $noncestr . '&' . 'timestamp=' . $timestamp . '&' .  'url=' . $url;
                $signature = sha1($string1);
                $appid = Config('weChat')['appid'];
                $result = array(
                    'noncestr'    => $noncestr,
                    'jsapi_ticket'    =>    $jsapi_ticket,
                    'timestamp'    =>    $timestamp,
                    'signature'    =>    $signature,
                    'appid' => $appid,
                    'url'    => $url,
                );
                return json($result);
            }
            return View();
        }
    }
?>
<!--视图文件-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <script src="https://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
    <script type="text/javascript">
        $(function(){
            (function(){
                var data;
                $.ajax({
                    //url:'',//不填默认为当前页面
                    type:'post',
                    data:{},
                    dataType:'json',
                    async:false,
                    success:function(res){
                        data = res;
                    }
                })

                function api(){
                    var appId = data['appid'];
                    var noncestr = data['noncestr'];
                    var jsapi_ticket = data['jsapi_ticket'];
                    var timestamp = data['timestamp'];
                    var signature = data['signature'];
                    var url = data['url'];

                    wx.config({
                        debug:false,
                        appId:appId,
                        timestamp:timestamp,
                        nonceStr:noncestr,
                        signature:signature,
                        jsApiList:[
                            'onMenuShareAppMessage',
                        ],
                    });

                    wx.ready(function(){
                        wx.onMenuShareAppMessage({
                            title:'需要分享的标题',
                            desc:'需要分享的简短描述',
                            link:url,
                            imgUrl:'',//图片路径
                            type: '', // 分享类型,music、video或link,不填默认为link
                              dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
                            success:function(success){
                                alert('t');
                                console.log('t');
                                console.log(success);    
                            },
                            fail:function(fail){
                                alert('f');
                                console.log('f');
                                console.log(fail);
                            },
                            complete:function(complete){
                                alert('com');
                                console.log(complete);
                            }
                        })
                    });
                }
                api();
            })();
        })
    </script>
</body>
</html>
非特殊说明,本文版权归原作者所有,转载请注明出处

本文地址:http://php.liulei.com.cn/?type=acticle&id=78

评论列表

发表评论

  • 昵称(必填)
  • 邮箱
  • 网址

TOP