本文为代码记录,是最开始写的文件存取access_token方法,代码是否好使未经过验证。复用需谨慎。
package com.weixin.model.Dispatcher;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.google.gson.Gson;
import com.weixin.model.Po.WechatUserinfo;
/**
*
* @author xx
*作用:获取token的工具类
*/
public class AccessToken {
WechatUserinfo accessToken;
//获得新的access_token
public String getAccessToken(String APPID,String APPSECRET) {
APPID="wxe47ae801a9375665";
APPSECRET="f2ae94a7c20ac5c0bb5956f2431a5393";
//1.拼接api要求的获取access_token 的httpsurl链接
String urlString = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
+ APPID + "&secret=" + APPSECRET;
URL reqURL=null;
HttpsURLConnection httpsConn=null;
InputStreamReader isr=null;
try {
//2.创建一个url对象
reqURL = new URL(urlString);
try {
//3.获取一个链接
httpsConn= (HttpsURLConnection) reqURL.openConnection();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 4.取得该连接的输入流,用来读取响应内容
try {
isr = new InputStreamReader(httpsConn.getInputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 4.1读取服务器的响应内容并显示
// 4.2 InputStreamReader的int read(char []cbuf);//将读取到的字符存到数组中。返回读取的字符数。
char[] chars = new char[1024];
String reslut = "";
int len;
try {
//拼接字符串
while ((len = isr.read(chars)) != -1) {
reslut += new String(chars, 0, len);
}
isr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*
* 5.将获取的json转化为java中的bean。引入了第三方jar:GSON
*/
// 5.1 实例化一个Gson对象
Gson gson = new Gson();
// 5.2gson.formJson()两个参数,一个是字符串,一个是要转换成的对象的类型
//AccessToken access_token是一个自己创建的javabean
WechatUserinfo accessToken = gson.fromJson(reslut, WechatUserinfo.class);
//如果值不为空,返回access_token
if (accessToken.getAccess_token() != null) {
return accessToken.getAccess_token();
} else {
System.out.println("获取access_token失败,请检查");
return null;
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//获得已经有的access_token
public String getOldaccesstoken(String APPID,String APPSECRET) {
final long MAX_TIME = 7200 * 1000;
Gson gson=new Gson();
String Accesstoken=null;
//1.创建一个路径对象,用来保存access_token
File file = new File("temp_access_token.temp");
//2.如果文件不存在
try {
if(!file.exists()) {
//2.1创建文件
file.createNewFile();
}
//2.2如果文件大小等于0,说明第一次使用,存入Access_token
if (file.length() == 0) {
//2.2.1得到access_token
Accesstoken = getAccessToken(APPID,APPSECRET);
//2.2.2实例化一个FileOutputStream对象, 不允许追加
FileOutputStream fos = new FileOutputStream(file, false);
//2.2.3实例化一个AccessToken,将access_token和当前时间存进去
WechatUserinfo accessToken=new WechatUserinfo();
accessToken.setAccess_token(Accesstoken);
accessToken.setExpires_in(System.currentTimeMillis() + "");
//2.2.4转换成json格式的字符串
String json = gson.toJson(accessToken);
//2.2.5将字符串写入到file文件中,getBytes()将字符串转换成字节数组byte[]
fos.write((json).getBytes());
fos.close();
//2.2.6 返回token值
return Accesstoken;
}else {
//2.3如果文件大小不等于0
//2.3.1实例化FileInputStream对象
FileInputStream fis = new FileInputStream(file);
//2.3.2定义一个数组
byte[] b = new byte[2048];
//2.3.3InputStreamReader的int read(char []cbuf);//将读取到的字符存到数组中。返回读取的字符数。
int len = fis.read(b);
//2.3.4读取到的文件内容
String mJsonAccess_token = new String(b, 0, len);
//2.3.5将json字符串转换成AccessToken类的对象
WechatUserinfo accessToken = gson.fromJson(mJsonAccess_token,WechatUserinfo.class);
//2.3.6如果expires_in不等于零,进行比较
if (accessToken.getExpires_in() != null) {
//获取存入时的时间毫秒数
long saveTime = Long.parseLong(accessToken.getExpires_in());
//获取现在时间的毫秒数
long nowTime = System.currentTimeMillis();
//做差值
long remianTime = nowTime - saveTime;
//如果差值小于MAX_TIME,token值
if (remianTime < MAX_TIME) {
/*AccessToken at = gson.fromJson(mJsonAccess_token,AccessToken.class);*/
Accesstoken = accessToken.getAccess_token();
fis.close();
//返回token
return Accesstoken;
} else {
//如果大于MAX_TIME,重新获取token
Accesstoken = getAccessToken(APPID,APPSECRET);
FileOutputStream fos = new FileOutputStream(file, false);// 不允许追加
WechatUserinfo accessToken=new WechatUserinfo();
accessToken.setAccess_token(Accesstoken);
accessToken.setExpires_in(System.currentTimeMillis() + "");
String json = gson.toJson(accessToken);
fos.write((json).getBytes());
fos.close();
return Accesstoken;
}
}
fis.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}