微信公众号开发 基础支持 获取access_token
下班闲来无事,写的微信基础授权接口,纯手打,并非网上复制,有兴趣的朋友可以参考一下
网页用户授权和拉取用户信息可查看博主其他文章
有兴趣的朋友或者PHP新手可以关注我,不定时更新PHP代码
代码基于 Apache2.4.39 + MySql5.7.26 + PHP7.4.3nts + 小皮面板 + Thinkphp 5.0.24
/**
* 获取基础 access_token 与网页服务的 access_token 不同
*/
//自定义sql连接
public $Db = [
'type' => 'mysql',//
'hostname' => '',
'database' => '',
'username' => '',
'password' => '',
'hostport' => '3306',
'prefix' => 'w_',
];
public $Appid = "";
public $AppSecret = "";
public $GetToken = "https://api.weixin.qq.com/cgi-bin/token?grant_type=";
public function GetToken()
{
$Db = Db::connect($this->Db)->name("wechat_token");
$grant_type = "client_credential";// 获取access_token填写client_credential
$token_url = $this->GetToken . "$grant_type&appid=" . $this->Appid . "&secret=" . $this->AppSecret;
/**
* 判断Token是否已经存在
* 1. 根据缓存判断(自行修改条件)
* 1.1 直接判断缓存是否为空
* 1.2 因为微信返回为 7200s 和 缓存时长一致,可直接判断
* 2. 根据SQL数据判断 (推荐)
* 2.1 查出SQL数据
* 2.2 根据上次 (更新|添加) 时间 + 微信返回的可用时长
* 2.2 若大于当前时间 ? 未超时 : 超时
*/
$AcctokenData = $Db->where(["name" => "access_token"])->find();
if (empty($AcctokenData) or $AcctokenData['expiration'] < time()) {
// 不存在
//获取链接内容
$TokenInfo = $this->PostCurl($token_url);
//获取内容默认:JSON,需要转为数组方便调用
$TokenInfo = !empty($TokenInfo) ? json_decode($TokenInfo, true) : NULL;
// 判断是否获取到 access_token
if (!empty($TokenInfo['access_token'])) {
//已获取到 access_token 存入session 或 存入SQL (缓存存在局限性,建议存到SQL)
$AcctokenCount = $Db->where(["name" => "access_token"])->count();
if ($AcctokenCount == 0) {
$Db->insert([
'name' => "access_token", "token" => $TokenInfo['access_token'],
'obtain' => time(), 'expires_in' => $TokenInfo['expires_in'],
"expiration" => time() + $TokenInfo['expires_in']
]);
} else {
$Db->where(["name" => "access_token"])->update([
"token" => $TokenInfo['access_token'], 'obtain' => time(),
'expires_in' => $TokenInfo['expires_in'], "expiration" => time() + $TokenInfo['expires_in']
]);
}
$access_token = $TokenInfo['token'];
} else {
return $this->msg(404, "获取Token失败,失败原因:" . $TokenInfo['errmsg'], $TokenInfo, 0);
}
} else {
// Token存在并且未超时
$access_token = $AcctokenData['token'];
}
return $this->msg(200, "调用成功", ['access_token' => $access_token,], 1);
}