瀏覽代碼

feat : 新增session检测接口

bilingfeng 11 月之前
父節點
當前提交
12a584bd91

+ 1 - 1
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/SDKApplication.java

@@ -23,7 +23,7 @@ public class SDKApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(SDKApplication.class, args);
-        System.out.println("赞象SDK服务启动成功 <token校验的时候新增sessionKey过期判断> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象SDK服务启动成功 <新增session检测接口> ( ´・・)ノ(._.`) \n" +
                 " ___________ _   __\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "\\ `--.| | | | |/ / \n" +

+ 7 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/controller/PayController.java

@@ -6,6 +6,7 @@ import com.zanxiang.game.module.sdk.annotation.ValidLogin;
 import com.zanxiang.game.module.sdk.pojo.param.ProductPayParam;
 import com.zanxiang.game.module.sdk.pojo.param.UserData;
 import com.zanxiang.game.module.sdk.pojo.vo.PayParamVO;
+import com.zanxiang.game.module.sdk.pojo.vo.SessionCheckVO;
 import com.zanxiang.game.module.sdk.service.IOrderPayService;
 import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.module.util.pojo.ResultVO;
@@ -37,6 +38,12 @@ public class PayController {
     @Autowired
     private IOrderPayService orderPayService;
 
+    @ApiOperation(value = "米大师支付session检测")
+    @GetMapping(value = "/session/check")
+    public ResultVO<SessionCheckVO> sessionCheck(@ValidLogin UserData userData) {
+        return ResultVO.ok(orderPayService.sessionCheck(userData));
+    }
+
     @UnSignCheck
     @ApiOperation(value = "获取客服支付参数")
     @GetMapping(value = "/param/applet")

+ 28 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/pojo/vo/SessionCheckVO.java

@@ -0,0 +1,28 @@
+package com.zanxiang.game.module.sdk.pojo.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-05-30
+ * @description : 用户session状态检测
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class SessionCheckVO {
+
+    /**
+     * 重新登录, true : 重新登录, false : 不需要.
+     */
+    private Boolean reLogin;
+
+    /**
+     * 弹窗内容, reLogin为true会返回内容
+     */
+    private String msg;
+}

+ 9 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IOrderPayService.java

@@ -3,6 +3,7 @@ package com.zanxiang.game.module.sdk.service;
 import com.zanxiang.game.module.sdk.pojo.param.ProductPayParam;
 import com.zanxiang.game.module.sdk.pojo.param.UserData;
 import com.zanxiang.game.module.sdk.pojo.vo.PayParamVO;
+import com.zanxiang.game.module.sdk.pojo.vo.SessionCheckVO;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -62,4 +63,12 @@ public interface IOrderPayService {
      * @return {@link Boolean}
      */
     Boolean payResult(String orderId);
+
+    /**
+     * 米大师session过期检测
+     *
+     * @param userData : 用户数据
+     * @return : 返回检测结果
+     */
+    SessionCheckVO sessionCheck(UserData userData);
 }

+ 30 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/OrderPayServiceImpl.java

@@ -1,8 +1,10 @@
 package com.zanxiang.game.module.sdk.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zanxiang.game.module.base.pojo.enums.GameCategoryEnum;
 import com.zanxiang.game.module.base.pojo.enums.OsEnum;
 import com.zanxiang.game.module.base.pojo.enums.PayDeviceEnum;
+import com.zanxiang.game.module.mybatis.entity.Game;
 import com.zanxiang.game.module.mybatis.entity.Order;
 import com.zanxiang.game.module.mybatis.entity.OrderPayParam;
 import com.zanxiang.game.module.mybatis.entity.User;
@@ -16,7 +18,9 @@ import com.zanxiang.game.module.sdk.pojo.dto.ProductPayParamDTO;
 import com.zanxiang.game.module.sdk.pojo.param.ProductPayParam;
 import com.zanxiang.game.module.sdk.pojo.param.UserData;
 import com.zanxiang.game.module.sdk.pojo.vo.PayParamVO;
+import com.zanxiang.game.module.sdk.pojo.vo.SessionCheckVO;
 import com.zanxiang.game.module.sdk.service.*;
+import com.zanxiang.game.module.sdk.service.api.WxApiService;
 import com.zanxiang.game.module.sdk.service.pay.PayBaseService;
 import com.zanxiang.game.module.sdk.util.RedisUtil;
 import com.zanxiang.game.module.sdk.util.SpringUtils;
@@ -66,6 +70,12 @@ public class OrderPayServiceImpl implements IOrderPayService {
     @Autowired
     private RedisUtil<String> redisUtil;
 
+    @Autowired
+    private IGameService gameService;
+
+    @Autowired
+    private WxApiService wxApiService;
+
     @Autowired
     private IDistributedLockComponent distributedLockComponent;
 
@@ -246,4 +256,24 @@ public class OrderPayServiceImpl implements IOrderPayService {
         }
         return Boolean.FALSE;
     }
+
+    @Override
+    public SessionCheckVO sessionCheck(UserData userData) {
+        User user = userService.getById(userData.getUserId());
+        Game game = gameService.getById(userData.getGameId());
+        //默认结果
+        boolean result = Boolean.FALSE;
+        //限制微信小游戏
+        if (Objects.equals(game.getCategory(), GameCategoryEnum.CATEGORY_WX_APPLET.getId())) {
+            //限制安卓端或者PC端
+            if (Objects.equals(userData.getDeviceSystem(), OsEnum.SYSTEM_ANDROID.getOs())
+                    || Objects.equals(userData.getDeviceSystem(), OsEnum.SYSTEM_WINDOW.getOs())) {
+                result = wxApiService.checkSessionKey(userData.getGameId(), user.getOpenId(), user.getSessionKey());
+            }
+        }
+        return SessionCheckVO.builder()
+                .reLogin(result)
+                .msg(result ? "点击右上角\"·●·\"形状的三个点,在弹出的页面下拉找到“重新进入小程序”" : null)
+                .build();
+    }
 }