AccessToken.java
2.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/**
* Copyright (c) 2011-2014, James Zhan 詹波 (jfinal@126.com).
*
* Licensed under the Apache License, Version 2.0 (the "License");
*/
package com.jfinal.weixin.sdk.api;
import java.io.Serializable;
import java.util.Map;
import com.jfinal.weixin.sdk.utils.JsonUtils;
import com.jfinal.weixin.sdk.utils.RetryUtils.ResultCheck;
/**
* 封装 access_token
*/
@SuppressWarnings("unchecked")
public class AccessToken implements ResultCheck, Serializable {
private static final long serialVersionUID = -822464425433824314L;
private String access_token; // 正确获取到 access_token 时有值
private Integer expires_in; // 正确获取到 access_token 时有值
private Integer errcode; // 出错时有值
private String errmsg; // 出错时有值
private Long expiredTime; // 正确获取到 access_token 时有值,存放过期时间
private String json;
public AccessToken(String jsonStr) {
this.json = jsonStr;
try {
Map<String, Object> temp = JsonUtils.parse(jsonStr, Map.class);
access_token = (String) temp.get("access_token");
expires_in = (Integer) temp.get("expires_in");
errcode = (Integer) temp.get("errcode");
errmsg = (String) temp.get("errmsg");
if (expires_in != null)
expiredTime = System.currentTimeMillis() + ((expires_in -5) * 1000);
// 用户缓存时还原
if (temp.containsKey("expiredTime")) {
expiredTime = (Long) temp.get("expiredTime");
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public String getJson() {
return json;
}
public String getCacheJson() {
Map<String, Object> temp = JsonUtils.parse(json, Map.class);
temp.put("expiredTime", expiredTime);
temp.remove("expires_in");
return JsonUtils.toJson(temp);
}
public boolean isAvailable() {
if (expiredTime == null)
return false;
if (errcode != null)
return false;
if (expiredTime < System.currentTimeMillis())
return false;
return access_token != null;
}
public String getAccessToken() {
return access_token;
}
public Integer getExpiresIn() {
return expires_in;
}
public Long getExpiredTime() {
return expiredTime;
}
public Integer getErrorCode() {
return errcode;
}
public String getErrorMsg() {
if (errcode != null) {
String result = ReturnCode.get(errcode);
if (result != null)
return result;
}
return errmsg;
}
@Override
public boolean matching() {
return isAvailable();
}
}