1. 程式人生 > >-如何存儲並定時更新access_token

-如何存儲並定時更新access_token

else 插入數據 PE 數據 fetch redis class 自己的 secret

來源: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];  
          
    }  
       
}  

  

-如何存儲並定時更新access_token