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

      

  • 相关阅读:
    微信开发 提示 Redirect_uri(错误10003)
    Windows激活
    百度区块链的数字宠物狗——莱茨狗
    导出数据之CSV[PHP]
    Mongo安装与使用
    开发神器之phpstorm破解与日常使用
    php常用方法
    开发工具之Sublime编辑器
    文件搜索神器之everything
    docker之基本命令(1)
  • 原文地址:https://www.cnblogs.com/kekeoutlook/p/10198023.html
Copyright © 2011-2022 走看看