Access_Token是调用微信和小程序各种接口的临时凭证,有效期2小时(7200秒),很多接口都需要调用access_token接口生成一个access_token的,例如微信支付,微信分享,公众号的开发,获取openid,获取用户的基本信息,群发接口,还有网页授权等各类接口都是需要access_token的,而且每天最多只能调用2000次。

所以,量大的请求,不能每次发起请求都调用一次接口,2000次很快就请求完了,2000次用完了就没有新的access_token用了,所以不能每发起一次请求都生成一个access_token的,如果这样做,就造成不良后果。我们可以通过缓存的方法,把access_token缓存到本地或者内存中,在项目中取缓存中的access_token来调用。

因为一个access_token在2小时内都可以随便调用,没有调用次数的,而2小时后过期了,只能请求access_token生成接口,生成新的access_token,这时候新的access_token,我们可以缓存到本地或者内存,然后记录当前的时间戳,等到下次项目中需要用access_token的时候,先判断当前时间和缓存的access_token的时间差是否超过2小时,如果超过了,就调用access_token生成接口生成新的access_token,如果没有超时,那就使用缓存中的access_token。


<?php
//缓存access_token
function getToken(){
    $appid='填写你的APPID';//APPID
    $appsecret='填写你的APPSECRET';//APPSECRET
    $file = file_get_contents("access_token.json",true);//读取access_token.json里面的数据
    $result = json_decode($file,true);
    //判断access_token是否在有效期内,如果在有效期则获取缓存的access_token
    //如果过期了则请求接口生成新的access_token并且缓存access_token.json
if (time() > $result['expires']){
        $data = array();
        $data['access_token'] = getNewToken($appid,$appsecret);
        $data['expires']=time()+7000;
        $jsonStr =  json_encode($data);
        $fp = fopen("access_token.json", "w");
        fwrite($fp, $jsonStr);
        fclose($fp);
        return $data['access_token'];
    }else{
        return $result['access_token'];
    }
}
 
//获取新的access_token
function getNewToken($appid,$appsecret){
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
    $access_token_Arr =  https_request($url);
    return $access_token_Arr['access_token'];
}
 
//向获取access_token接口发起请求
function https_request ($url){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        $out = curl_exec($ch);
        curl_close($ch);
        return  json_decode($out,true);
}
 
//调用函数
getToken();
 
//输出当前缓存文件有效期内的access_token
$jsondata = file_get_contents('access_token.json');
$access_token_data = json_decode($jsondata);
echo $access_token_data->access_token;
?>

生成的本地缓存文件为
access_token.json
格式如下


{
  "access_token":"16_tTsgZ08Mf13NHsO8XT19faWwQVXKuBzLs3wElIyzGWMkcFLrSCBCKpXRd8dKuPC-A32fSJPIwKx4smzOgraV8U-2qzic6UIchBqk_LqmLPwDmPj4luOf6YQor0GotWOBg1bPsB29KzZy0ChFGCVfAIACYR",
  "expires":1544866066
}

作者:TANKING
网站:http://likeyunba.com

