• 一个Accecc_Token生成和缓存和读取类,微信/小程序开发必须学


    Access_Token是调用微信和小程序各种接口的临时凭证,有效期2小时(7200秒),很多接口都需要调用access_token接口生成一个access_token的,例如微信支付,微信分享,公众号的开发,获取openid,获取用户的基本信息,群发接口,还有网页授权等各类接口都是需要access_token的,而且每天最多只能调用2000次。

    所以,量大的请求,不能每次发起请求都调用一次接口,2000次很快就请求完了,2000次用完了就没有新的access_token用了,所以不能每发起一次请求都生成一个access_token的,如果这样做,就造成不良后果。我们可以通过缓存的方法,把access_token缓存到本地或者内存中,在项目中取缓存中的access_token来调用。

    因为一个access_token在2小时内都可以随便调用,没有调用次数的,而2小时后过期了,只能请求access_token生成接口,生成新的access_token,这时候新的access_token,我们可以缓存到本地或者内存,然后记录当前的时间戳,等到下次项目中需要用access_token的时候,先判断当前时间和缓存的access_token的时间差是否超过2小时,如果超过了,就调用access_token生成接口生成新的access_token,如果没有超时,那就使用缓存中的access_token。

    
    <?php
    //缓存access_token
    function getToken(){
        $appid='填写你的APPID';//APPID
        $appsecret='填写你的APPSECRET';//APPSECRET
        $file = file_get_contents("access_token.json",true);//读取access_token.json里面的数据
        $result = json_decode($file,true);
        //判断access_token是否在有效期内,如果在有效期则获取缓存的access_token
        //如果过期了则请求接口生成新的access_token并且缓存access_token.json
    if (time() > $result['expires']){
            $data = array();
            $data['access_token'] = getNewToken($appid,$appsecret);
            $data['expires']=time()+7000;
            $jsonStr =  json_encode($data);
            $fp = fopen("access_token.json", "w");
            fwrite($fp, $jsonStr);
            fclose($fp);
            return $data['access_token'];
        }else{
            return $result['access_token'];
        }
    }
     
    //获取新的access_token
    function getNewToken($appid,$appsecret){
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
        $access_token_Arr =  https_request($url);
        return $access_token_Arr['access_token'];
    }
     
    //向获取access_token接口发起请求
    function https_request ($url){
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            $out = curl_exec($ch);
            curl_close($ch);
            return  json_decode($out,true);
    }
     
    //调用函数
    getToken();
     
    //输出当前缓存文件有效期内的access_token
    $jsondata = file_get_contents('access_token.json'); 
    $access_token_data = json_decode($jsondata);
    echo $access_token_data->access_token;
    ?>
    

    生成的本地缓存文件为
    access_token.json
    格式如下

    
    {
      "access_token":"16_tTsgZ08Mf13NHsO8XT19faWwQVXKuBzLs3wElIyzGWMkcFLrSCBCKpXRd8dKuPC-A32fSJPIwKx4smzOgraV8U-2qzic6UIchBqk_LqmLPwDmPj4luOf6YQor0GotWOBg1bPsB29KzZy0ChFGCVfAIACYR",
      "expires":1544866066
    }
    

    作者:TANKING
    网站:http://likeyunba.com

  • 相关阅读:
    一些java的基础知识
    android基础AlertDialog使用
    Js+XML 操作 [ZT]
    [ASP.NET2.0] asp.net在ie7中使用FileUpload上传前预览图片 [ZT]
    C#对图片的几种简单处理 [ZT]
    使用 Bulk Copy 将大量数据复制到数据库 [ZT]
    html中name和id的区别 [ZT]
    两个分页存储过程
    C#常用的文件操作 (转)
    JSON
  • 原文地址:https://www.cnblogs.com/datiangou/p/10125847.html
Copyright © 2020-2023  润新知