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];  
              
        }  
           
    }  
    

      

  • 相关阅读:
    poj 1860 Currency Exchange(最短路径的应用)
    poj 2965 The Pilots Brothers' refrigerator
    zoj 1827 the game of 31 (有限制的博弈论)
    poj 3295 Tautology (构造法)
    poj 1753 Flip Game(枚举)
    poj 2109 (贪心)
    poj 1328(贪心)
    Qt 对单个控件美化
    Qt 4基础
    Bash Shell
  • 原文地址:https://www.cnblogs.com/cblx/p/8960701.html
Copyright © 2011-2022 走看看