今日在做发送模板消息的时候,报了个48001access_token missing hint 错误,查看errcode 的合法值,里面并没有48001,就纳闷了。

注意,本文指的是小程序里报48001错误,如果你是做网页授权报48001错误,请看这篇文章 微信开发网页授权时报”errcode”:48001,errmsg:api unauthorized, hints。

冷静下来想了下,access_token错误一般是以下几种情况:

1、是不是多次重复请求了access_token的值,即新取的access_token值把之前的access_token值覆盖了。

2、access_token值过期了,小程序里access_token值时效性是7200秒。

3、获取的token时appid或者appsecret密钥错误

4、请求的api地址不正确,可能将api地址写成了其他的。

5、是否已经完成了微信认证。

大致我想的情况就是上面4种。

对于1-2的情况,我们可以写一个函数,来判断access_token值是否过期,如果过期了,就重新取。

public function getSiteToken_xcx(){
$this->config = D('Setting')->fetchAll();
$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' .$this->config['wxapp']['appid'] . '&secret=' .$this->config['wxapp']['appsecret'];
$data = json_decode(file_get_contents(BASE_PATH."/access_token_xcx.json"));
if($data->expire_time < time()) { // 判断是否过期,过期了重新取
$result = $this->curl->get($url);
$result = json_decode($result, true);
if(!empty($result['errcode'])){
return false;
} else {
// 将token存储在本地文件中
$data->expire_time = time() + 7200;
$data->access_token = $result['access_token'];
$fp = fopen(BASE_PATH."/access_token_xcx.json", "w");
fwrite($fp, json_encode($data));
fclose($fp);
return $result['access_token'];
}
}
return $data->access_token;
}

 

第三种,那么只能核对下appid或者appsecret密钥是否有误了。

我的情况是第四种,我是直接复制以前公众号开发的代码,一失足,就是大半天的排错啊………

公众号发模板消息:https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={$site_token}
小程序模板消息 https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token={$site_token}

小程序多了个wxopen。所以,如果你也报这个错误的话,可以核对下api地址是否正确。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注