package com.ruoyi.weixin;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.utils.WeiXinToken;
import com.ruoyi.system.domain.SysConfig;
import com.ruoyi.system.mapper.SysConfigMapper;
import com.ruoyi.system.service.ISysConfigService;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@Service
public class WeiXinPublicService {
@Autowired
private SysConfigMapper sysConfigMapper;
@Autowired
private ISysConfigService sysConfigService;
public Integer saveWeiXinTokenConfig(String json) {
JSONObject jsonObject = JSON.parseObject(json);
String accessToken = jsonObject.getString("access_token");
int expiresIn = jsonObject.getIntValue("expires_in");
Date now = new Date();
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String validTime = sd.format(DateUtils.addSeconds(now, expiresIn));
String accessTokenAndTime = accessToken + "," + validTime;
SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique("accessTokenAndTime");
sysConfig.setConfigValue(accessTokenAndTime);
int result = sysConfigMapper.updateConfig(sysConfig);
return result;
}
public boolean getAccessToken() {
String appId = sysConfigService.selectConfigByKey("APPID");
String appSecret = sysConfigService.selectConfigByKey("APPSECRET");
String json = WeiXinToken.getAccessToken("client_credential", appId, appSecret);
Integer result = this.saveWeiXinTokenConfig(json);
return result > 0 ? true : false;
}
public String accessTokenIsValid() {
String accessTokenAndTime = sysConfigService.selectConfigByKey("accessTokenAndTime");
String[] tokenTimeArray = accessTokenAndTime.split(",");
String accessToken = tokenTimeArray[0];
String validTime = tokenTimeArray[1];
Date nowTime = new Date();
Date validDateTime = null;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
validDateTime = sdf.parse(validTime);
} catch (ParseException e) {
e.printStackTrace();
}
if (nowTime.getTime() > validDateTime.getTime()) {
String newAccessToken = null;
boolean bln = this.getAccessToken();
if(bln){
String newAccessTokenAndTime = sysConfigService.selectConfigByKey("accessTokenAndTime");
String[] newTokenTimeArray = newAccessTokenAndTime.split(",");
newAccessToken=newTokenTimeArray[0];
}
return newAccessToken;
} else {
return accessToken;
}
}
}