网站增加微信扫码登录,如何在用户关注公众号后微信发起回调请求,现在是用户扫码后就会调用回调接口?
问题描述
希望用户使用微信扫码后,关注公众号后,微信发起回调请求。目前现象:没有关注公众号扫码后,没有弹窗是否关注公众号,且扫码后微信就调用了回调接口。
流程描述
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 {
// 正确返回结果
/**
* {
* "access_token":"ACCESS_TOKEN",
* "expires_in":7200,
* "refresh_token":"REFRESH_TOKEN",
* "openid":"OPENID",
* "scope":"SCOPE"
* }
*/
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)){
// 业务逻辑处理,成功后将登录token通过websocket发送给前端
}
}