文档章节

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

webphp
 webphp
发布于 2017/07/26 11:28
字数 464
阅读 33
收藏 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
码字总数 92338
作品 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
微信公众号

https://mp.weixin.qq.com/ https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432&token=&lang=zh_CN 邹若其提供的微信公众号测试帐号 账号 lanmo90001@sina.com 密码iloveyo......

bravelionking
2016/04/28
2
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
微信网页授权登录实践总结

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

jinhyang
2017/11/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 你一口我一口多咬一口是小狗

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文 :分享Roy Orbison的单曲《She's a Mystery to Me》 《She's a Mystery to Me》- Roy Orbison 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
178
4
Spring源码学习笔记-1-Resource

打算补下基础,学习下Spring源码,参考书籍是《Spring源码深度解析》,使用版本是Spring 3.2.x,本来想试图用脑图记录的,发现代码部分不好贴,还是作罢,这里只大略记录下想法,不写太细了 ...

zypy333
今天
14
0
RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
今天
21
0

中国龙-扬科
昨天
4
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部