149 lines
5.6 KiB
TypeScript
149 lines
5.6 KiB
TypeScript
|
|
import { Service } from 'egg';
|
|
import { REDIS_KEY, PAY_37_CALLBACK_CODE, SDK_37_CONST, ORDER_STATE, SDK_37_TREAT_CODE } from '@consts';
|
|
import { GetGuildInfoByUserParam, GuildNameCallBackParam, PayCallback37Data, RoleNameCallBackParam } from '../domain/sdk';
|
|
import { RedisClient } from 'redis';
|
|
import { get37Md5Sign, get37PostMd5Sign, getChannelId, getRedisSubChannel } from '../pubUtils/sdkUtil';
|
|
import { UserOrderModel } from '@db/UserOrder';
|
|
import { nowSeconds } from 'app/pubUtils/timeUtil';
|
|
import { RoleModel } from '@db/Role';
|
|
import { gameData } from 'app/pubUtils/data';
|
|
import { resResult } from 'app/pubUtils/util';
|
|
import { UserModel } from '@db/User';
|
|
import { UserGuildModel } from '@db/UserGuild';
|
|
import { GuildModel } from '@db/Guild';
|
|
|
|
/**
|
|
* Test Service
|
|
*/
|
|
export default class Sdk extends Service {
|
|
|
|
public check37Sign(params: PayCallback37Data) {
|
|
let sign = get37Md5Sign(params.getBody, SDK_37_CONST.PAY_KEY);
|
|
console.log('******37Sign', sign);
|
|
return sign == params.sign;
|
|
}
|
|
|
|
public async pay37Callback(params: PayCallback37Data) {
|
|
const { ctx } = this;
|
|
const { app } = ctx;
|
|
const ip = ctx.request.ip;
|
|
|
|
let checkResult = this.check37Sign(params);
|
|
if(!checkResult) return ctx.service.utils.resResult(PAY_37_CALLBACK_CODE.MD5_ERR, '');
|
|
|
|
if(gameData.whiteip.indexOf(ip) == -1) {
|
|
return ctx.service.utils.resResult(PAY_37_CALLBACK_CODE.IP_LIMIT, '');
|
|
}
|
|
|
|
if(nowSeconds() - params.time > 15 * 60) {
|
|
return ctx.service.utils.resResult(PAY_37_CALLBACK_CODE.TIME_IS_EXPIRED, '');
|
|
}
|
|
|
|
let order = await UserOrderModel.findOrder(params.order_no);
|
|
if(!order) {
|
|
return ctx.service.utils.resResult(PAY_37_CALLBACK_CODE.FAIL, '');
|
|
}
|
|
if(order.state != ORDER_STATE.APPLY) {
|
|
return ctx.service.utils.resResult(PAY_37_CALLBACK_CODE.SUCCESS, '');
|
|
}
|
|
if(order.price.toFixed(2) != params.money.toFixed(2)) {
|
|
return ctx.service.utils.resResult(PAY_37_CALLBACK_CODE.PAY_ERR, '');
|
|
}
|
|
|
|
let role = await RoleModel.findByRoleId(order.roleId);
|
|
if(!role) {
|
|
return ctx.service.utils.resResult(PAY_37_CALLBACK_CODE.ROLE_NOT_FOUND, '');
|
|
}
|
|
if(role.serverId != params.sid) {
|
|
return ctx.service.utils.resResult(PAY_37_CALLBACK_CODE.SERVER_NOT_FOUND, '');
|
|
}
|
|
|
|
order = await UserOrderModel.check(order.roleId, order.localOrderID);
|
|
if(!order) {
|
|
return ctx.service.utils.resResult(PAY_37_CALLBACK_CODE.FAIL, '');
|
|
}
|
|
|
|
let redisClient: RedisClient = app.context.redisClient;
|
|
let name = getRedisSubChannel(REDIS_KEY.PAY_CHANNEL, app.config.env);
|
|
console.log('**** channelname', name)
|
|
let result = await redisClient.publishAsync(name, JSON.stringify(params));
|
|
console.log('**** result', result);
|
|
if(result == 0) {
|
|
return ctx.service.utils.resResult(PAY_37_CALLBACK_CODE.SERVER_IS_BUSY, '');
|
|
}
|
|
|
|
return ctx.service.utils.resResult(PAY_37_CALLBACK_CODE.SUCCESS, '');
|
|
}
|
|
|
|
|
|
public check37WordsSign(params: RoleNameCallBackParam|GuildNameCallBackParam|GetGuildInfoByUserParam) {
|
|
let sign = get37PostMd5Sign(params.getBody(), SDK_37_CONST.CHAT_KEY);
|
|
console.log('******37Sign', sign);
|
|
return sign == params.sign;
|
|
}
|
|
|
|
public treatRoleOrGuildNameValidate(params: RoleNameCallBackParam|GuildNameCallBackParam|GetGuildInfoByUserParam) {
|
|
const { ctx } = this;
|
|
const ip = ctx.request.ip;
|
|
|
|
if(!params.checkParams()) return SDK_37_TREAT_CODE.WRONG_PARAMS;
|
|
|
|
if(params.game_key != SDK_37_CONST.GAME_KEY) {
|
|
return SDK_37_TREAT_CODE.ERR;
|
|
}
|
|
|
|
let checkResult = this.check37WordsSign(params);
|
|
if(!checkResult) return SDK_37_TREAT_CODE.SIGN_ERR;
|
|
|
|
if(nowSeconds() - params.time > 15 * 60) {
|
|
return SDK_37_TREAT_CODE.TIME_IS_EXPIRED;
|
|
}
|
|
|
|
if(gameData.whiteip.indexOf(ip) == -1) {
|
|
return SDK_37_TREAT_CODE.ERR;
|
|
}
|
|
return SDK_37_TREAT_CODE.SUCCESS
|
|
}
|
|
|
|
// 用户名违规处理
|
|
public async treatRoleName(params: RoleNameCallBackParam) {
|
|
let check = this.treatRoleOrGuildNameValidate(params);
|
|
if(check.code != SDK_37_TREAT_CODE.SUCCESS.code) return check.code;
|
|
|
|
return check.code
|
|
}
|
|
|
|
// 公会信息违规处理
|
|
public async treatGuildName(params: GuildNameCallBackParam) {
|
|
let check = this.treatRoleOrGuildNameValidate(params);
|
|
if(check.code != SDK_37_TREAT_CODE.SUCCESS.code) return check.code;
|
|
|
|
return check.code
|
|
}
|
|
|
|
// 根据玩家获得公会信息
|
|
public async getGuildByUser(params: GetGuildInfoByUserParam) {
|
|
let check = this.treatRoleOrGuildNameValidate(params);
|
|
if(check.code != SDK_37_TREAT_CODE.SUCCESS.code) return resResult(check);
|
|
|
|
let channelId = getChannelId('37', params.uid);
|
|
console.log(channelId)
|
|
let user = await UserModel.findUserByChannel(channelId);
|
|
if(!user) return resResult(SDK_37_TREAT_CODE.USER_NOT_FOUND);
|
|
|
|
let role = await RoleModel.findByUid(user.uid, params.sid);
|
|
if(!role) return resResult(SDK_37_TREAT_CODE.ROLE_NOT_FOUND);
|
|
|
|
let userGuild = await UserGuildModel.getMyGuild(role.roleId);
|
|
if(userGuild) {
|
|
let guild = await GuildModel.findByCode(userGuild.guildCode, params.sid);
|
|
if(guild) {
|
|
return resResult(check, [{ guildid: guild.code, guild_name: guild.name }]);
|
|
}
|
|
}
|
|
|
|
return resResult(check, []);
|
|
}
|
|
}
|