问题描述
希望用户使用微信扫码后,关注公众号后,微信发起回调请求。目前现象:没有关注公众号扫码后,没有弹窗是否关注公众号,且扫码后微信就调用了回调接口。
流程描述
1.微信回调接口在公众号项目里(服务器A),回调接口接收code和自定义的业务参数,接口逻辑将参数通过接口方式传给另外一个服务器(服务器B)。
2.服务器B接收到code后,通过code获取微信用户openid,然后通过openid获取微信用户信息。
3.生成token返回给前端
获取微信用户信息代码
Map<String, Object> wxUserInfoMap = null;
Map<String, Object> openidMap = WXService.getOpenidViaCode(code);
if (openidMap.containsKey("errcode")){
Integer errorcode = (Integer) openidMap.get("errcode");
String errmsg = (String) openidMap.get("errmsg");
logger.error("GET Wechat User openid Wrong: errorcode:{}, errmsg:{}", errorcode, errmsg);
Map<String, Object> socketMsgMap = new HashMap<>();
socketMsgMap.put("code", "-1");
socketMsgMap.put("action", "scanLogin");
socketMsgMap.put("msg", "登录失败,请重新扫码登录");
WebSocketUtil.sendMsg(key, JSON.toJSONString(socketMsgMap));
}else {
String access_token = (String) openidMap.get("access_token");
openid = (String) openidMap.get("openid");
wxUserInfoMap = WXService.getWXUserInfo(access_token, openid);
if (openidMap.containsKey("errcode")){
Integer errorcode = (Integer) openidMap.get("errcode");
String errmsg = (String) openidMap.get("errmsg");
logger.error("GET Wechat User Info Wrong: errorcode:{}, errmsg:{}", errorcode, errmsg);
Map<String, Object> socketMsgMap = new HashMap<>();
socketMsgMap.put("code", "-1");
socketMsgMap.put("action", "scanLogin");
socketMsgMap.put("msg", "登录失败,请重新扫码登录");
WebSocketUtil.sendMsg(key, JSON.toJSONString(socketMsgMap));
}else if (!"".equals(openid)){
}
}
已解决,两种授权方式搞错了。想要达到用户关注公众号后登录需要使用带场景码的二维码,使用oauth授权不能实现这个功能。