• 微信
您当前的位置: 首页> 微信开发>

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

作者:Alpha时间:2017-09-10 阅读数:3888 +人阅读

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. }  


本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱:595397166@qq.com

标签: 小程序

阿尔法

软件开发工程师#全栈工程师

{include file=foot.html}