众所周知,在微信开发中,获取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
查询表中数据是否有数据?查询数据是否过期向微信申请新token并插入数据库设置变量 access_token 的值返回 access_token输出数据库表中的access_token向微信申请新token并插入数据库yesnoyesno
/*
---------------------
获取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的更多相关文章

  1. 黄聪:日租VPS中FileZilla_Server配置方法

    1.关闭VPS中IIS的FTP服务 2.FileZilla_Server 监听端口 21 3.FTP客户端端口为11311(看服务商给出的)

  2. 黄聪:wordpress在IIS8中设置默认编码(windows2012服务器)

    web.config中配置 <?xml version="1.0" encoding="UTF-8"?> <configuration> ...

  3. 黄聪:WordPress制作插件中使用wp_enqueue_script('jquery')库不起作用解决方法

    这个应该不是什么新信息,但我却是现在才搞清楚. 今天又是在wordpress调用jquery,情况还是如此.无意中打开wordpress中jquery.js,然后对比code.jquery.com中的 ...

  4. 黄聪:C#禁止Webbrowser中的脚本错误提示,自动屏蔽弹出窗口

    using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using ...

  5. 黄聪:微信公众平台开发OAuth2.0网页授权(转)

    微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息 作者:方倍工作室 微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使 ...

  6. 黄聪:VS2010开发如何在c#中使用Ctrl、Alt、Tab等全局组合快捷键

    1.新建一个类 HotkeyHelper  using System; using System.Runtime.InteropServices; using System.Windows.Forms ...

  7. 黄聪:Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (高级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (高级) Caching Application Bl ...

  8. 黄聪:Microsoft Enterprise Library 5.0 系列教程(一) : Caching Application Block (初级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(一) : Caching Application Block (初级) 本篇文章具体官方解释请参照以下链接: h ...

  9. 黄聪:Microsoft Enterprise Library 5.0 系列教程(九) Policy Injection Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(九) Policy Injection Application Block 代理对象(Proxy Object) ...

随机推荐

  1. e与复利

    e≍2.718 计算一个复利例子,设本金p,年利率为r,每月计算一次利息,月利息为r/12,则一年的本息一共: p(1+r/12)12=pq 当计算复利的时间间隔越来越小,根据上面极限公式,本金所乘的 ...

  2. Unity 3D与Android Studio安卓交互之-导出jar包

    u3d与安卓 jar 包交互 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...

  3. tomcat服务器安装方法

    tomcat: 链接:https://pan.baidu.com/s/1pMEu0hP 密码:g0ah      (tomcat7) jdk :链接:https://pan.baidu.com/s/1 ...

  4. stm32l071cbt6片内flash操作

    今天在看片内flash的操作,发现按照下面的操作并没有写成功: unsigned long temp = 0x12345678; HAL_FLASH_Unlock(); FLASH_PageErase ...

  5. LeetCode–Flip Game

    You are playing the following Flip Game with your friend: Given a string that contains only these tw ...

  6. linux查看网络信息命令

    #遇到一条很长的命令怎么办,想换行的时候在末尾增加\符号就可以换行继续输入命令了 #在ifconfig内容中找出ip [root@bogon ~]# ifconfig ens33|grep " ...

  7. IAR intrinsic functions

    You can insert asm code example asm("NOP") into the c or c++ source code to get a good per ...

  8. python基础教程_学习笔记9:抽象

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/30745465 抽象 懒惰即美德. 抽象和结构 抽 ...

  9. NET使用NPOI组件导出Excel-入门示例及通用方法

    一.Excel导入及导出问题产生:   从接触.net到现在一直在维护一个DataTable导出到Excel的类,时不时还会维护一个导入类.以下是时不时就会出现的问题:   导出问题:   如果是as ...

  10. kettle的系列教程

    kettle--window开发环境和linux运行环境的迁移 kettle的输入输出组件和脚本组件 kettle--变量的使用 kettle的资源库 kettle的job kettle的hello ...