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