文章目录
前言
为了方便获取储存AccessToken,我们需要一个AccessTokenUtil的工具类来管理,以下是在项目中编写的代码
提示:以下是本篇文章正文内容,下面案例可供参考
一、AccessToken是什么?
第三方服务商在取得企业的永久授权码后,通过获取企业的access_token,可通过通讯录、应用、消息等企业接口来运营这些应用
二、使用步骤(最下面附完整代码)
1. 调用企业接口所需的access_token获取方法
代码如下(示例):
private static final String ACCESS_TOKEN_URL = "https://qyapi.weixin.qq.com/cgi-bin/gettoken";
请求地址: 官方给的接口是https://qyapi.weixin.qq.com/cgi-bin/service/get_corp_token?suite_access_token=SUITE_ACCESS_TOKEN,我们直接用private static final String ACCESS_TOKEN_URL把url给码住,后面的参数我们拼接上去
2. 缓存access_token
代码如下(示例):
// 缓存access_token,避免频繁获取
private static String accessToken;
private static long expiredTime;
3. 获取access_token
已经添加注释,放心食用,煎蛋鸣鸟
/**
* 获取access_token
* @param corpId 企业ID
* @param secret 应用secret
* @return access_token
* @throws IOException
*/
public static String getAccessToken(String corpId, String secret) throws IOException {
//如果缓存中的access_token还没有过期,则直接返回缓存中的access_token
if (accessToken != null && System.currentTimeMillis() < expiredTime) {
return accessToken;
}
// 向企业微信API请求access_token
URL url = new URL(ACCESS_TOKEN_URL + "?corpid=" + corpId + "&corpsecret=" + secret);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
//解析返回结果
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
StringBuilder result = new StringBuilder();
while ((line = reader.readLine()) != null) {
result.append(line);
}
reader.close();
conn.disconnect();
//解析JSON格式的返回结果
JSONObject json = new JSONObject(result.toString());
if (json.getInt("errcode") == 0) {
accessToken = json.getString("access_token");
// access_token有效期为7200秒,这里设置提前60秒过期
expiredTime = System.currentTimeMillis() + (7200 - 60) * 1000;
return accessToken;
} else {
throw new IOException("Failed to get access_token, errcode: " + json.getInt("errcode") + ", errmsg: " + json.getString("errmsg"));
}
}
三、完整代码(一键快乐,轻松导包)
package com.yf.ground.aspect.utils;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class AccessTokenUtil {
private static final String ACCESS_TOKEN_URL = "https://qyapi.weixin.qq.com/cgi-bin/gettoken";
// 缓存access_token,避免频繁获取
private static String accessToken;
private static long expiredTime;
/**
* 获取access_token
* @param corpId 企业ID
* @param secret 应用secret
* @return access_token
* @throws IOException
*/
public static String getAccessToken(String corpId, String secret) throws IOException {
//如果缓存中的access_token还没有过期,则直接返回缓存中的access_token
if (accessToken != null && System.currentTimeMillis() < expiredTime) {
return accessToken;
}
// 向企业微信API请求access_token
URL url = new URL(ACCESS_TOKEN_URL + "?corpid=" + corpId + "&corpsecret=" + secret);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
//解析返回结果
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
StringBuilder result = new StringBuilder();
while ((line = reader.readLine()) != null) {
result.append(line);
}
reader.close();
conn.disconnect();
//解析JSON格式的返回结果
JSONObject json = new JSONObject(result.toString());
if (json.getInt("errcode") == 0) {
accessToken = json.getString("access_token");
// access_token有效期为7200秒,这里设置提前60秒过期
expiredTime = System.currentTimeMillis() + (7200 - 60) * 1000;
return accessToken;
} else {
throw new IOException("Failed to get access_token, errcode: " + json.getInt("errcode") + ", errmsg: " + json.getString("errmsg"));
}
}
}
总结
如果还是有报错,建议看下xml有没有引入企业微信的依赖,有问题欢迎评论区和私信。