一个Accecc_Token生成和缓存和读取类,微信/小程序开发必须学的更多相关文章

  1. 全球首个实战类微信小程序开发教程

    小木学堂专注于企业实战开发和经验传授,所以微信小程序诞生这么大的事怎么能不带着大家一起学习学习呢,所以小木学堂讲师连夜赶工学习并实战开发了微信小应用的第一个程序,并录制了课程现免费分享给大家.这个速度 ...

  2. 微信小程序开发:学习笔记[9]——本地数据缓存

    微信小程序开发:学习笔记[9]——本地数据缓存 快速开始 说明 本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在 ...

  3. 微信小程序开发03-这是一个组件

    编写组件 基本结构 接上文:微信小程序开发02-小程序基本介绍 我们今天先来实现这个弹出层: 之前这个组件是一个容器类组件,弹出层可设置载入的html结构,然后再设置各种事件即可,这种组件有一个特点: ...

  4. 微信小程序开发(一)创建一个小程序Hello World!

    开发微信小程序并不是很难,网上有很多小程序开发资料,尤其是微信官方的<小程序开发指南>最详细. 下面是我开发小程序的历程: 第一步,请前往https://mp.weixin.qq.com/ ...

  5. 【云开发】10分钟零基础学会做一个快递查询微信小程序,快速掌握微信小程序开发技能(轮播图、API请求)

    大家好,我叫小秃僧 这次分享的是10分钟零基础学会做一个快递查询微信小程序,快速掌握开发微信小程序技能. 这篇文章偏基础,特别适合还没有开发过微信小程序的童鞋,一些概念和逻辑我会讲细一点,尽可能用图说 ...

  6. 微信小程序开发——使用第三方插件生成二维码

    需求场景: 小程序中指定页面需要根据列表数据生成多张二维码. 实现方案: 鉴于需要生成多张二维码,可以将生成二维码的功能封装到组件中,直接在页面列表循环中调用就好了.也可以给组件添加slot,在页面调 ...

  7. 微信小程序开发入门:10分钟从0开始写一个hello-world

    小程序开发需要三个描述整体程序的app文件 和 一个描述多个页面的 pages文件夹. (1)三个app文件分别是app.js,app.json,app.wxss. app.js文件是脚本文件处理一些 ...

  8. 微信小程序开发——打开另一个小程序

    微信小程序打开另一个小程序,有两种方法:1.超链接:2.点击按钮. 全局配置: 跳转到其他小程序,需要在当前小程序全局配置中配置需要跳转的小程序列表,代码如下: App.json { ... &quo ...

  9. 微信小程序开发——活动规则类文案文件读取及自动转换为小程序排版代码

    前言: 最近做的小程序活动规则内容比较多,且一直处于修改中.由于小程序并不支持类似Html5中的预排版,所以,活动规则内容修改较大的时候,仍需要对新的内容用小程序的<text>组件做下排版 ...

随机推荐

  1. 论文阅读:Forwarding Metamorphosis: Fast Programmable Match-Action Processing in Hardware for SDN

    摘要: 在软件定义网络中,控制平面在物理上与转发平面分离,控制软件使用开放接口(例如OpenFlow)对转发平面(例如,交换机和路由器)进行编程. 本文旨在克服当前交换芯片和OpenFlow协议的两个 ...

  2. 使用 Reactjs + Mobx + React-Router 开发项目时 VSCode 编辑器报警 TS 相关的问题(提示experimentalDecorators )

    vscode 对于 JS support 的支持需要配置,在项目根目录下创建一个 jsconfig.json 文件,把以下内容贴入后保存,重启项目即可生效(去掉提示). { "compile ...

  3. 翻译一篇英文文章,主要是给自己看的——在ASP.NET Core Web Api中如何刷新token

    原文地址 :https://www.blinkingcaret.com/2018/05/30/refresh-tokens-in-asp-net-core-web-api/ 先申明,本人英语太菜,每次 ...

  4. Java 工程师成神之路

    基础篇 → 什么是面向对象 面向对象.面向过程 是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象.类.继承.封装.多态等基本概念来进行程序设计.从现实世界 ...

  5. vue计算属性详解

    一.什么是计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.例如: <div id="example"> ...

  6. Spring boot之Hello World访问404

    (1)404 -- 确定地址是否输入正确,,此路径非彼路径 (2)404 -- 是否用对注解,此注解非彼注解 (3)404 -- 包路径是否正确,此包非彼包 (4)404 -- 确认类包是否正确,此类 ...

  7. 机器学习模型解释工具-Lime

    本篇文章转载于LIME:一种解释机器学习模型的方法 该文章介绍了一种模型对单个样本解释分类结果的方法,区别于对整体测试样本的评价指标准确率.召回率等,Lime为具体某个样本的分类结果做出解释,直观地表 ...

  8. MSO Transponder 页面开发思路

    1. 确定Transponder开发页面分类,定义负责模块 2. 定义模块页面布局 3. 选择页面各数据对应的控件类型 4. 选定控件对应set/get所用方式 快捷键链接设置: http://www ...

  9. ajax 调用 webService

    前台脚本<script type="text/javascript"> $(function () { $.ajax({ type: "POST", ...

  10. Singletom 单例

    class Singletom { //最差写法.构造方法是public的,有可能会被new出多个,那就不是单例了. public Singletom(){ } public static Singl ...