众所周知,在微信开发中,获取access_token 的接口每天的调用次数是有限制的,2000次应该是。 
不过其实这些完全够用了,除非你不小心写了个循环,在1秒中内用完了。 
每个access_token 的生效时间是2小时内,2小时过后就需要重新申请一下。其实每天只需要申请12次就可以了。 
不管你怎么申请,当前申请了access_token,以前的就都不能用了。

所以解决办法就是: 
在数据库中新建一个表token盛放申请来的access_token,字段有三个

  1. access_token #存放access_token
  2. expires #存放毫秒数
  3. update_time #更新时间戳
  • 1
  • 2
  • 3

逻辑是这样的:(表中只有一条数据)

  1. 查询表中数据
  2. 如果有数据,用 时间戳+更新时间 现在时间比较,计算是否已过期:
  3. 如果已过期,重新申请,并更新数据库中数据,并返回access_token
  4. 如果没有过期,直接返回查询出的access_token
  5. 如果没数据:
  6. 申请数据并,插入数据库,返回access_tooken
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
查询表中数据是否有数据?查询数据是否过期向微信申请新token并插入数据库设置变量 access_token 的值返回 access_token输出数据库表中的access_token向微信申请新token并插入数据库yesnoyesno
  1. /*
  2. ---------------------
  3. 获取access_token:
  4. 查询数据库中是否有数据,
  5. 如果有 取出数据
  6. 如果已经过期,查询,更新记录
  7. 如果没过期,直接返回数据
  8. 如果没有 查询并添加数据,返回数据
  9. ---------------------
  10. */
  11.  
  12. function get_token(){
  13. $access_url= 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.AppID.'&secret='.AppScret;
  14. //AppID AppScret 已经定义为常量
  15.  
  16. //数据库参数
  17. $host= "1.1.1.1";
  18. $port = '3306';
  19. $database = "wx";
  20. $user = "mysql";
  21. $passwd = "mysql";
  22.  
  23. $db = new mysqli($host,$user,$passwd,$database,$port);
  24. $sql = "select * from token"; //查询wx表数据
  25. $exist = $db->query($sql);
  26.  
  27. global $access_token;
  28.  
  29. if($exist->num_rows)
  30. //如果存在数据
  31. {
  32. $row = $exist->fetch_array();
  33. //如果数据已过期
  34. if($row['expires']+$row['update_time']<time()){
  35. $token = json_decode(file_get_contents($access_url));
  36. $sql = "update token set access_token = '{$token->access_token}' where access_token = '{$row['access_token']}'";
  37. $db->query($sql);
  38. $access_token = $token->access_token; //返回更新的token
  39. } else {
  40. $access_token = $row['access_token']; //返回查询的token
  41. }
  42. }
  43. //如果没有数据
  44. else {
  45. $token = json_decode(file_get_contents($access_url));
  46. $sql = "insert into token values('{$token->access_token}',{$token->expires_in},".time().")";
  47. $db->query($sql);
  48. $access_token = $token->access_token; //返回新建的token
  49. }
  50. $db->close();
  51.  
  52. return $access_token; //返回access_token
  53. }

黄聪:如何高效率存储微信中的 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. OTG作为大容量设备

    /********************************************************************************* * OTG作为大容量设备 * 说明 ...

  2. AI之路,第二篇:python数学知识2

    第二篇:python数学知识2 线性代数 导入相应的模块: >>> import numpy as np     (数值处理模块)>>> import scipy ...

  3. Shell #*/ 和 %/*

    #!/bin/bash i="this/is/a/path.config" name=${i#*/} path=${i%/*} echo $name echo $path is/a ...

  4. Dij_heap__前向星。

    //前向星 struct node { int nxt; int val; int lst; node () {} node (int next, int value) : nxt(next), va ...

  5. SLES 12 SP2 安装src.rpm软件包

      系统型号: SUSE Enterprise  mv systemd-228-117.12.src.rpm   systemd     cd systemd 执行下面的命令解压:     rpm2c ...

  6. Spring cron表达式详解

    一个cron表达式有6个必选的元素和一个可选的元素,各个元素之间是以空格分隔的,从左至右,这些元素的含义如下表所示: 代表含义 是否必须 允许的取值范围 允许的特殊符号 秒 是 0-59 , - * ...

  7. next_permutation函数和per_permiutation函数

    next_permutation用于求有序数组里面的下一个排序,形式为next_permutation(数组名,数组名+n)

  8. QuickSort(Java)

    private void quickSort(int[] input, int start, int end) { if (start >= end) return; int index = p ...

  9. 2017.7.11 linux 挂载

    挂载:Liunx采用树形的文件管理系统,也就是在Linux系统中,可以说已经没有分区的概念了.分区在Linux和其他设备一样都只是一个文件.要使用一个分区必须把它加载到文件系统中.这可能难于理解,继续 ...

  10. 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 ...