java后端-qq登录

项目代码复制出来的,请自行验证

 

复制代码
/**
     * qq获取unionid
     *
     * @param accessToken
     * @return
     */
    public String getUnionid(String accessToken) {
        try {
            RestTemplate restTemplate = new RestTemplate();
            //if (StringUtils.isBlank(accessToken)) return AjaxJson.error("accessToken不能为空");
            String url = "https://graph.qq.com/oauth2.0/me?access_token=" + accessToken + "&unionid=" + "1" + "&fmt=" + "json";
            // 返回结果转换为json对象
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
            HttpEntity<String> entity = new HttpEntity<String>(headers);
            ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
            String body = responseEntity.getBody();
            // 返回结果转换为json对象
            JSONObject jObject = JSONObject.parseObject(body);
            String unionid = jObject.getString("unionid");
            return unionid;
        } catch (RestClientException e) {
            e.printStackTrace();
        }
        return null;
    }
复制代码
复制代码
/**
     * QQ授权登录
     *
     * @param accessToken accessToken
     * @return
     */
    @RequestMapping("/qqLogin")
    public AjaxJson qqLogin(String accessToken) throws Exception {
        if (StringUtils.isBlank(accessToken)) return AjaxJson.error("accessToken不能为空");
        String unionid = getUnionid(accessToken);
        Member qquniqueId = memberService.findQquniqueId(unionid);
        if (qquniqueId == null) {
            AjaxJson json = new AjaxJson();
            json.setCode(101);
            json.setMsg("请前往绑定手机号");
            json.setSuccess(false);
            json.put("unionid", unionid);
            return json;
        }
        
        String token = JWTUtils.createAccessToken(qquniqueId.getId(), qquniqueId.getPhone(), qquniqueId.getId());
        return AjaxJson.success("登陆成功").put("token", token).put("user", qquniqueId);


    }
复制代码

无用代码自己删除即可

 

posted @   知行IT讲堂  阅读(191)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示