当前位置: 代码网 > it编程>编程语言>Php > php编写缓存微信access_token到本地脚本示例

php编写缓存微信access_token到本地脚本示例

2024年05月18日 Php 我要评论
access_token存储更新access_token 的存储至少要保留 512 个字符空间;access_token 的有效期目前为 2 个小时,需定时刷新,重复获取将导致上次获取的 access

access_token存储更新

access_token 的存储至少要保留 512 个字符空间;

access_token 的有效期目前为 2 个小时,需定时刷新,重复获取将导致上次获取的 access_token 失效,并且每天获取的频次有限,所以需要进行本地缓存或者缓存到数据库进行使用,而不是每次调用接口都获取access_token

获取access_token并缓存到本地access_token.php文件封装函数

<?php
// appid
$appid = 'xxx';
// appsecret
$appsecret = 'xxx';
// 缓存文件路径
$token_file = 'access_token.php';
// 刷新 access_token 的函数
function refreshaccesstoken($appid, $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_returntransfer, true);
    // 结果
    $response = curl_exec($ch);
    curl_close($ch);
    // 解析结果
    $data = json_decode($response, true);
    if (isset($data['access_token'])) {
        // 返回access_token
        return $data['access_token'];
    } else {
        // 解析失败
        return false;
    }
}
// 从缓存文件中获取 access_token 和过期时间戳
function getaccesstokenfromcache($tokenfile) {
    // 判断缓存文件是否存在
    if (file_exists($tokenfile)) {
        // 如果缓存文件存在
        $tokendata = include($tokenfile);
        if ($tokendata && is_array($tokendata) && isset($tokendata['access_token']) && isset($tokendata['expires_at'])) {
            // 返回access_token
            return $tokendata;
        }
    }
}
// 更新缓存文件中的 access_token
function updateaccesstokencache($tokenfile, $access_token, $expires_in) {
    // 提前一分钟刷新
    $expires_at = time() + $expires_in - 60;
    // 生成缓存文件
    $tokendata = "<?php\nreturn array('access_token' => '$access_token', 'expires_at' => $expires_at);\n";
    file_put_contents($tokenfile, $tokendata);
}
// 获取当前时间
$current_time = time();
// 从缓存文件中获取 access_token 和过期时间戳
$tokendata = getaccesstokenfromcache($token_file);
// 未过期
if ($tokendata && $tokendata['expires_at'] > $current_time) {
    // 使用缓存的 access_token
    $access_token = $tokendata['access_token'];
    // 输出已缓存的access_token
    echo "缓存的access_token: $access_token\n";
} else {
    // 刷新 access_token
    $access_token = refreshaccesstoken($appid, $appsecret);
    // 获取成功
    if ($access_token) {
        // 输出新的access_token
        echo "新的access_token: $access_token\n";
        // 更新缓存文件
        updateaccesstokencache($token_file, $access_token, 7200);
    } else {
        // 刷新失败
        echo "access_token刷新失败\n";
    }
}
?>

总结

在以上脚本中,加载这个脚本,会立刻读取本地access_token.php文件,如果存在这个文件,就解析这个文件的内容,读取里面的access_token和过期时间,如果过期了,就直接调用请求接口获取信的access_token并更新文件,如果没有过期,直接使用access_token.php文件里面的access_token作为业务需要。

以上就是php编写缓存微信access_token到本地脚本示例的详细内容,更多关于php access_token微信缓存本地脚本的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com