在微信端点开链接提示"获取openId失败",这是接口返回的结果,说明微信已经请求到接口了
加上日志打印
log.info("code:{}",requestVO.getCode());
log.info("openId:{}",openId);
发现日志输出了两遍
所以我猜测微信那边应该回调了接口两次,参考链接
百度了一下
处理方案
- 加&connect_redirect=1 (经过测试无效)
- 有的说提供一个中间Controller,然后重定向到业务Controller(参考链接,未测试)
- 通过缓存控制
最后解决的办法是加个缓存,key=code,value=openId
String redisOpenId = redisCache.getCacheObject(wxCode);
if (StringUtils.isEmpty(redisOpenId)){
Map<String, String> weiXinMap = WeiXinUtil.getOpenIdByCode(wxCode);
String openId = weiXinMap.get("openid");
redisCache.setCacheObjectSeconds(wxCode,openId,30);
}
来源:oschina
链接:https://my.oschina.net/u/3568600/blog/3165143