最近在做小程序,有个需求是生成小程序的二维码,扫二维码,进入到小程序指定页面。
1、获取token
获取小程序二维码之前,首先需要获取access_token。access_token是有时效性的2小时,每获取一次上次的的access_token就会失效。我们把请求到的access_token放到redis,失效时间设置为2小时,每次请求token,先从redis取,取不到则请求微信获取access_token。
@Autowired
private StringRedisTemplate stringRedisTemplate;
public String getToken(String appId,String secret) {
Token instanceToken = getAccessToken(appId);
return instanceToken == null ? "" : instanceToken.getAccess_token();
}
public Token getAccessToken(String appid) {
Token instanceToken = null;
try {
String tokenJson = stringRedisTemplate.get(ConstantRedis.REDIS_KEY.WECHAT_ACCESS_TOKEN.generateFullKey(appid));
if (!StringUtils.isEmpty(tokenJson)) {
instanceToken = JSON.parseObject(tokenJson, Token.class);
}
if (instanceToken == null || StringUtils.isEmpty(instanceToken.getAccess_token()) || instanceToken.isExpire()) {
instanceToken = WechatAPI.getToken(appid,secret);
if (instanceToken == null || StringUtils.isEmpty(instanceToken.getAccess_token())) {
return null;
}
stringRedisTemplate.set(ConstantRedis.REDIS_KEY.WECHAT_ACCESS_TOKEN.generateFullKey(appid), instanceToken, 7200L);
}
} catch (IOException ex) {
logger.error("getAccessToken exception...{}", ex);
}
return instanceToken;
}
public class WechatAPI {
privite static final String WECHAT_URI = "https://api.weixin.qq.com";
/**
* 调用微信SDK请求获取access_token
* @param appid
* @param secret
* @return
*/
pub