位置:首页 > 微信开发 >

PHP缓存微信公众号access_token的两种方法

字号+ 作者:micloud 来源:www.seoalphas.com 2017-09-10 16:47 浏览量:3021

1、文件缓存:

PHP创建access_token.json文件,将access_token 和 生成时间expires 保存在其中,

{"access_token":"xxxx","expires":1478799661}

function getToken(){
    $appid='你的appid';
    $appsecret='你的appsecret';
    $file = file_get_contents("./access_token.json",true);
    $result = json_decode($file,true);
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'];
    }
}
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'];
}
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);
}


2、数据库存储:

首先新建一个存储accesstoken的数据库表。

  1. --  

  2. -- 表的结构 `accesstoken`  

  3. --  

  4. CREATE TABLE IF NOT EXISTS `accesstoken` (  

  5.   `A_ID` int(11) NOT NULL,  

  6.   `A_Token` varchar(600) COLLATE utf8_bin NOT NULL,  

  7.   `A_Date` int(11) NOT NULL,  

  8.   `A_Update` int(11) DEFAULT NULL  

  9. ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;  


下面是PHP代码:

  1.  //获取 access_token  当然在这之前请连接好自己的数据库  

  2. function Curl($appid,$appsecret) {  

  3.     $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;  

  4.        $ch = curl_init();  

  5.        curl_setopt($ch, CURLOPT_TIMEOUT, 5);  

  6.        curl_setopt($ch, CURLOPT_URL, $url);  

  7.        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  

  8.        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  

  9.        $dataBlock = curl_exec($ch);//这是json数据  

  10.        curl_close($ch);  

  11.     $res = json_decode($dataBlock, true); //接受一个json格式的字符串并且把它转换为 PHP 变量  

  12.       

  13.        return $res['access_token'];  

  14.    }  

  15. //将令牌插入数据库  

  16. function serilizable(){  

  17.     $appid="你自己的";  

  18.     $appsecret="你自己的";  

  19.     $sql="select A_ID,A_Token,A_Date from accesstoken order by A_ID desc";  

  20.     $rs=mysql_query($sql);  

  21.     $times=time();//当前时间  

  22.     $row=mysql_fetch_array($rs);  

  23.     $rownum=mysql_num_rows($rs);  

  24.     //数据时间-当前时间  小于800s  

  25.     if($rownum == 0 ){//若无数据 那么获取令牌,存入数据库  

  26.        $timestamp=time()+6000;//100分钟后  

  27.         $token= Curl($appid,$appsecret);  

  28.         $sqlin="insert into accesstoken(A_Token,A_Date) values('$token','$timestamp')";  

  29.         mysql_query($sqlin);  

  30.         return $token;  

  31.         ///return $rownum;  

  32.     }else{  

  33.       

  34.             //超过数据的时间,那么重新获取令牌  

  35.         if($row['A_Date'] < $times){  

  36.             $token= Curl($appid,$appsecret);  

  37.             $timestamp=time()+6000;//100分钟后  

  38.             $sqlu="UPDATE `accesstoken` SET `A_Token`='$token',`A_Date`='$timestamp' WHERE A_ID = '$row[A_ID]' ";  

  39.             mysql_query($sqlu);  

  40.             return $token;  

  41.         }else//没超过,则从数据库取  

  42.          return $row[A_Token];  

  43.           

  44.     }  

  45.        

  46. }  


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • php图片添加文字水印 以及图片合成加水印图片

    php图片添加文字水印 以及图片合成加水印图片

    浏览次数:5814

  • 关于微信分享到朋友圈或好友无法显示设置的标题及缩略图问题记录

    关于微信分享到朋友圈或好友无法显示设置的标题及缩略图问题记录

    浏览次数:5140

  • PC端 微信扫码支付成功之后自动跳转

    PC端 微信扫码支付成功之后自动跳转

    浏览次数:4690

  • 如何限制必须使用微信打开网页

    如何限制必须使用微信打开网页

    浏览次数:4375

网友点评
评论区域