com.jfinal.wxaapp.api.WxaAccessToken Maven / Gradle / Ivy
/**
* Copyright (c) 2011-2014, L.cm 卢春梦 ([email protected]).
*
* Licensed under the Apache License, Version 2.0 (the "License");
*/
package com.jfinal.wxaapp.api;
import java.io.Serializable;
import java.util.Map;
import com.jfinal.weixin.sdk.api.ReturnCode;
import com.jfinal.weixin.sdk.utils.JsonUtils;
import com.jfinal.weixin.sdk.utils.RetryUtils.ResultCheck;
@SuppressWarnings("unchecked")
public class WxaAccessToken implements ResultCheck, Serializable {
private static final long serialVersionUID = 4628857059125205404L;
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 WxaAccessToken(String jsonStr) {
this.json = jsonStr;
try {
Map 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")) {
Object tempExpiredTime = temp.get("expiredTime");
if(tempExpiredTime != null) {
expiredTime = Long.valueOf(tempExpiredTime.toString());
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public String getJson() {
return json;
}
public String getCacheJson() {
Map 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();
}
}