From 4fe472b53782cf77f574da3958225aff6b9d5fb4 Mon Sep 17 00:00:00 2001 From: luying Date: Sat, 6 May 2023 21:08:59 +0800 Subject: [PATCH] =?UTF-8?q?(37=E9=9C=80=E6=B1=82):=20=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shared/domain/sdk.ts | 22 +++++++++++++ web-server/app/controller/sdk.ts | 10 +++++- web-server/app/middleware/proxy.ts | 3 ++ web-server/app/router.ts | 2 ++ web-server/app/service/Sdk.ts | 50 ++++++++++++++++++++++++++++-- 5 files changed, 84 insertions(+), 3 deletions(-) diff --git a/shared/domain/sdk.ts b/shared/domain/sdk.ts index 8c0fafe70..164031e51 100644 --- a/shared/domain/sdk.ts +++ b/shared/domain/sdk.ts @@ -561,4 +561,26 @@ export class GetServerParam { checkParams() { return this.server_id != undefined && this.time != undefined && this.sign != undefined } +} + +export class GetServerAndUidParam { + time: number; + appid: string; + gid: string; + uid: number; + dsid: number; + sign: string; + + constructor(data: any) { + this.time = data.time; + this.appid = data.appid; + this.gid = data.gid; + this.uid = data.uid; + this.dsid = data.dsid; + this.sign = data.sign; + } + + checkParams() { + return this.appid != undefined && this.time != undefined && this.gid != undefined && this.uid != undefined && this.dsid != undefined && this.sign != undefined + } } \ No newline at end of file diff --git a/web-server/app/controller/sdk.ts b/web-server/app/controller/sdk.ts index 50b56b4ed..86775875b 100644 --- a/web-server/app/controller/sdk.ts +++ b/web-server/app/controller/sdk.ts @@ -1,5 +1,5 @@ import { Controller } from 'egg'; -import { GetGuildInfoByUserParam, GetRoleByServerParam, GetRoleByUidParam, GetServerListParam, GetServerParam, GuildNameCallBackParam, IOSRefundParam, PayCallback37Data, RoleNameCallBackParam, SendGiftCodeParam } from '../domain/sdk'; +import { GetGuildInfoByUserParam, GetRoleByServerParam, GetRoleByUidParam, GetServerAndUidParam, GetServerListParam, GetServerParam, GuildNameCallBackParam, IOSRefundParam, PayCallback37Data, RoleNameCallBackParam, SendGiftCodeParam } from '../domain/sdk'; export default class SdkController extends Controller { @@ -76,6 +76,14 @@ export default class SdkController extends Controller { return; } + public async getRoleByUidAndServerForLogin() { + const { ctx } = this; + const params = new GetServerAndUidParam(ctx.query||ctx.request.body); + ctx.body = await ctx.service.sdk.getRoleByUidAndServerForLogin(params); + return; + } + + public async getRoleByUid() { const { ctx } = this; const params = new GetRoleByUidParam(ctx.query); diff --git a/web-server/app/middleware/proxy.ts b/web-server/app/middleware/proxy.ts index 23f678690..a0bd92c84 100644 --- a/web-server/app/middleware/proxy.ts +++ b/web-server/app/middleware/proxy.ts @@ -73,6 +73,7 @@ module.exports = () => { '/cb/getrolebyserver', '/cb/getserverinfo', '/cb/getrolebyuid', + '/cb/getrolebyuidandserver', ]; for(let str of urls) { if(url && url.startsWith(str)) { @@ -94,6 +95,8 @@ module.exports = () => { case '/cb/getrolebyserver': case '/cb/getserverinfo': return ctx.query.server_id.toString(); + case '/cb/getrolebyuidandserver': + return ctx.query? ctx.query.dsid.toString(): ctx.request.body.dsid.toString(); case '/cb/getrolebyuid': return 'main'; } diff --git a/web-server/app/router.ts b/web-server/app/router.ts index 2d0533196..8d8e3b3e4 100644 --- a/web-server/app/router.ts +++ b/web-server/app/router.ts @@ -48,6 +48,8 @@ export default (app: Application) => { router.get('/cb/getrolebyserver', controller.sdk.getRoleByUidAndServer); router.get('/cb/getrolebyuid', controller.sdk.getRoleByUid); router.get('/cb/getserverinfo', controller.sdk.getServerInfo); + router.get('/cb/getrolebyuidandserver', controller.sdk.getRoleByUidAndServerForLogin); + router.post('/cb/getrolebyuidandserver', controller.sdk.getRoleByUidAndServerForLogin); // 问卷星回调 router.post('/cb/wjx', controller.sdk.wjxCallback) diff --git a/web-server/app/service/Sdk.ts b/web-server/app/service/Sdk.ts index eab997d52..162b852d9 100644 --- a/web-server/app/service/Sdk.ts +++ b/web-server/app/service/Sdk.ts @@ -1,7 +1,7 @@ import { Service } from 'egg'; import { REDIS_KEY, PAY_37_CALLBACK_CODE, SDK_37_CONST, ORDER_STATE, SDK_37_TREAT_CODE, SERVER_STATUS, SDK_37_REFUND_CODE, SDK_37_ACTIVITY_CODE, PUBLIC_ACCOUNT_GIFT, GIFT_GENERATE_TYPE } from '@consts'; -import { GetGuildInfoByUserParam, GetRoleByServerParam, GetRoleByUidParam, GetServerListParam, GetServerParam, GuildNameCallBackParam, IOSRefundParam, PayCallback37Data, RoleNameCallBackParam, SendGiftCodeParam } from '../domain/sdk'; +import { GetGuildInfoByUserParam, GetRoleByServerParam, GetRoleByUidParam, GetServerAndUidParam, GetServerListParam, GetServerParam, GuildNameCallBackParam, IOSRefundParam, PayCallback37Data, RoleNameCallBackParam, SendGiftCodeParam } from '../domain/sdk'; import { RedisClient } from 'redis'; import { checkParamPrice, get37GetServerMd5Sign, get37Md5SignA, get37Md5SignB, getChannelId, getRedisSubChannel, md5 } from '../pubUtils/sdkUtil'; import { UserOrderModel } from '@db/UserOrder'; @@ -623,8 +623,54 @@ export default class Sdk extends Service { if(sign != params.sign) return resResult(SDK_37_ACTIVITY_CODE.SIGN_ERR); if(nowSeconds() - params.time > 15 * 60) { - return SDK_37_ACTIVITY_CODE.TIME_IS_EXPIRED; + return resResult(SDK_37_ACTIVITY_CODE.TIME_IS_EXPIRED); } return resResult(SDK_37_ACTIVITY_CODE.SUCCESS); } + + // 根据服务器获取玩家数据 + public async getRoleByUidAndServerForLogin(params:GetServerAndUidParam) { + try { + let validateResult = this.getRoleByUidAndServerForLoginValidate(params); + if(validateResult.code != SDK_37_ACTIVITY_CODE.SUCCESS.code) return { state: 0, data: null, msg: validateResult.simStr }; + + let channelId = getChannelId('37', params.uid); + let user = await UserModel.findUserByChannel(channelId); + if(!user) return resResult(SDK_37_ACTIVITY_CODE.ROLE_NOT_FOUND); + + let server = await ServerlistModel.findByServerId(params.dsid); + if(!server) return resResult(SDK_37_ACTIVITY_CODE.SERVER_NOT_FOUND); + let role = await Role.findByUid(user.uid, params.dsid, 'roleId roleName lv createTime serverId ce'); + if(!role) return resResult(SDK_37_ACTIVITY_CODE.ROLE_NOT_FOUND); + return { + state: 1, data: [{ + dsid: role.serverId.toString(), + dsname: server.name, + drid: role.roleId, + drname: role.roleName, + drlevel: role.lv.toString(), + dpower: role.ce.toString(), + }], msg: '成功' + } + } catch(e) { + console.error(e); + return { state: 0, data: null, msg: SDK_37_ACTIVITY_CODE.INTERNAL_ERR }; + } + } + + private getRoleByUidAndServerForLoginValidate(params:GetServerAndUidParam) { + if(!params.checkParams()) return SDK_37_ACTIVITY_CODE.WRONG_PARAMS; + + let { appid, gid, uid, dsid, time } = params; + let str = `${time}${appid}${gid}${dsid}${uid}${SDK_37_CONST.LOGIN_KEY}`; + let sign = md5(str); + console.log('#### str: ', str, 'sign', sign); + if(sign != params.sign) return SDK_37_ACTIVITY_CODE.SIGN_ERR; + + if(nowSeconds() - params.time > 15 * 60) { + return SDK_37_ACTIVITY_CODE.TIME_IS_EXPIRED; + } + return SDK_37_ACTIVITY_CODE.SUCCESS; + } + }