GitBucket
4.23.0
Toggle navigation
Sign in
Files
Branches
1
Releases
Issues
Pull requests
Labels
Priorities
Milestones
Wiki
Forks
fujun
/
dxCard-service
Browse code
修改appid
master
1 parent
12a205d
commit
0993a19ec3135249801587f577880f07b0061707
jiangqihao
authored
27 days ago
Patch
Showing
1 changed file
jeecg-boot-module/jeecg-module-service/src/main/java/org/jeecg/modules/service/controller/WxController.java
Ignore Space
Show notes
View
jeecg-boot-module/jeecg-module-service/src/main/java/org/jeecg/modules/service/controller/WxController.java
package org.jeecg.modules.service.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.vo.SysUserCacheInfo; import org.jeecg.common.util.RedisUtil; import org.jeecg.common.util.RestUtil; import org.jeecg.modules.service.dto.UserLoginDTO; import org.jeecg.modules.service.entity.AuthUser; import org.jeecg.modules.service.mapper.AuthUserMapper; import org.jeecg.modules.service.vo.UserLoginVO; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.mapper.SysUserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; /** * @program: jeecg-boot * @description: * @author: Mr.Yang * @create: 2025-09-25 15:32 **/ @RestController @RequestMapping("/wx/thirdLogin") @Slf4j public class WxController{ @Resource private AuthUserMapper authUserMapper; @Resource private SysUserMapper sysUserMapper; @Resource private RedisUtil redisUtil; private final String WX_APP_ID = "wx7f0c544b5fa55113"; private final String WX_APP_SECRET = "f5edf152445004bb7d28455f4aedd663"; /** * 请求示例:wxCode:ynce, * mCode:076bc6152ffaedb4e03a318b6ca6d9851136487b907f0266154d40b7a1adcf18, * jsCode:0e1nhLFa1vC8WH0OqvHa1Ze0dW3nhLFQ * @param dto * @return */ @PostMapping("/loginWxApplet") public Result<UserLoginVO> login(@RequestBody UserLoginDTO dto) { log.info("微信用户登录"); if (StringUtils.isEmpty(dto.getmCode())){ return Result.error("mCode不能为空"); } if (StringUtils.isEmpty(dto.getJsCode())){ return Result.error("jsCode不能为空"); } //微信登录 AuthUser authUser = wxLogin(dto); if (authUser == null){ return Result.error("登录失败"); } UserLoginVO userLoginVO = new UserLoginVO(); userLoginVO.setOpenid(authUser.getOpenId()); SysUser sysUser = sysUserMapper.getUserByPhone(authUser.getWxPhone()); if (sysUser == null){ userLoginVO.setIsCardMan(false); authUser.setIsCardMan(false); }else { userLoginVO.setIsCardMan(true); authUser.setIsCardMan(true); } userLoginVO.setAuthUser(JSONObject.parseObject(JSON.toJSONString(authUser))); return Result.OK(userLoginVO); } public AuthUser wxLogin(UserLoginDTO dto) { //调用微信接口服务,获取openId String openId = getOpenId(dto.getJsCode()); AuthUser authUser = authUserMapper.getUserByOpenId(openId); if (authUser == null){ String phone = getWxPhone(dto.getmCode()); if (StringUtils.isBlank(phone)) { throw new JeecgBootException("没有获取到电话"); } //处理新用户 authUser = new AuthUser(); authUser.setOpenId(openId); authUser.setWxPhone(phone); authUserMapper.insert(authUser); authUser = authUserMapper.getUserByOpenId(openId); } return authUser; } private String getOpenId(String code) { // 请求地址 String url = "https://api.weixin.qq.com/sns/jscode2session"; // 请求 Header (用于传递Token) HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.TEXT_PLAIN); System.out.println("请求地址:" + url); JSONObject params = new JSONObject(); params.put("grant_type", "authorization_code"); params.put("appid", WX_APP_ID); params.put("secret", WX_APP_SECRET); params.put("js_code", code); // 利用 RestUtil 请求该url ResponseEntity<String> result = RestUtil.request(url, HttpMethod.GET, headers, params, null, String.class); if (result != null && result.getBody() != null) { System.out.println("返回结果:" + result.getBody()); } else { System.out.println("查询失败"); } return (String) JSON.parseObject(result.getBody()).get("openid"); } private String getWxPhone(String mCode) { // 请求地址 String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber"; // 请求 Header (用于传递Token) HttpHeaders headers = new HttpHeaders(); System.out.println("请求地址:" + url); JSONObject postParams = new JSONObject(); postParams.put("code", mCode); JSONObject getParams = new JSONObject(); getParams.put("access_token", getWxAccessToken()); // 利用 RestUtil 请求该url ResponseEntity<String> result = RestUtil.request(url, HttpMethod.POST, headers, getParams, postParams, String.class); if (result != null && result.getBody() != null && JSON.parseObject(result.getBody()).get("phone_info") != null && JSON.parseObject(result.getBody()).getJSONObject("phone_info").get("phoneNumber") != null) { System.out.println("返回结果:" + JSON.parseObject(result.getBody()).toJSONString()); } else { //accessToken失效,删除token,重新请求 redisUtil.del("sys:wx:access_token"); getParams.put("access_token", getWxAccessToken()); result = RestUtil.request(url, HttpMethod.POST, headers, getParams, postParams, String.class); if (result != null && result.getBody() != null && JSON.parseObject(result.getBody()).get("phone_info") != null && JSON.parseObject(result.getBody()).getJSONObject("phone_info").get("phoneNumber") != null) { System.out.println("返回结果:" + JSON.parseObject(result.getBody()).toJSONString()); } else { throw new JeecgBootException("请求失败:" + JSON.toJSONString(result)); } } return JSON.parseObject(result.getBody()).getJSONObject("phone_info").get("phoneNumber").toString(); } private String getWxAccessToken() { // 请求地址 String url = "https://api.weixin.qq.com/cgi-bin/token"; // 请求 Header (用于传递Token) HttpHeaders headers = new HttpHeaders(); // 请求方式是 POST 代表提交新增数据 HttpMethod method = HttpMethod.GET; System.out.println("请求地址:" + url); System.out.println("请求方式:" + method); JSONObject params = new JSONObject(); params.put("grant_type", "client_credential"); params.put("appid", WX_APP_ID); params.put("secret", WX_APP_SECRET); // 利用 RestUtil 请求该url ResponseEntity<JSONObject> result = RestUtil.request(url, method, headers, params, null, JSONObject.class); if (result != null && result.getBody() != null) { System.out.println("返回结果:" + result.getBody().toJSONString()); } else { System.out.println("查询失败"); } String accessToken = result.getBody().get("access_token").toString(); if (StringUtils.isNotBlank(accessToken)) { redisUtil.set("sys:wx:access_token", accessToken, 3600L); return accessToken; } else { throw new JeecgBootException("查询失败"); } } }
package org.jeecg.modules.service.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.vo.SysUserCacheInfo; import org.jeecg.common.util.RedisUtil; import org.jeecg.common.util.RestUtil; import org.jeecg.modules.service.dto.UserLoginDTO; import org.jeecg.modules.service.entity.AuthUser; import org.jeecg.modules.service.mapper.AuthUserMapper; import org.jeecg.modules.service.vo.UserLoginVO; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.mapper.SysUserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; /** * @program: jeecg-boot * @description: * @author: Mr.Yang * @create: 2025-09-25 15:32 **/ @RestController @RequestMapping("/wx/thirdLogin") @Slf4j public class WxController{ @Resource private AuthUserMapper authUserMapper; @Resource private SysUserMapper sysUserMapper; @Resource private RedisUtil redisUtil; private final String WX_APP_ID = "wx5b41ae4f83eaa771"; private final String WX_APP_SECRET = "9bb04d4e054dc9cd2aec829f0a567800"; /** * 请求示例:wxCode:ynce, * mCode:076bc6152ffaedb4e03a318b6ca6d9851136487b907f0266154d40b7a1adcf18, * jsCode:0e1nhLFa1vC8WH0OqvHa1Ze0dW3nhLFQ * @param dto * @return */ @PostMapping("/loginWxApplet") public Result<UserLoginVO> login(@RequestBody UserLoginDTO dto) { log.info("微信用户登录"); if (StringUtils.isEmpty(dto.getmCode())){ return Result.error("mCode不能为空"); } if (StringUtils.isEmpty(dto.getJsCode())){ return Result.error("jsCode不能为空"); } //微信登录 AuthUser authUser = wxLogin(dto); if (authUser == null){ return Result.error("登录失败"); } UserLoginVO userLoginVO = new UserLoginVO(); userLoginVO.setOpenid(authUser.getOpenId()); SysUser sysUser = sysUserMapper.getUserByPhone(authUser.getWxPhone()); if (sysUser == null){ userLoginVO.setIsCardMan(false); authUser.setIsCardMan(false); }else { userLoginVO.setIsCardMan(true); authUser.setIsCardMan(true); } userLoginVO.setAuthUser(JSONObject.parseObject(JSON.toJSONString(authUser))); return Result.OK(userLoginVO); } public AuthUser wxLogin(UserLoginDTO dto) { //调用微信接口服务,获取openId String openId = getOpenId(dto.getJsCode()); AuthUser authUser = authUserMapper.getUserByOpenId(openId); if (authUser == null){ String phone = getWxPhone(dto.getmCode()); if (StringUtils.isBlank(phone)) { throw new JeecgBootException("没有获取到电话"); } //处理新用户 authUser = new AuthUser(); authUser.setOpenId(openId); authUser.setWxPhone(phone); authUserMapper.insert(authUser); authUser = authUserMapper.getUserByOpenId(openId); } return authUser; } private String getOpenId(String code) { // 请求地址 String url = "https://api.weixin.qq.com/sns/jscode2session"; // 请求 Header (用于传递Token) HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.TEXT_PLAIN); System.out.println("请求地址:" + url); JSONObject params = new JSONObject(); params.put("grant_type", "authorization_code"); params.put("appid", WX_APP_ID); params.put("secret", WX_APP_SECRET); params.put("js_code", code); // 利用 RestUtil 请求该url ResponseEntity<String> result = RestUtil.request(url, HttpMethod.GET, headers, params, null, String.class); if (result != null && result.getBody() != null) { System.out.println("返回结果:" + result.getBody()); } else { System.out.println("查询失败"); } return (String) JSON.parseObject(result.getBody()).get("openid"); } private String getWxPhone(String mCode) { // 请求地址 String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber"; // 请求 Header (用于传递Token) HttpHeaders headers = new HttpHeaders(); System.out.println("请求地址:" + url); JSONObject postParams = new JSONObject(); postParams.put("code", mCode); JSONObject getParams = new JSONObject(); getParams.put("access_token", getWxAccessToken()); // 利用 RestUtil 请求该url ResponseEntity<String> result = RestUtil.request(url, HttpMethod.POST, headers, getParams, postParams, String.class); if (result != null && result.getBody() != null && JSON.parseObject(result.getBody()).get("phone_info") != null && JSON.parseObject(result.getBody()).getJSONObject("phone_info").get("phoneNumber") != null) { System.out.println("返回结果:" + JSON.parseObject(result.getBody()).toJSONString()); } else { //accessToken失效,删除token,重新请求 redisUtil.del("sys:wx:access_token"); getParams.put("access_token", getWxAccessToken()); result = RestUtil.request(url, HttpMethod.POST, headers, getParams, postParams, String.class); if (result != null && result.getBody() != null && JSON.parseObject(result.getBody()).get("phone_info") != null && JSON.parseObject(result.getBody()).getJSONObject("phone_info").get("phoneNumber") != null) { System.out.println("返回结果:" + JSON.parseObject(result.getBody()).toJSONString()); } else { throw new JeecgBootException("请求失败:" + JSON.toJSONString(result)); } } return JSON.parseObject(result.getBody()).getJSONObject("phone_info").get("phoneNumber").toString(); } private String getWxAccessToken() { // 请求地址 String url = "https://api.weixin.qq.com/cgi-bin/token"; // 请求 Header (用于传递Token) HttpHeaders headers = new HttpHeaders(); // 请求方式是 POST 代表提交新增数据 HttpMethod method = HttpMethod.GET; System.out.println("请求地址:" + url); System.out.println("请求方式:" + method); JSONObject params = new JSONObject(); params.put("grant_type", "client_credential"); params.put("appid", WX_APP_ID); params.put("secret", WX_APP_SECRET); // 利用 RestUtil 请求该url ResponseEntity<JSONObject> result = RestUtil.request(url, method, headers, params, null, JSONObject.class); if (result != null && result.getBody() != null) { System.out.println("返回结果:" + result.getBody().toJSONString()); } else { System.out.println("查询失败"); } String accessToken = result.getBody().get("access_token").toString(); if (StringUtils.isNotBlank(accessToken)) { redisUtil.set("sys:wx:access_token", accessToken, 3600L); return accessToken; } else { throw new JeecgBootException("查询失败"); } } }
Show line notes below