开发者

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

开发者 https://www.devze.com 2023-11-19 12:31 出处:网络 作者: TANKING
目录Access_token存储更新获取access_token并缓存到本地access_token.php文件封装函数总结access_token存储更新
目录
  • Access_token存储更新
    • 获取access_token并缓存到本地access_token.php文件封装函数
  • 总结

    access_token存储更新

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

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

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

    <?php
    // APPID
    $APPID = 'xxx';
    // APPSECRET
    $Awww.devze.comPPSECRET = '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 {
            // 解析失败
      QhBgYYSNR      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";
            // 更新缓存文件
            updateAandroidccessTokenCache($TOKEN_FILE, $access_token, 7200);
        } else {
            // 刷新失败
            echo "Access_Token刷新失败\n";
        }
    }
    ?>

    总结

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

    以上就是php编写缓存微信access_token到本地脚本示例的详细内容,更多关于php access_token微信缓存本地脚本的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号