微信 access_token 获取 保存 php 代码

思路:

// access_token 获取到的凭证

// expires_in   凭证有效时间,单位:秒 ,7200s过期

// 1.首先读取php session缓存

// 2.如果php session缓存读取失败,就读取存入的json文件(并写入缓存。下次就直接读取缓存了)

// 3.读取文件失败或者凭证时间只剩下1200s(已经超过100分钟(6000秒)),再次通过微信API接口获取,获取后写入到json文件,并写入到php session缓存

// 进行前两步,从缓存和文件进行获取凭证时,如果凭证时间只剩下1200s(已经超过100分钟(6000秒)),则直接执行第三部(通过微信API接口获取,获取后写入到json文件,并写入到php session缓存)

可以将写入json文件改为写入数据库,或者把写入数据库也加入其中,四层保证。

<?php
// 微信公众平台应用ID和密钥
$appid = "你的id";
$appsecret = "你的秘钥";

// 凭证文件路径
$tokenFile = "./token.json"; // 请替换为实际的文件路径

// 尝试从会话缓存中获取access_token
session_start();
if (isset($_SESSION['access_token']) && isset($_SESSION['expire_time']) && time() < $_SESSION['expire_time']) {
    $access_token = $_SESSION['access_token'];
} else {
    // 会话缓存不存在或已过期,尝试从文件中读取
    if (file_exists($tokenFile)) {
        $data = json_decode(file_get_contents($tokenFile), true);
        if (time() < $data['expire_time']) {
            $access_token = $data['access_token'];
            $_SESSION['access_token'] = $access_token;
            $_SESSION['expire_time'] = $data['expire_time'];
        } else {
            // 文件中的凭证也过期了,需要重新获取
            $access_token = getAccessToken($appid, $appsecret, $tokenFile);
        }
    } else {
        // 文件不存在,创建文件并获取新的access_token
        $access_token = getAccessToken($appid, $appsecret, $tokenFile);
    }
}

// 获取access_token的函数
function getAccessToken($appid, $appsecret, $tokenFile)
{
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
    $result = json_decode(file_get_contents($url), true);
    if (isset($result["access_token"])) {
        $access_token = $result["access_token"];
        $expire_time = time() + $result["expires_in"] - 1200; // 提前1200秒过期
        // 将新的access_token和过期时间保存到会话缓存
        $_SESSION['access_token'] = $access_token;
        $_SESSION['expire_time'] = $expire_time;
        // 将新的access_token和过期时间保存到文件
        if (!file_put_contents($tokenFile, json_encode(["access_token" => $access_token, "expire_time" => $expire_time]))) {
            // 如果写入文件失败,则抛出异常
            throw new Exception("无法写入凭证文件");
        }
        return $access_token;
    } else {
        // 获取access_token失败,处理错误
        // 错误处理代码(根据需要添加)
        return null;
    }
}

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值