微信开发-access_token 过期解决方法

 微信提供了丰富发的开发接口(如包括自定义菜单接口、客服接口、获取用户信息接口),调用这些接口时需要传入 access_token,它是访问接口的凭证. 但access_token 时效只有7200s , 目前,获取access_token接口的调用频率限制为2000次/天. 如果每次使用接口前先获取一遍access_token,这显然不合理.

解决思路很简单:创建一个xml格式的文件,保存access_token,如果超时则更新.

创建xml文件

<?xml version="1.0" encoding="UTF-8"?>
<access_token_save>
	<appid>填写appid</appid>
	<appsecret>填写 appsecret</span></appsecret>
	<access_token>填写accesstoken</access_token>
	<time>填写更新时间戳</time>
</access_token_save>

构建获取access_token 类

class access_token {

		private $xml = array();//存储xml文件信息

		private $url ='xml文件路径';
		/*构造函数*/
		function __construct() {


				$this->read_xml();

				$this->judge_access_token_act();

		}



		/*读取xml文件*/

		private function read_xml() {

        	$xml = simplexml_load_file($this->url);

        	foreach ($xml as $k => $v) {

        		$this->xml[$k] = trim((string)$v);

        	}

		}



		/*更新xml文件*/

		private function write_xml() {

			$xml = simplexml_load_file($this->url);

			$xml->time = time();

			$xml->access_token = $this->xml['access_token'];

			$file = fopen($this->url,"w");

			fwrite($file,$xml->asXML());

			fclose($file);

		}



		/*获取access_token*/

		private function set_access_token() {

			$appid = $this->xml['appid'];

			$appsecret = $this->xml['appsecret'];

			$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";

			

			$ch = curl_init();

			curl_setopt( $ch, CURLOPT_URL, $url);

			curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, FALSE);

			curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, FALSE);

			curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);

			$output = curl_exec( $ch);

			curl_close( $ch);

			$jsoninfo = json_decode( $output, true);

			$this->xml['access_token'] = $jsoninfo["access_token"];

		}



		/*判断access_token是否超时*/

		private function judge_access_token_act(){

			$time = time() - (int)$this->xml['time'];

			if($time >= 1800){

				$this->set_access_token();

				$this->write_xml();

			}else{

				$this->access_token = $this->xml['access_token'];

			}

		}



		/*获取access_token*/

		function __toString() {

			return $this->xml['access_token'];

		}

	}


     需要获取acctoken 时调用格式如下

$acc = new access_token();

$access_token = $acc 

### 微信公众平台 access_token 获取方法 对于微信公众平台而言,`access_token` 是公众号的全局唯一票据,在调用微信平台接口时必需使用此凭证[^1]。为了确保顺利获取 `access_token` 并处理可能出现的问题,以下是具体的实现方式: #### 方法概述 通过 AppID 和 AppSecret 调用特定接口来获取 `access_token`。这两个参数可以在微信公众平台官网-开发者中心页面找到,前提是账号已注册成为开发者且无异常状况存在[^4]。 #### 实现代码示例 ```python import requests def get_access_token(appid, appsecret): url = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={appsecret}" response = requests.get(url) data = response.json() if 'access_token' in data: return data['access_token'] else: raise Exception(f"Failed to retrieve access_token: {data}") ``` 当尝试访问上述 URL 后返回的数据中包含有效的 `access_token` 字段,则表示请求成功;反之则会抛出错误提示信息以便进一步排查原因。 #### 错误码解释与应对措施 针对提到的两个常见错误码 40125 和 40164: - **40125**: 表明传入的应用程序身份验证失败,可能是由于输入了不正确的 AppID 或者 AppSecret 导致认证无法完成。此时应仔细核对所使用的应用程序凭证是否准确无误。 - **40164**: 提醒开发者注意当前应用处于未授权状态或者是被封禁的状态下不允许操作API接口。建议登录微信公众平台确认账户状态并按照指引解除限制后再试一次。 如果之前已经正常获得了 `access_token` 却突然失效(即过期),那么应当依据实际情况再次发起新的请求以刷新该令牌[^3]。 #### 数据安全注意事项 考虑到 `access_token` 的重要性和敏感度,强烈推荐将其妥善保管起来,避免泄露给第三方人员或公开暴露在网络环境中[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值