• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
微信硬件平台(七)微信开发--如何存储并定时更新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];
			
		}
		 
	}

  

posted on 2018-12-29 21:34  MKT-porter  阅读(335)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3