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