文档章节

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

webphp
 webphp
发布于 2017/07/26 11:28
字数 464
阅读 17
收藏 0
点赞 0
评论 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
博文 91
码字总数 91650
作品 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

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, mobil......

xinson ⋅ 2014/08/01 ⋅ 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 ⋅ 1

微信公众平台如何创建自定义菜单?

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

DavidBao ⋅ 2015/04/16 ⋅ 0

微信公众平台开发自定义菜单功能开发

一、简介 微信公众平台服务号以及之前成功申请内测资格的订阅号都具有自定义菜单的功能。开发者可利用该功能为公众账号的会话界面底部增加自定义菜单,用户点击菜单中的选项,可以调出相应的...

hengfeng_su ⋅ 2013/12/02 ⋅ 0

微信公众平台开发 获取access token

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

AbrahamLeeJay ⋅ 2015/07/18 ⋅ 0

微信网页授权登录实践总结

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

jinhyang ⋅ 2017/11/30 ⋅ 0

微信开发__入门

0.作者前言 本文针对人群是有一定开发基础的人员,可以比较快的帮助你了解和学习微信开发. 其次是本文作者本次书写,全部采用的是个人的订阅号,假如是正常的开发流程,可能会存在不同,请读者注意...

mr_lp ⋅ 2016/05/31 ⋅ 0

PHP 微信 SDK--Wechat-sdk-php

关于PHP微信SDK 此SDK运行最底要求PHP版本5.3.3, 建议在PHP7运行以获取最佳性能。 微信的部分接口需要缓存数据在本地,因此对目录需要有写权限。 我们鼓励大家使用composer来管理您的第三方库...

邹景立 ⋅ 2016/10/12 ⋅ 2

开发微信公众平台时需要注意的安全问题

申请公众平台开发者模式需要填写一个URL和一个Token, 见下图: 如果这个URL和Token被别人猜中了, 并且你不判断消息中的ToUserName属性是否跟你微信号相配, 那么别人的公众帐号申请开发者时填写...

panpanhtai ⋅ 2014/06/28 ⋅ 3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

看东方明珠新媒体如何基于阿里视频云,构建完整的视频OTT平台SaaS服务

摘要: 东方明珠新媒体如何基于阿里云,搭建了面向第三方的视频SaaS服务?6月8日,上海云栖大会视频专场中,东方明珠新媒体股份有限公司云计算中心的副总周少毅带来了《东方明珠视频云》为题...

阿里云云栖社区 ⋅ 18分钟前 ⋅ 0

C#调用WebService实例和开发 VS2013

简单的理解就是:webservice就是放在服务器上的函数,所有人都可以调用,然后返回信息。 Web Service的主要目标是跨平台的可互操作性。为了实现这一目标,Web Service 完全基于XML(可扩展标...

布衣大侠 ⋅ 21分钟前 ⋅ 0

基于FlumeNG+Kafka+ElasticSearch+Kibana的日志系统

环境准备 1.服务器概览 hostname ip 操作系统 说明 安装内容 node1.fek 192.168.2.161 centos 7 node1节点 nginx,jdk1.8, flumeNG, elasticsearch slave1 node2.fek 192.168.2.162 centos ......

张shieppp ⋅ 21分钟前 ⋅ 0

问答网站已成过去,深度问答社区才是当下

曾几何时,各类问答网站数不胜数,从百度知道这类综合型问答网站到各种垂直细分的问答网站,都有不少,但到了移动互联网时代,很明显的一大趋势是,网站整体的流量都在下滑,随着移动智能设备...

ThinkSNS账号 ⋅ 24分钟前 ⋅ 0

Android平台架构(ART)

Android平台架构(ART) 本文目的:准确表述Android平台架构 本文转载自[Android官网] 本文定位:学习笔记 学习过程记录,加深理解。也希望能给学习的同学一些灵感 本文更新时间:2018.06.22(...

lichuangnk ⋅ 26分钟前 ⋅ 0

看东方明珠新媒体如何基于阿里视频云,构建完整的视频OTT平台SaaS服务

摘要: 东方明珠新媒体如何基于阿里云,搭建了面向第三方的视频SaaS服务?6月8日,上海云栖大会视频专场中,东方明珠新媒体股份有限公司云计算中心的副总周少毅带来了《东方明珠视频云》为题...

猫耳m ⋅ 27分钟前 ⋅ 0

Java 动态代理 原理解析

概要 AOP的拦截功能是由java中的动态代理来实现的。说白了,就是在目标类的基础上增加切面逻辑,生成增强的目标类(该切面逻辑或者在目标类函数执行之前,或者目标类函数执行之后,或者在目标...

轨迹_ ⋅ 30分钟前 ⋅ 0

js 获取当前时间

var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1970-????)myDate.getMonth(); //获取当前月份(0-11,0代表1月)myDate...

夜醒者 ⋅ 36分钟前 ⋅ 0

windows删除或修改本地Git保存的账号密码

在win10或者win7都是一样的步骤: (一)进入控制面板(二)选择用户账户(三)选择管理你的凭据(四)选择Windows凭据(五)选择git保存的用户信息(六)选择编辑或者进...

果树啊 ⋅ 36分钟前 ⋅ 0

8个基本的Docker容器管理命令

前言: 在这篇文章中,我们将带你学习 8 个基本的 Docker 容器命令,它们操控着 Docker 容器的基本活动,例如 运行run、 列举list、 停止stop、 查看历史纪录logs、 删除delete 等等。文末福...

java高级架构牛人 ⋅ 38分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部