黄聪:如何高效率存储微信中的 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) ...
随机推荐
- Java中的comparable接口和Comparator接口的区别
一.comparable和Comparator的区别 1.Comparable和Comparator都是用来实现集合中元素的比较.排序的. 2.Comparable是在类内部定义的方法实现的排序,位于 ...
- Python用re正则化模块在字符串查找特定字符串
实验需要,在一个含有几亿个字符的txt文件中查找特定的字符串,首先用re模块进行查找 from time import clock import re start=clock() label_file ...
- Unity 3D用简单的Cube、Sphere实现镜面/哈哈镜效果,只需十几秒哦!
Unity实现镜面和哈哈镜效果 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分 ...
- 20155219 2016-2017-2 《Java程序设计》第7周学习总结
20155219 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 认识时间与日期 时间的度量 1.格林威治时间(GMT):通过观察太阳而得,因为地球公转轨道为 ...
- codefoce Cooking Time
#include <bits/stdc++.h> using namespace std; struct T { // 贪心 优先弹出相邻靠后的材料 int id; int p; bool ...
- Django---模版层
---https://www.cnblogs.com/liuqingzheng/articles/9509806.html 一.处理浏览器转义字符串的两种方式 1.{{ str|safe }} 2.在 ...
- 原版win10
windows10专业版:ed2k://|file|cn_windows_10_multiple_editions_x64_dvd_6848463.iso|4303300608|94FD861E824 ...
- 不输入密码执行sudo 命令
命令行执行的crontab 命令,但是需要包含sudo 才可以执行的命令,怎么办呢?见下: leo@leo-Ubuntu:/etc$ visudovisudo: /etc/sudoers: 权限不够v ...
- Redis源码剖析和注释(七)--- 快速列表(quicklist)
Redis 快速列表(quicklist)1. 介绍quicklist结构是在redis 3.2版本中新加的数据结构,用在列表的底层实现. 通过列表键查看一下:redis 列表键命令详解 127.0. ...
- Centos7下安装部署oracle数据库方法及问题汇总
目标:在centos7上配置oracle数据库服务器,并在win7上面使用pl/sql成功访问该oracle数据库 系统环境: 服务器:centos7 64位 客户端:win7 64位 注意cneto ...