已解决,两种授权方式搞错了。想要达到用户关注公众号后登录需要使用带场景码的二维码,使用oauth授权不能实现这个功能。
网站增加微信扫码登录,如何在用户关注公众号后微信发起回调请求,现在是用户扫码后就会调用回调接口?问题描述 希望用户使用微信扫码后,关注公众号后,微信发起回调请求。目前现象:没有关注公众号扫码后,没有弹窗是否关注公众号,且扫码后微信就调用了回调接口。 流程描述 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发送给前端 } }
2024-09-05