From 3a01a490ab4b44cd0cba31f134c065caae46699c Mon Sep 17 00:00:00 2001 From: hy001 Date: Mon, 11 May 2026 22:50:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=81=B5=E4=BB=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../game/party3rd/GameHkysRestController.java | 34 ++++++++++++++++--- .../service/sys/GameListConfigService.java | 13 ++++--- .../sys/impl/GameListConfigServiceImpl.java | 21 ++++++++++++ 3 files changed, 59 insertions(+), 9 deletions(-) diff --git a/rc-service/rc-service-other/other-adapter/src/main/java/com/red/circle/other/adapter/app/game/party3rd/GameHkysRestController.java b/rc-service/rc-service-other/other-adapter/src/main/java/com/red/circle/other/adapter/app/game/party3rd/GameHkysRestController.java index d8e65be3..e703c7cb 100644 --- a/rc-service/rc-service-other/other-adapter/src/main/java/com/red/circle/other/adapter/app/game/party3rd/GameHkysRestController.java +++ b/rc-service/rc-service-other/other-adapter/src/main/java/com/red/circle/other/adapter/app/game/party3rd/GameHkysRestController.java @@ -102,7 +102,9 @@ public class GameHkysRestController { return new HkysResponse() .setErrorCode(HyksErrorEnum.PARAM_ERROR.getErrorCode()); } - String sign = SecurityUtils.md5(Stream.of(cmd.getGameId(), cmd.getUid(), cmd.getToken(), cmd.getRoomId(), gameHkysProperties.getSignKey()).filter(Objects::nonNull).map(String::valueOf).collect(Collectors.joining(""))); + String sign = SecurityUtils.md5(Stream.of(cmd.getGameId(), cmd.getUid(), cmd.getToken(), cmd.getRoomId(), + resolveLingxianSignKey(cmd.getToken())).filter(Objects::nonNull).map(String::valueOf) + .collect(Collectors.joining(""))); if (!sign.equals(cmd.getSign())) { return new HkysResponse().setErrorCode(HyksErrorEnum.SIGN_VERIFY_FAIL.getErrorCode()); } @@ -123,9 +125,9 @@ public class GameHkysRestController { || Objects.isNull(cmd.getType()) || Objects.isNull(cmd.getCoin())) { return new HkysResponse().setErrorCode(HyksErrorEnum.PARAM_ERROR.getErrorCode()); } - String sign = SecurityUtils.md5(Stream.of(cmd.getOrderId(), cmd.getGameId(), cmd.getRoundId(), cmd.getUid(), - cmd.getCoin(), cmd.getType(), cmd.getToken(), cmd.getWinId(), cmd.getRoomId(), gameHkysProperties.getSignKey()) - .filter(Objects::nonNull).map(String::valueOf).collect(Collectors.joining(""))); + String sign = SecurityUtils.md5(Stream.of(cmd.getOrderId(), cmd.getGameId(), cmd.getRoundId(), cmd.getUid(), + cmd.getCoin(), cmd.getType(), cmd.getToken(), cmd.getWinId(), cmd.getRoomId(), resolveLingxianSignKey(cmd.getToken())) + .filter(Objects::nonNull).map(String::valueOf).collect(Collectors.joining(""))); if (!sign.equals(cmd.getSign())) { return new HkysResponse().setErrorCode(HyksErrorEnum.SIGN_VERIFY_FAIL.getErrorCode()); } @@ -150,7 +152,7 @@ public class GameHkysRestController { //游玩一句游戏结束 每日任务 灵仙 Long userId = DataTypeUtils.toLong(cmd.getUid()); - String sysOrigin = UserCredential.parseToken(cmd.getToken()).getSysOrigin(); + String sysOrigin = parseSysOrigin(cmd.getToken()); BigDecimal cost = enumConfigCacheService .getValueBigDecimal(EnumConfigKey.GAME_BROADCAST_AMOUNT, sysOrigin) ; @@ -223,6 +225,28 @@ public class GameHkysRestController { ); } + private String resolveLingxianSignKey(String token) { + String sysOrigin = resolveSysOriginQuietly(token); + String appKey = gameListConfigService.getActiveLingxianAppKey(sysOrigin); + if (StringUtils.isNotBlank(appKey)) { + return appKey; + } + return gameHkysProperties.getSignKey(); + } + + private String resolveSysOriginQuietly(String token) { + try { + return parseSysOrigin(token); + } catch (Exception e) { + log.warn("resolve lingxian sysOrigin failed"); + return ""; + } + } + + private String parseSysOrigin(String token) { + return UserCredential.parseToken(SecurityUtils.urlDecode(token)).getSysOrigin(); + } + private void reportTaskCenterGameEvents(String sysOrigin, Long userId, String provider, diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/sys/GameListConfigService.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/sys/GameListConfigService.java index e20810b3..266e6f74 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/sys/GameListConfigService.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/sys/GameListConfigService.java @@ -46,10 +46,15 @@ public interface GameListConfigService extends BaseService { * 获取灵仙当前启用的配置档案. */ String getActiveLingxianProfile(String sysOrigin); - - /** - * 查询游戏信息 - */ + + /** + * 获取灵仙当前启用配置的 appKey. + */ + String getActiveLingxianAppKey(String sysOrigin); + + /** + * 查询游戏信息 + */ GameListConfig getByGameCode(String gameCode, String sysOrigin); /** diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/sys/impl/GameListConfigServiceImpl.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/sys/impl/GameListConfigServiceImpl.java index 23800bef..6d854616 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/sys/impl/GameListConfigServiceImpl.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/sys/impl/GameListConfigServiceImpl.java @@ -213,6 +213,27 @@ public class GameListConfigServiceImpl extends } } + @Override + public String getActiveLingxianAppKey(String sysOrigin) { + if (StringUtils.isBlank(sysOrigin)) { + return ""; + } + try { + return Optional.ofNullable(jdbcTemplate.queryForObject(""" + SELECT app_key + FROM lingxian_provider_config + WHERE sys_origin = ? + AND active = 1 + ORDER BY update_time DESC + LIMIT 1 + """, String.class, sysOrigin)) + .map(String::trim) + .orElse(""); + } catch (Exception e) { + return ""; + } + } + @Override public GameListConfig getByGameCode(String gameCode, String sysOrigin) { return query()