php+MySQL基于百度BAE的微信公众平台获取access_token

来源:互联网 发布:linux运维岗笔试题 编辑:程序博客网 时间:2024/05/17 08:37

微信里面的很多操作需要access_token来操作,但是access_token又是有效时间的,笔者写这个文章的时候,是7200秒的有效时间,然而微信一天允许获取access_token的次数是2000次


基于百度云BAE中的PHP+MYSQL来做的一个类似于缓存的功能,如果过期就自动更新一下,一天最多获取13次就够用了。一下是我的代码:

<?phpdefine("D",false);// 这里的appid和appsecret放到数据库里面,如果数据库里面没有的话 再做请求define("appID", "wxc87a9c7353600000");define("appsecret","6036ad004cbaa1b1ef5079ffee400000");/*替换为你自己的数据库名*/$dbname = 'gvGAiDLkiAoflAD00000';/*填入数据库连接信息*/$host = 'sqld.duapp.com';$port = 4050;$user = '192abbcce33a469dae61bbb056000000';//用户AK    $pwd = '73b83a3facc046eea5b7f92662100000';//用户SK      /*以上信息都可以在数据库详情页查找到*//*接着调用mysql_connect()连接服务器*/$link = @mysql_connect("{$host}:{$port}",$user,$pwd,true);if(!$link) {die("Connect Server Failed: " . mysql_error());}/*连接成功后立即调用mysql_select_db()选中需要连接的数据库*/if(!mysql_select_db($dbname,$link)) {die("Select Database Failed: " . mysql_error($link));}// 创建数据表用的,看一下结构就好了$create_table_sql = "create table if not exists system(`_id` int(10) AUTO_INCREMENT,        `wx_appid` char(20),        `wx_appsecret` char(36),         `wx_token` char(32),        `wx_access_token` text(1024),`wx_access_token_timeout` timestamp(14) default 0,PRIMARY KEY (`_id`))ENGINE=MyISAM DEFAULT CHARSET=UTF8";$query_sql = "select wx_access_token, wx_access_token_timeout from system";$ret = mysql_query($query_sql,$link);while($row = mysql_fetch_array($ret)){// 数据表里面是有且仅有一条数据$wx_access_token = $row['wx_access_token'];$wx_access_token_timeout = $row['wx_access_token_timeout'];}if(D) echo ("wx_access_token_timeout:".strtotime($wx_access_token_timeout)."<br />");if(D) echo ("wx_access_token:".$wx_access_token."<br />");if(D) echo "现在时间:";if(D) echo time();if(D) echo "<br />";// 判断access_token失效时间是否晚于现在时间减去20秒,如果晚的话 那就需要重新获取了// 为什么要算一个20秒,防止因为网络延迟问题,导致在快过期的那个时间点,导致access_token失效if(D) echo "时间比较:";if(D) var_dump (strtotime($wx_access_token_timeout) < (time() - 20));if(D) echo "<br />-----------<br />";if(strtotime($wx_access_token_timeout) < (time() - 20)){// 需要重新获取微信access_token$token_access_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".appID."&secret=".appsecret;//获取文件内容或获取网络请求的内容$res = file_get_contents($token_access_url);$result = json_decode($res, true);$end_time = $result['expires_in'] + time();$access_token = $result['access_token'];if(D) echo $end_time;if(D) echo "<br/>";if(D) echo $access_token;if(D) echo "<br/>";// 更新数据库$update_sql = "update `gvGAiDLkiAoflAD00000`.`system` set `wx_access_token`='".$access_token."', `wx_access_token_timeout` ='".date("Y-m-d H:i:s",$end_time)."' WHERE `system`.`_id`=1";if(D) echo $update_sql;$ret = mysql_query($update_sql,$link);echo $access_token;}else{echo $wx_access_token;}mysql_close($link);?>

如果有不懂的地方,代可以在写评论给我

1 0
原创粉丝点击