微信分享签名后台缓存token,使用文件方式

完成签名后台之后,其实目前每天2000已经够用了,但还是完善一下。

设计思想就是加一个判断,因为从公众号中获取的token的保鲜期就两个小时,也就是7200s,如果还新鲜,就在文件中取,如果不新鲜,就重新请求微信获取token,然后把新的token存到文件中,并更新获取token的时间。

其实就是把token和时间存一下,使用文件、数据库都可以实现,我用的是文件。

先说文件,我是使用.properties文件,然后里面有两个键值,一个token用来存放token的值,一个是time用来存放取token的时间,我存放的是通过System.currentTimeMillis();获取的毫秒数。
文件token.properties

token=1111
time=22222

工具类readAndwirte,java

import java.util.Properties;
import java.util.Enumeration;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class readAndwrite {
	 //读取信息
	public static String readBykey(String filePath, String key) {
        Properties p = new Properties();
        try {
            InputStream in = new BufferedInputStream (new FileInputStream(filePath));  
            p.load(in);
            String value = p.getProperty(key);
            return value;
        }catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
    //写入信息
    public static void WriteBykey (String filePath, String Key, String Value) throws IOException {
        Properties p = new Properties();
        InputStream in = new FileInputStream(filePath);
        //从输入流中读取属性列表(键和元素对) 
        p.load(in);
        //调用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。  
        //强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。
        OutputStream out = new FileOutputStream(filePath);
        p.setProperty(Key, Value);
        //以适合使用 load 方法加载到 Properties 表中的格式,  
        //将此 Properties 表中的属性列表(键和元素对)写入输出流  
        p.store(out, "Update " + Key + " name");
    }
}

因为每个人的业务不同,所以只给出使用的例子example.java思路就是当前毫秒和获取token时候的毫秒/1000相减看是否大于7200。

public String example {
		//地址是绝对地址
		long getoldtime = Long.parseLong(readAndwrite.GetValueByKey("C:/token/token.properties","time"));
		long currentTimeMillis = System.currentTimeMillis();
		if((currentTimeMillis-getoldtime)/1000>7200){
			accessToken = getAccessToken();//你定义的请求微信服务器获取token的方法
			try {
				readAndwrite.WriteProperties("C:/token/token.properties","token", accessToken);
				readAndwrite.WriteProperties("C:/token/token.properties","time", String.valueOf(currentTimeMillis));
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}else{
			accessToken=readAndwrite.GetValueByKey("C:/token/token.properties","token");
		}
		return token;
	}

需要注意的是,在写入和读出的时候传的地址是绝对地址,所以你本地和部署到服务器上的地址是不同的,这要注意一下,要不然404。
最后感谢:读取写入的例子。
https://blog.youkuaiyun.com/qy20115549/article/details/73368611

要获取微信小程序的 `token`,通常涉及两种主要场景:**用户登录凭证(`code`)换取用户登录态 `token`** 和 **开发者服务器通过 `appid` 与 `secret` 获取全局唯一后台接口调用凭据 `access_token`**。 ### 用户登录态 token 的获取 在微信小程序中,用户登录后可以通过 `wx.login()` 接口获取临时登录凭证 `code`,随后将该 `code` 发送到开发者服务器,由服务器通过微信接口换取用户的 `openid` 和 `session_key`。此时,开发者服务器可以生成一个自定义的 `token` 来标识用户身份,并返回给小程序端存储使用。 #### 小程序端示例代码: ```javascript wx.login({ success: res => { if (res.code) { // 向开发者服务器发送 code 换取 token wx.request({ url: 'https://yourdomain.com/api/login', method: 'POST', data: { code: res.code }, success: response => { const token = response.data.token; wx.setStorageSync('token', token); // 存储 token } }); } else { console.log('登录失败!' + res.errMsg); } } }); ``` ### 开发者服务器获取 access_token 如果需要调用微信开放平台提供的某些后台接口(如模板消息、统一支付等),则需通过 `appid` 和 `appsecret` 向微信服务器请求全局唯一的 `access_token`。 #### Python 示例代码: ```python import requests url = "https://api.weixin.qq.com/cgi-bin/token" params = { "grant_type": "client_credential", "appid": "YOUR_APPID", "secret": "YOUR_APPSECRET" } response = requests.get(url, params=params) if response.status_code == 200: result = response.json() access_token = result.get("access_token") print("Access Token:", access_token) else: print("Failed to get access_token. Status code:", response.status_code) ``` ### 使用 token 发送请求 在后续请求业务接口时,可以在请求头中携带 `token` 信息,以表明用户身份或调用权限。 #### 请求头示例: ```javascript var header = { 'content-type': 'application/json', 'Authorization': wx.getStorageSync("token") // 使用本地存储的 token }; ``` ### 注意事项 - `access_token` 是全局变量,具有一定的有效期(通常是 7200 秒),建议缓存并定期刷新。 - 自定义的用户 `token` 应具备安全性,防止伪造和篡改,推荐结合 JWT 或加密签名方式生成[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值