黄聪:如何高效率存储微信中的 access_token
众所周知,在微信开发中,获取
access_token的接口每天的调用次数是有限制的,2000次应该是。
不过其实这些完全够用了,除非你不小心写了个循环,在1秒中内用完了。
每个access_token的生效时间是2小时内,2小时过后就需要重新申请一下。其实每天只需要申请12次就可以了。
不管你怎么申请,当前申请了access_token,以前的就都不能用了。
所以解决办法就是:
在数据库中新建一个表token盛放申请来的access_token,字段有三个
access_token #存放access_token
expires #存放毫秒数
update_time #更新时间戳
- 1
- 2
- 3
逻辑是这样的:(表中只有一条数据)
查询表中数据
如果有数据,用 时间戳+更新时间 跟 现在时间比较,计算是否已过期:
如果已过期,重新申请,并更新数据库中数据,并返回access_token
如果没有过期,直接返回查询出的access_token
如果没数据:
申请数据并,插入数据库,返回access_tooken
- 1
- 2
- 3
- 4
- 5
- 6
/*
---------------------
获取access_token:
查询数据库中是否有数据,
如果有 取出数据
如果已经过期,查询,更新记录
如果没过期,直接返回数据
如果没有 查询并添加数据,返回数据
---------------------
*/ function get_token(){
$access_url= 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.AppID.'&secret='.AppScret;
//AppID AppScret 已经定义为常量 //数据库参数
$host= "1.1.1.1";
$port = '3306';
$database = "wx";
$user = "mysql";
$passwd = "mysql"; $db = new mysqli($host,$user,$passwd,$database,$port);
$sql = "select * from token"; //查询wx表数据
$exist = $db->query($sql); global $access_token; if($exist->num_rows)
//如果存在数据
{
$row = $exist->fetch_array();
//如果数据已过期
if($row['expires']+$row['update_time']<time()){
$token = json_decode(file_get_contents($access_url));
$sql = "update token set access_token = '{$token->access_token}' where access_token = '{$row['access_token']}'";
$db->query($sql);
$access_token = $token->access_token; //返回更新的token
} else {
$access_token = $row['access_token']; //返回查询的token
}
}
//如果没有数据
else {
$token = json_decode(file_get_contents($access_url));
$sql = "insert into token values('{$token->access_token}',{$token->expires_in},".time().")";
$db->query($sql);
$access_token = $token->access_token; //返回新建的token
}
$db->close(); return $access_token; //返回access_token
}
黄聪:如何高效率存储微信中的 access_token的更多相关文章
- 黄聪:日租VPS中FileZilla_Server配置方法
1.关闭VPS中IIS的FTP服务 2.FileZilla_Server 监听端口 21 3.FTP客户端端口为11311(看服务商给出的)
- 黄聪:wordpress在IIS8中设置默认编码(windows2012服务器)
web.config中配置 <?xml version="1.0" encoding="UTF-8"?> <configuration> ...
- 黄聪:WordPress制作插件中使用wp_enqueue_script('jquery')库不起作用解决方法
这个应该不是什么新信息,但我却是现在才搞清楚. 今天又是在wordpress调用jquery,情况还是如此.无意中打开wordpress中jquery.js,然后对比code.jquery.com中的 ...
- 黄聪:C#禁止Webbrowser中的脚本错误提示,自动屏蔽弹出窗口
using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using ...
- 黄聪:微信公众平台开发OAuth2.0网页授权(转)
微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息 作者:方倍工作室 微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使 ...
- 黄聪:VS2010开发如何在c#中使用Ctrl、Alt、Tab等全局组合快捷键
1.新建一个类 HotkeyHelper using System; using System.Runtime.InteropServices; using System.Windows.Forms ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (高级)
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (高级) Caching Application Bl ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(一) : Caching Application Block (初级)
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(一) : Caching Application Block (初级) 本篇文章具体官方解释请参照以下链接: h ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(九) Policy Injection Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(九) Policy Injection Application Block 代理对象(Proxy Object) ...
随机推荐
- jQuery 中json字符串与对象互转
json字符串转json对象:jQuery.parseJSON(jsonStr); json对象转json字符串:JSON.stringify(jsonObj);
- [LeetCode&Python] Problem 206. Reverse Linked List
Reverse a singly linked list. Example: Input: 1->2->3->4->5->NULL Output: 5->4-> ...
- 纯C MD5
尼玛WordPress把格式全搞乱了 md5.h #ifndef __MD5_H__ #define __MD5_H__ #ifndef _CRT_SECURE_NO_WARNINGS #define ...
- 初学C#windows程序
window 操作系统中,处处是窗体 优点:简单 强大 方便 灵活 步骤: 新建项目 项目类型 visual C#项目 模板 window应用程序 用partial 将同一个窗体的代码分开放在两个文件 ...
- ZOJ - 4081:Little Sub and Pascal's Triangle (结论)
Little Sub is about to take a math exam at school. As he is very confident, he believes there is no ...
- 项目报错 exception 'MongoConnectionException' with message 'Failed to connect to: 127.0.0.1:27017: Authentication failed on database 'www' with username 'www': auth failed' in
出现这个错误,在官方文档也找到了解释,原来在2.6版本做了很大的改进,其改进涉及到核心.存储.网络.查询和安全性等多方面,自然,其用户登录认证机制也发生了改变,db.system.users的sche ...
- 编译Spring源码
近期,学习Spring源码.会陆续记录这次学习历程. Spring源码下载,环境中需要准备好的东西,git,gradle,eclipse (需要自己安装好) 1.Git clone Spring源码: ...
- Object Relational Mapping(ORM)
Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...
- 使用 pkg 打包分发 nodejs 应用
pkg 是一个很不错的跨平台 nodejs 应用打包工具,使用此工具,我们只需要给与用户提供一个简单的 可执行文件就可以了,同时代码也是二进制的,提高了代码的安全性 备注:测试demo 很简单,也比较 ...
- sqler sql 转rest api 授权处理
我们可以使用内置的authorizer 以及js 脚本,方便的进行api 接口的授权处理 说明: 这个是2.0 的功能,注意版本的使用 参考格式 addpost { authorizer = & ...