From 25526c5fe2edd5a6133a239b490f9d03044e75cf Mon Sep 17 00:00:00 2001 From: 彭雪彬 <1724387007@qq.com> Date: Tue, 15 Jul 2025 16:38:23 +0800 Subject: [PATCH] 骑手微信登录 --- oying-system/src/main/java/com/oying/modules/system/service/impl/UserServiceImpl.java | 8 ++++ oying-system/src/main/java/com/oying/modules/system/service/UserService.java | 1 oying-system/src/main/java/com/oying/modules/security/rest/AuthController.java | 13 +++--- oying-system/src/main/java/com/oying/modules/security/service/WeiXinService.java | 40 ++++++++++++++++++++ 4 files changed, 56 insertions(+), 6 deletions(-) diff --git a/oying-system/src/main/java/com/oying/modules/security/rest/AuthController.java b/oying-system/src/main/java/com/oying/modules/security/rest/AuthController.java index 67ef05d..c35e3d6 100644 --- a/oying-system/src/main/java/com/oying/modules/security/rest/AuthController.java +++ b/oying-system/src/main/java/com/oying/modules/security/rest/AuthController.java @@ -240,7 +240,7 @@ authUser.setUsername(userDto.getUsername()); break; case NEW: - jsonObject = weiXinService.getPhoneNumber(authUser.getCode()); + jsonObject = weiXinService.getRiderPhoneNumber(authUser.getCode()); String phone = jsonObject.getJSONObject("phone_info").getString("purePhoneNumber"); User user1 = userService.findByName(phone); if (user1 == null) { @@ -248,22 +248,23 @@ User user = new User(); user.setUsername(phone); user.setNickName("OYING-" + phone); - user.setUserType(ConstantsKey.RIDER); + user.setUserType(ConstantsKey.BUYER); user.setPhone(phone); user.setGender("男"); user.setEnabled(true); getRole(user); user.setPassword(passwordEncoder.encode(phone.substring(phone.length() - 6))); - user.setOpenid(authUser.getUsername()); + user.setRiderOpenId(authUser.getUsername()); userService.create(user); } else { - if (user1.getUserType().equals(ConstantsKey.RIDER)) { + if (user1.getUserType().equals(ConstantsKey.BUYER)) { if (user1.getRoles() == null) { getRole(user1); } } - user1.setOpenid(authUser.getUsername()); - userService.update(user1); + user1.setRiderOpenId(authUser.getUsername()); + // userService.update(user1); + userService.updateRiderOpenId(user1); } authUser.setUsername(phone); break; diff --git a/oying-system/src/main/java/com/oying/modules/security/service/WeiXinService.java b/oying-system/src/main/java/com/oying/modules/security/service/WeiXinService.java index 4281552..5b2cc7c 100644 --- a/oying-system/src/main/java/com/oying/modules/security/service/WeiXinService.java +++ b/oying-system/src/main/java/com/oying/modules/security/service/WeiXinService.java @@ -59,6 +59,32 @@ } /** + * POST 获取稳定版接口调用凭据 获取小程序全局唯一后台接口调用凭据,token有效期为7200s,开发者需要进行妥善保存。 + * + * @return accessToken + */ + public String getStableAccessTokenRider() { + String TokenKey = weiXinProperties.getTokenKey() + "_rider"; + String accessToken; + if (redisUtils.isExpire(TokenKey)) { + // 获取接口调用凭据 + String url = weiXinProperties.getGetStableAccessToken(); + Map<String, Object> map = new LinkedHashMap<>(); + map.put("grant_type", "client_credential"); + map.put("appid", weiXinProperties.getRiderAppId()); + map.put("secret", weiXinProperties.getRiderAppSecret()); + map.put("force_refresh", false); + JSONObject jsonObject = HttpRequest.exchangeJsonObject(HttpMethod.POST, url, map); + accessToken = jsonObject.getString("access_token"); + redisUtils.set(TokenKey, accessToken, weiXinProperties.getTokenTime()); + } else { + // 查询接口调用凭据 + accessToken = (String) redisUtils.get(TokenKey); + } + return accessToken; + } + + /** * GET 小程序登录 登录凭证校验。通过 wx.login 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程 * * @param js_code 登录时获取的 code,可通过wx.login获取 @@ -95,6 +121,20 @@ } /** + * POST 获取手机号 该接口用于将code换取用户手机号。 说明,每个code只能使用一次,code的有效期为5min。 + * + * @param code 手机号获取凭证 + * @return JSONObject + */ + public JSONObject getRiderPhoneNumber(String code) { + String url = weiXinProperties.getGetPhoneNumber(); + url = url.replace("{accessToken}", getStableAccessTokenRider()); + Map<String, Object> map = new LinkedHashMap<>(); + map.put("code", code); + return HttpRequest.exchangeJsonObject(HttpMethod.POST, url, map); + } + + /** * POST 该接口用于发送订阅消息。 * * @param data 请求参数 diff --git a/oying-system/src/main/java/com/oying/modules/system/service/UserService.java b/oying-system/src/main/java/com/oying/modules/system/service/UserService.java index 6ef8470..fab1789 100644 --- a/oying-system/src/main/java/com/oying/modules/system/service/UserService.java +++ b/oying-system/src/main/java/com/oying/modules/system/service/UserService.java @@ -123,4 +123,5 @@ */ void resetPwd(Set<Long> ids, String pwd); + void updateRiderOpenId(User user1); } diff --git a/oying-system/src/main/java/com/oying/modules/system/service/impl/UserServiceImpl.java b/oying-system/src/main/java/com/oying/modules/system/service/impl/UserServiceImpl.java index 615e03e..119ba1e 100644 --- a/oying-system/src/main/java/com/oying/modules/system/service/impl/UserServiceImpl.java +++ b/oying-system/src/main/java/com/oying/modules/system/service/impl/UserServiceImpl.java @@ -206,6 +206,14 @@ } @Override + public void updateRiderOpenId(User user1) { + User user = new User(); + user.setId(user1.getId()); + user.setRiderOpenId(user1.getRiderOpenId()); + userMapper.updateById(user); + } + + @Override @Transactional(rollbackFor = Exception.class) public Map<String, String> updateAvatar(MultipartFile multipartFile) { // 文件大小验证 -- Gitblit v1.9.3