找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[复制链接]
查看: 683|回复: 2
最佳答案
0 

51

主题

181

帖子

5105

积分

S1

积分
5105
 楼主| 发表于 2018-12-15 16:50:17 | 显示全部楼层 |阅读模式
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。
  1. <?php
  2. //缓存access_token
  3. function getToken(){
  4.     $appid='填写你的APPID';//APPID
  5.     $appsecret='填写你的APPSECRET';//APPSECRET
  6.     $file = file_get_contents("access_token.json",true);//读取access_token.json里面的数据
  7.     $result = json_decode($file,true);
  8.     //判断access_token是否在有效期内,如果在有效期则获取缓存的access_token
  9.     //如果过期了则请求接口生成新的access_token并且缓存access_token.json
  10. if (time() > $result['expires']){
  11.         $data = array();
  12.         $data['access_token'] = getNewToken($appid,$appsecret);
  13.         $data['expires']=time()+7000;
  14.         $jsonStr =  json_encode($data);
  15.         $fp = fopen("access_token.json", "w");
  16.         fwrite($fp, $jsonStr);
  17.         fclose($fp);
  18.         return $data['access_token'];
  19.     }else{
  20.         return $result['access_token'];
  21.     }
  22. }

  23. //获取新的access_token
  24. function getNewToken($appid,$appsecret){
  25.     $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
  26.     $access_token_Arr =  https_request($url);
  27.     return $access_token_Arr['access_token'];
  28. }

  29. //向获取access_token接口发起请求
  30. function https_request ($url){
  31.         $ch = curl_init();
  32.         curl_setopt($ch, CURLOPT_URL, $url);
  33.         curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  34.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  35.         $out = curl_exec($ch);
  36.         curl_close($ch);
  37.         return  json_decode($out,true);
  38. }

  39. //调用函数
  40. getToken();

  41. //输出当前缓存文件有效期内的access_token
  42. $jsondata = file_get_contents('access_token.json');
  43. $access_token_data = json_decode($jsondata);
  44. echo $access_token_data->access_token;
  45. ?>
复制代码
生成的本地缓存文件为
access_token.json
格式如下
  1. {
  2.   "access_token":"16_tTsgZ08Mf13NHsO8XT19faWwQVXKuBzLs3wElIyzGWMkcFLrSCBCKpXRd8dKuPC-A32fSJPIwKx4smzOgraV8U-2qzic6UIchBqk_LqmLPwDmPj4luOf6YQor0GotWOBg1bPsB29KzZy0ChFGCVfAIACYR",
  3.   "expires":1544866066
  4. }
复制代码
作者:TANKING
网站:http://likeyunba.com

回复

使用道具 举报

最佳答案
0 

0

主题

14

帖子

146

积分

新人求带

积分
146
发表于 2019-1-5 21:02:25 | 显示全部楼层
感谢楼主分享
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

1330

帖子

1万

积分

S2

积分
15633
发表于 2019-1-31 09:15:56 | 显示全部楼层
66666666666666
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



www.henkuai.com—微信开发者的分享交流平台,专注微信开发生态。

天津市滨海新区
中新生态城中成大道生态建设公寓9号楼3层301

微信公众号

广告推广
QQ:805874290

市场合作
zhongcong@henkuai.com