微信小程序授权登陆

    @ApiOperation(value = "微信授权登陆")
    @RequestMapping(method = RequestMethod.GET, value = "/login")
    public ApiResult<LoginVo> login(String code) {
        log.info("/login start ...");

        if (StringUtils.isBlank(code)) {
            return fail(CodeEnum.JS_CODE_NULL.getCode(), CodeEnum.JS_CODE_NULL.getText());
        }

        //TODO 临时代码,方便获取token
        if (code.startsWith("test_")) {
            String s = code.split("_")[1];
            Member member = memberService.findById(Long.parseLong(s));
            LoginVo vo = new LoginVo();
            vo.setToken(JwtUtil.create(member));
            return success(vo);
        }

        Map<String, String> map = new HashMap<>(new HashMap<>(16));
        map.put("appid", appId);
        map.put("secret", secret);
        map.put("js_code", code);
        map.put("grant_type", "authorization_code");

        JSONObject jsonObject = JSON.parseObject(HttpUtils.doGet(js_code_2_session, map));
        if (jsonObject == null) {
            return fail(CodeEnum.WX_ERROR.getCode(), CodeEnum.WX_ERROR.getText());
        }
        if (jsonObject.containsKey("errcode")) {
            if (!"0".equals(jsonObject.getString("errcode"))) {
                return fail(Integer.parseInt(jsonObject.getString("errcode")), jsonObject.getString("errmsg"));
            }
        }
        if (!jsonObject.containsKey("openid")) {
            return fail(CodeEnum.OPENID_ERROR.getCode(), CodeEnum.OPENID_ERROR.getText());
        }
        String openid = jsonObject.getString("openid");
        //String session_key = jsonObject.getString("session_key");
        //String unionid = jsonObject.getString("unionid");

        LoginVo vo = new LoginVo();
        vo.setAuthorized(false);

        //通过openid查询数据库是否有此用户
        Member q = new Member();
        q.setOpenId(openid);
        List<Member> list = memberService.findListByWhere(q);
        if (list != null && list.size() > 0) {
            if (list.get(0).getNickname() != null) {
                vo.setAuthorized(true);
            }
        } else {
            Member m = new Member();
            m.setOpenId(openid);
            memberService.saveSelective(m);
        }

        //已登陆用户
        Member queryObj = new Member();
        queryObj.setOpenId(openid);
        Member current = memberService.findOne(queryObj);

        vo.setOpenid(openid);
        vo.setToken(JwtUtil.create(current));

        log.info("/login end ...");
        return success(vo);
    }
原文地址:https://www.cnblogs.com/xiaomaoyvtou/p/13671820.html