文档章节

php获取微信公众帐号access_token存储并长期使用

webphp
 webphp
发布于 2017/07/26 11:28
字数 464
阅读 21
收藏 0
在做与微信公众帐号通信的时候,要获取access_token,由于微信公众号获取access_token每一天的上限为2000次,在开发中做测试的时候有可能会大于2000次,所以要把access_token的值长期存储,存储方式有很多比如数据库,缓存等,这里就以文件缓存写入。 代码如下:
<?php
header("Content-type: text/html; charset=utf-8");
$apitest = new GetWeixinToken ();
$apitest->cacheData('weixin_access_token');//获取微信公众号的access_token
class GetWeixinToken {

	private $_dir;
	const EXT = '.php';
	private $app_id;//微信公众号app_id
	private $appsecret;//微信公众号apsecret
	
	public function __construct() {
		$this->app_id = '你的微信appid';
		$this->appsecret = '你的apsecret';
		$this->_dir = dirname(__FILE__) . '/files/';
	}
	//获取微信公众号access_token
	public function getAccessToken(){
		$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->app_id.'&secret='.$this->appsecret;
		$token_json = $this->get_url($url);
		$token_arr = json_decode( $token_json, true );
		if( array_key_exists('errcode', $token_arr) ){
			exit( $token_arr['errmsg'] );
		}else{
			return $token_arr;
		}
	}
	
	//将获取到的access_token保存到缓存文件,以备长期使用
	//$key : 自定义文件名
	//$value : 写入缓存的数据
	public function cacheData($key,$expires="7200"){
		$filename = $this->_dir  . $key . self::EXT;
		//获取缓存时,判断文件是否存在
		if(!is_file($filename)) {
			$value = $this->getAccessToken();//获取微信公众号的access_token
			if($value !== '') { // 将value值写入缓存
				$dir = dirname($filename);
				if(!is_dir($dir)) {
					mkdir($dir, 0777);
				}
				$is_write_ok = file_put_contents($filename,json_encode($value));//写入数据
				if( $is_write_ok ){
					echo '直接获取'.$value['access_token'];
				}
			}
		}else{
			$file_modfiy_time = filemtime ( $filename );//获取文件的上次修改时间
			//如果当前时间距上次缓存的修改时间小于access_token的有效时间将不去写入缓存
			if( time() - $file_modfiy_time < $expires ){
				$contents = file_get_contents($filename);
				$access_token = json_decode( $contents ,true);
				echo '获取缓存'.$access_token['access_token'];
			}else{
				@unlink( $filename );//删除缓存文件
				$this->cacheData($key);
			}
		}
	
	}
	/**
	 * @param str $url post传递的url地址
	 * @return string
	 */
	public function get_url($url){
		//2初始化
		$ch = curl_init();
		//3.设置参数
		curl_setopt($ch , CURLOPT_URL, $url);
		curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
		//4.调用接口 
		$res = curl_exec($ch);
		if( curl_errno($ch) ){
			exit( curl_error() );
			exit();
		}else{
			return $res;
			//5.关闭curl
			curl_close( $ch );
		}
	}

}
 

© 著作权归作者所有

共有 人打赏支持
webphp
粉丝 1
博文 92
码字总数 92070
作品 0
海淀
程序员
授权后接口调用(UnionID)

通过code获取access_token 接口说明 通过code获取access_token的接口。 请求说明http请求方式: GEThttps://api.weixin.qq.com/sns/oauth2/accesstoken?appid=APPID&secret=SECRET&code=CODE......

噼里啪啦啦
2015/11/26
0
0
微信公众平台如何创建自定义菜单?

微信现在的功能越来越强大了,申请认证后的开发者能自定义菜单,用户直接点击微信界面下方的菜单,就能直接去到指定的页面,下面小编用【微信公众平台测试号】为大家演示一下怎么创建自定义菜...

DavidBao
2015/04/16
0
0
微信公众平台开发 OAuth2.0网页授权认证

一、什么是OAuth2.0 官方网站:http://oauth.net/ http://oauth.net/2/ 权威定义:OAuth is An open protocol to allow secure authorization in a simple and standard method from web, m......

大道至精
2014/10/22
0
1
微信公众平台开发 获取access token

在讲之前首先要知道怎么去学习,而不是去硬套,要把知识转成自己思维大脑里面的思路思维 查询第一手资料 不用到网上瞎找什么资料,直接看api胜比任何资料,有很多资料有误导性,我只是说有一...

AbrahamLeeJay
2015/07/18
0
0
微信网页授权登录实践总结

进行微信公众号内应用开发一年多了,最近不是很忙,就想起整理下自己用的东西。所以今天介绍下微信网页授权登录实现。一呢,帮助以后自己快速回忆;二呢,帮助刚接触的同行。 需求:如果用户...

jinhyang
2017/11/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

流量劫持是如何产生的?

流量劫持,这种古老的攻击沉寂了一段时间后,最近又开始闹的沸沸扬扬。众多知名品牌的路由器相继爆出存在安全漏洞,引来国内媒体纷纷报道。只要用户没改默认密码,打开一个网页甚至帖子,路由...

谢思华
14分钟前
0
0
Hadoop Client无法使用maven下载源码

最近在学习hadoop,使用maven的时候想看一下源码的注释,结果IDEA一直提示无法下载 搞得我一度以为maven坏掉了。 但是通过搜索,发现在maven仓库里确实没有源码.... 而2.8.1以及之前的版本是...

Iceberg_XTY
15分钟前
0
0
为什么程序员千万不要重写代码?

你所做的事情,也许暂时看不到成果,但不要灰心或焦虑,你不是没有成长,而是在扎根。 图片来自网络 0 前言 程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的...

Java小铺
17分钟前
0
0
VUE集成AdminLte

1. 安装需要到插件 npm i admin-lte -Snpm i jquery -Snpm i axios -Snpm i vue-router -S 2. 配置webpack.config.js 2.1 module.exports.module.rules修改字体loader: {test: /\.(p......

Pasenger
55分钟前
0
0
Spring Aop原理之切点表达式解析

在前面的文章(Spring AOP切点表达式详解)中,我们总结了Spring Aop切点表达式的用法,而在上文(Spring Aop原理之Advisor过滤)中我们讲到,切点表达式的解析主要是在PatternParser.parse...

爱宝贝丶
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部