zoukankan      html  css  js  c++  java
  • -如何存储并定时更新access_token

    来源:https://blog.csdn.net/sct_t/article/details/53002611

    我们知道请求access_Token会返回这样一个json,包括access_token(凭证)和expires_in(凭证的时限)

    在我们需要access_token的时候没必要每次都请求服务器,因为这个凭证在2小时内都是有效的,那么就要存起来,有几种方法可以选择:1.Redis; 2.数据库;3文件存储.

    我使用的是数据库存储的方式:

    --  
    -- 表的结构 `accesstoken`  
    --  
    CREATE TABLE IF NOT EXISTS `accesstoken` (  
      `A_ID` int(11) NOT NULL,  
      `A_Token` varchar(600) COLLATE utf8_bin NOT NULL,  
      `A_Date` int(11) NOT NULL,  
      `A_Update` int(11) DEFAULT NULL  
    ) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;  
    

      那么下面是php的代码:

           //获取 access_token  当然在这之前请连接好自己的数据库  
    function Curl($appid,$appsecret) {  
        $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;  
           $ch = curl_init();  
           curl_setopt($ch, CURLOPT_TIMEOUT, 5);  
           curl_setopt($ch, CURLOPT_URL, $url);  
           curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
           curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  
           $dataBlock = curl_exec($ch);//这是json数据  
           curl_close($ch);  
        $res = json_decode($dataBlock, true); //接受一个json格式的字符串并且把它转换为 PHP 变量  
          
           return $res['access_token'];  
       }  
    //将令牌插入数据库  
    function serilizable(){  
        $appid="你自己的";  
        $appsecret="你自己的";  
        $sql="select A_ID,A_Token,A_Date from accesstoken order by A_ID desc";  
        $rs=mysql_query($sql);  
        $times=time();//当前时间  
        $row=mysql_fetch_array($rs);  
        $rownum=mysql_num_rows($rs);  
        //数据时间-当前时间  小于800s  
        if($rownum == 0 ){//若无数据 那么获取令牌,存入数据库  
           $timestamp=time()+6000;//100分钟后  
            $token= Curl($appid,$appsecret);  
            $sqlin="insert into accesstoken(A_Token,A_Date) values('$token','$timestamp')";  
            mysql_query($sqlin);  
            return $token;  
            ///return $rownum;  
        }else{  
          
                //超过数据的时间,那么重新获取令牌  
            if($row['A_Date'] < $times){  
                $token= Curl($appid,$appsecret);  
                $timestamp=time()+6000;//100分钟后  
                $sqlu="UPDATE `accesstoken` SET `A_Token`='$token',`A_Date`='$timestamp' WHERE A_ID = '$row[A_ID]' ";  
                mysql_query($sqlu);  
                return $token;  
            }else//没超过,则从数据库取  
             return $row[A_Token];  
              
        }  
           
    }  
    

      

  • 相关阅读:
    关于 __proto__和prototype的一些理解
    使用siege进行web压力测试
    Access denied for user 'root'@'localhost' (using password: YES)
    博客搬家来咯
    Permutation Transformer【Splay】
    Prime Independence 【LightOJ
    Power Sockets【CF 1469F】【线段树+贪心】
    A Bit Similar【CF 1469E】【unordered_map+bitset】
    brz的树【牛客练习赛72 F】【虚树+dfs序可持久化线段树+树上差分】
    CCA的期望【牛客练习赛74】【数学】
  • 原文地址:https://www.cnblogs.com/cblx/p/8960701.html
Copyright © 2011-2022 走看看