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

字号+ 作者:alpha 来源:www.seoalphas.com 2017-09-10 16:47 浏览次数(547)

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


标签
缓存access_token

本站部分技术文章为参考网上实用内容发布,目的是记录踩坑经验,若未备注来源而侵犯了您原创文章权益,请联系博主删除;对文章有不同看法的朋友欢迎在评论区留言互动

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

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

    浏览次数:1791

  •  微信Token验证代码的实现

    微信Token验证代码的实现

    浏览次数:1177

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

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

    浏览次数:664

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

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

    浏览次数:563

  • 微信获取用户列表接口开发教程

    微信获取用户列表接口开发教程

    浏览次数:353

  • 新增临时素材

    新增临时素材

    浏览次数:327

  • 微信公众平台-发送被动响应消息

    微信公众平台-发送被动响应消息

    浏览次数:246

网友点评
功能开发中......其实是博主懒了而已......
0.625000s