java后端集成微信扫码登录
本代码从项目复制出来的,未验证,请自行验证吧
工具类
package com.jeeplus.modules.utils; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.http.*; import org.springframework.web.client.RestTemplate; @Slf4j public class WXLoginUtil { private static final String APPID = "xxxxxxxxxxxx"; private static final String APPSECRET = "xxxxxxxxxxxxxxxxxxxx"; /** * @Title: getAccessToken * @Description: 获取接口调用凭证 * @param: @return * @return: String */ public static JSONObject getAccessToken(String code) { RestTemplate restTemplate = new RestTemplate(); String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + APPID + "&secret=" + APPSECRET + "&code=" + code + "&grant_type=authorization_code"; 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); return jObject; } public static JSONObject getUserInfo(String accessToken, String openid) { RestTemplate restTemplate = new RestTemplate(); String url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openid + "&lang=zh_CN"; HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); HttpEntity<String> entity = new HttpEntity<String>(headers); String body = restTemplate.exchange(url, HttpMethod.GET, entity, String.class).getBody(); // 返回结果转换为json对象 JSONObject jObject = JSONObject.parseObject(body); System.out.println("jObject----------------"+jObject); return jObject; } }
调用的时候案例
@RequestMapping("weixinLogin") public AjaxJson wxLogin(String accessToken, String openid) { AjaxJson json = new AjaxJson(); // if (StringUtils.isBlank(accessToken)) return AjaxJson.error("accessToken不能为空"); if (StringUtils.isBlank(openid)) return AjaxJson.error("openid不能为空"); JSONObject userInfo = WXLoginUtil.getUserInfo(accessToken, openid); String unionid = userInfo.getString("unionid"); System.out.println("unionid------------------------" + unionid); Member member = memberService.findOpenid(unionid); if (member == null) { json.setMsg("请绑定手机号"); json.setCode(101); json.setSuccess(true); json.put("unionid", unionid); return json; } if (StringUtils.isNotBlank(member.getCompanyId())) { int sum = certificateService.findenterpriseId(member.getCompanyId()).size(); member.setContents(sum); } else { member.setContents(0); } String token = JWTUtils.createAccessToken(member.getId(), member.getPhone(), member.getId()); return AjaxJson.success("登录成功").put("token", token).put("user", member); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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 接口并集成到在线客服系统