微信公众平台开发自动更新微信access token

互联网 17-3-7
本文介绍如何存储及更新 access token的方法。

一、Access Token

access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。正常情况下access_token有效期为7200秒,重复获取将导致上次获取的access_token失效。

公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在开发模式中获得(需要已经成为开发者,且帐号没有异常状态)。注意调用所有微信接口时均需使用https协议。

接口调用请求说明

http请求方式: GET  https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

参数说明

参数是否必须说明
grant_type获取access_token填写client_credential
appid第三方用户唯一凭证
secret第三方用户唯一凭证密钥,既appsecret

返回说明

正常情况下,微信会返回下述JSON数据包给公众号:

{"access_token":"ACCESS_TOKEN","expires_in":7200}

三、实现

class class_weixin  {      var $appid = APPID;      var $appsecret = APPSECRET;        //构造函数,获取Access Token      public function __construct($appid = NULL, $appsecret = NULL)      {          if($appid && $appsecret){              $this->appid = $appid;              $this->appsecret = $appsecret;          }            //1. 数据库形式          /*          DROP TABLE IF EXISTS `wx_token`;          CREATE TABLE IF NOT EXISTS `wx_token` (            `id` int(1) NOT NULL,            `type` varchar(20) NOT NULL,            `expire` varchar(16) NOT NULL,            `value` varchar(600) NOT NULL,            PRIMARY KEY (`id`)          ) ENGINE=MyISAM DEFAULT CHARSET=utf8;            INSERT INTO `wx_token` (`id`, `type`, `expire`, `value`) VALUES          (1, 'access_token', '1425534992', 't3oyW9fRnOWKQHQhZXoEH-pgThhjmnCqTVpaLyUD'),          (2, 'jsapi_ticket', '', '');          */          $con = mysql_connect(MYSQLHOST.':'.MYSQLPORT, MYSQLUSER, MYSQLPASSWORD);          mysql_select_db(MYSQLDATABASE, $con);          $result = mysql_query("SELECT * FROM `wx_token` WHERE `type` = 'access_token'");          while($row = mysql_fetch_array($result))          {              $this->access_token = $row['value'];              $this->expires_time = $row['expire'];              break;          }          if (time() > ($this->expires_time + 3600)){              $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->appsecret;              $res = $this->http_request($url);              $result = json_decode($res, true);              $this->access_token = $result["access_token"];              $this->expires_time = time();              mysql_query("UPDATE `wx_token` SET `expire` = '$this->expires_time', `value` = '$this->access_token' WHERE `type` = 'access_token';");          }            //2. 缓存形式          if (isset($_SERVER['HTTP_APPNAME'])){        //SAE环境,需要开通memcache              $mem = memcache_init();          }else {                                        //本地环境,需已安装memcache              $mem = new Memcache;              $mem->connect('localhost', 11211) or die ("Could not connect");          }          $this->access_token = $mem->get($this->appid);          if (!isset($this->access_token) || empty($this->access_token)){              $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->appsecret;              $res = $this->http_request($url);              $result = json_decode($res, true);              $this->access_token = $result["access_token"];              $mem->set($this->appid, $this->access_token, 0, 3600);          }            //3. 本地写入          $res = file_get_contents('access_token.json');          $result = json_decode($res, true);          $this->expires_time = $result["expires_time"];          $this->access_token = $result["access_token"];            if (time() > ($this->expires_time + 3600)){              $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->appsecret;              $res = $this->http_request($url);              $result = json_decode($res, true);              $this->access_token = $result["access_token"];              $this->expires_time = time();              file_put_contents('access_token.json', '{"access_token": "'.$this->access_token.'", "expires_time": '.$this->expires_time.'}');          }            //4. 实时拉取          $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->appsecret;          $res = $this->http_request($url);          $result = json_decode($res, true);          $this->access_token = $result["access_token"];          $this->expires_time = time();      }

更多微信公众平台开发自动更新微信access token相关文章请关注PHP中文网!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 微信开发
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:C#开发微信门户及应用公众号模板消息管理

相关资讯