收藏
回答

网站增加微信扫码登录,如何在用户关注公众号后微信发起回调请求,现在是用户扫码后就会调用回调接口?

问题描述
希望用户使用微信扫码后,关注公众号后,微信发起回调请求。目前现象:没有关注公众号扫码后,没有弹窗是否关注公众号,且扫码后微信就调用了回调接口。

流程描述
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发送给前端
				}
			}


回答关注问题邀请回答
收藏

1 个回答

  • 期待
    期待
    2024-09-05

    已解决,两种授权方式搞错了。想要达到用户关注公众号后登录需要使用带场景码的二维码,使用oauth授权不能实现这个功能。

    2024-09-05
    有用
    回复
登录 后发表内容