文档章节

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

webphp
 webphp
发布于 2017/07/26 11:28
字数 464
阅读 25
收藏 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
微信公众平台开发 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

没有更多内容

加载失败,请刷新页面

加载更多

初级开发-编程题

` public static void main(String[] args) { System.out.println(changeStrToUpperCase("user_name_abc")); System.out.println(changeStrToLowerCase(changeStrToUpperCase("user_name_abc......

小池仔
今天
4
0
现场看路演了!

HiBlock
昨天
8
0
Rabbit MQ基本概念介绍

RabbitMQ介绍 • RabbitMQ是一个消息中间件,是一个很好用的消息队列框架。 • ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的s...

寰宇01
昨天
9
0
官方精简版Windows10:微软自己都看不过去了

微软宣布,该公司正在寻求解决方案,以减轻企业客户的Windows 10规模。该公司声称,企业客户下载整个Windows 10文件以更新设备既费钱又费时。 微软宣布,该公司正在寻求解决方案,以减轻企业...

linux-tao
昨天
14
0
TypeScript基础入门之JSX(二)

转发 TypeScript基础入门之JSX(二) 属性类型检查 键入检查属性的第一步是确定元素属性类型。 内在元素和基于价值的元素之间略有不同。 对于内部元素,它是JSX.IntrinsicElements上的属性类型...

durban
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部