黄聪:如何高效率存储微信中的 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) ...
随机推荐
- OTG作为大容量设备
/********************************************************************************* * OTG作为大容量设备 * 说明 ...
- AI之路,第二篇:python数学知识2
第二篇:python数学知识2 线性代数 导入相应的模块: >>> import numpy as np (数值处理模块)>>> import scipy ...
- Shell #*/ 和 %/*
#!/bin/bash i="this/is/a/path.config" name=${i#*/} path=${i%/*} echo $name echo $path is/a ...
- Dij_heap__前向星。
//前向星 struct node { int nxt; int val; int lst; node () {} node (int next, int value) : nxt(next), va ...
- SLES 12 SP2 安装src.rpm软件包
系统型号: SUSE Enterprise mv systemd-228-117.12.src.rpm systemd cd systemd 执行下面的命令解压: rpm2c ...
- Spring cron表达式详解
一个cron表达式有6个必选的元素和一个可选的元素,各个元素之间是以空格分隔的,从左至右,这些元素的含义如下表所示: 代表含义 是否必须 允许的取值范围 允许的特殊符号 秒 是 0-59 , - * ...
- next_permutation函数和per_permiutation函数
next_permutation用于求有序数组里面的下一个排序,形式为next_permutation(数组名,数组名+n)
- QuickSort(Java)
private void quickSort(int[] input, int start, int end) { if (start >= end) return; int index = p ...
- 2017.7.11 linux 挂载
挂载:Liunx采用树形的文件管理系统,也就是在Linux系统中,可以说已经没有分区的概念了.分区在Linux和其他设备一样都只是一个文件.要使用一个分区必须把它加载到文件系统中.这可能难于理解,继续 ...
- LeetCode - Find K Closest Elements
Given a sorted array, two integers k and x, find the k closest elements to x in the array. The resul ...