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

      

  • 相关阅读:
    PHP-Resque 简介
    基于Redis的消息队列php-resque
    sms_queue 短信队列
    那些最好的轮子
    Sphinx高亮显示关键字
    atitit.系统托盘图标的设计java swing c# .net c++ js
    atitit.验证码识别step4--------图形二值化 灰度化
    atitit.验证码识别step3----去除边框---- 图像处理类库 attilax总结java版本
    atitit.验证码识别step2------剪贴板ClipBoard copy image图像 attilax总结
    atitit.loading的设计与实现控件选型attilax 总结
  • 原文地址:https://www.cnblogs.com/kekeoutlook/p/10198023.html
Copyright © 2011-2022 走看看