需求背景:在TP5项目中,获取微信的access_token并存储到Redis,并可以通过Redis查询access_token
第一步:创建一个获取access_token的方法,该方法需要向微信服务器发送请求,获取access_token,并将access_token存储到Redis中:
public function getAccessToken()
{
$appid = 'your_appid'; // 替换成自己的appid
$secret = 'your_secret'; // 替换成自己的secret
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}";
$result = file_get_contents($url);
$json = json_decode($result, true);
$access_token = $json['access_token'];
// 存储access_token到Redis中
\think\facade\Cache::store('redis')->setex('access_token', 7100, $access_token);
return $access_token;
}
在上述代码中,使用setex命令将access_token存储到Redis中,并设置了过期时间为7100秒(微信access_token的有效期为7200秒)。
第二步:在Controller中调用该方法,获取access_token并查询:
public function index()
{
$redis = \think\facade\Cache::store('redis');
$access_token = $redis->get('access_token');
if (!$access_token) {
$access_token = $this->getAccessToken();
}
// 输出access_token
echo $access_token;
}
首先从Redis中获取access_token,如果获取失败,则调用getAccessToken方法重新获取access_token,并存储到Redis中。然后输出access_token。
需要注意:当access_token过期时,需要重新获取并存储到Redis中,以保证access_token的有效性。可以通过定时任务来更新access_token,或者在每次使用access_token之前检查access_token是否过期,如果过期则重新获取。