From 76fe3adb7f96d8ffb8fe252bd1b8dfa8501afdde Mon Sep 17 00:00:00 2001 From: luying Date: Thu, 31 Mar 2022 16:15:49 +0800 Subject: [PATCH] =?UTF-8?q?sdk=EF=BC=9A37ios=E6=94=AF=E4=BB=98=E5=8F=8A?= =?UTF-8?q?=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/servers/order/handler/orderHandler.ts | 1 + .../app/servers/order/remote/orderRemote.ts | 10 +- game-server/app/services/orderService.ts | 27 ++++ game-server/app/services/redisService.ts | 8 +- shared/consts/constModules/activityConst.ts | 9 +- shared/consts/constModules/httpConst.ts | 1 + shared/consts/constModules/sysConst.ts | 1 + shared/consts/statusCode.ts | 22 ++++ shared/db/UserOrder.ts | 16 +++ shared/domain/sdk.ts | 40 ++++++ shared/pubUtils/sdkUtil.ts | 15 ++- web-server/app/controller/sdk.ts | 16 ++- web-server/app/router.ts | 2 + web-server/app/service/Auth.ts | 2 +- web-server/app/service/Sdk.ts | 119 +++++++++++++++++- 15 files changed, 275 insertions(+), 14 deletions(-) diff --git a/game-server/app/servers/order/handler/orderHandler.ts b/game-server/app/servers/order/handler/orderHandler.ts index ae817341e..21278cb39 100644 --- a/game-server/app/servers/order/handler/orderHandler.ts +++ b/game-server/app/servers/order/handler/orderHandler.ts @@ -56,6 +56,7 @@ export class orderHandler { let sdkOrderInfo = null;//客户端需要的平台订单信息 switch (payType) { case PAY_TYPE.THREE_SEVEN: + case PAY_TYPE.THREE_SEVEN_IOS: { let pay37Order = await applyOrder37(localOrderID, roleId, productInfo); if (pay37Order.code == -1) { diff --git a/game-server/app/servers/order/remote/orderRemote.ts b/game-server/app/servers/order/remote/orderRemote.ts index 052de31b2..051f772af 100644 --- a/game-server/app/servers/order/remote/orderRemote.ts +++ b/game-server/app/servers/order/remote/orderRemote.ts @@ -1,6 +1,6 @@ import { Application, ChannelService, HandlerService, } from 'pinus'; import { reloadResources } from '../../../pubUtils/data'; -import { settleOrderFromRedisPub } from '../../../services/orderService'; +import { refundOrderFromRedisPub, settleOrderFromRedisPub } from '../../../services/orderService'; import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService'; import { taflush } from '../../../services/sdkService'; import { errlogger } from '../../../util/logger'; @@ -38,6 +38,14 @@ export class OrderRemote { } } + public async refundOrderFromRedisPub(message: string) { + try { + await refundOrderFromRedisPub(message); + } catch(e) { + errlogger.error(`remote ${__filename} \n ${e.stack}`); + } + } + public setServerMainten(serverIds: number[], startTime: number, endTime: number) { try { setServerMainten(serverIds, startTime, endTime); diff --git a/game-server/app/services/orderService.ts b/game-server/app/services/orderService.ts index dcd058d77..4eff1c735 100644 --- a/game-server/app/services/orderService.ts +++ b/game-server/app/services/orderService.ts @@ -278,5 +278,32 @@ export async function settleOrderFromRedisPub(message: string) { let result = await settleOrder(order, params.sid); await UserOrderModel.saveOrderID(order.roleId, order.localOrderID, aliOrderID, JSON.stringify(result)); + return true +} + + +export async function refundOrderFromRedisPub(message: string) { + console.log('**********refundOrderFromRedisPub*******') + console.log('message: ', message); + + let params: PayCallback37Data; + try { + params = JSON.parse(message); + } catch(e) { + return false; + } + + let order = await UserOrderModel.findOrder(params.order_no); + if(!order || order.state != ORDER_STATE.CHECK_TO_REFUND) { + console.log('订单状态错误'); + return false; + } + if(order.roleId != params.actor_id) { + console.log('订单玩家错误'); + return false; + } + + await UserOrderModel.refund(order.roleId, order.localOrderID, message); + return true } \ No newline at end of file diff --git a/game-server/app/services/redisService.ts b/game-server/app/services/redisService.ts index 4325b79cf..66b11677c 100644 --- a/game-server/app/services/redisService.ts +++ b/game-server/app/services/redisService.ts @@ -542,9 +542,10 @@ export async function redisSubScribe() { let env = pinus.app.get('env'); if(env == 'development') env = 'local'; // 本地处理 let payChannel = getRedisSubChannel(REDIS_KEY.PAY_CHANNEL, env); + let refundChannel = getRedisSubChannel(REDIS_KEY.REFUND_CHANNEL, env); let treatRoleChannel = getRedisSubChannel(REDIS_KEY.TREAT_ROLE_CHANNEL, env); let treatGuildChannel = getRedisSubChannel(REDIS_KEY.TREAT_GUILD_CHANNEL, env); - await redisClientPub().subscribeAsync(payChannel, treatRoleChannel, treatGuildChannel); + await redisClientPub().subscribeAsync(payChannel, treatRoleChannel, treatGuildChannel, refundChannel); redisClientPub().on('message', (channel, message) => { console.log('**********redisSubScribe*******') console.log('channel: ', channel, payChannel); @@ -561,6 +562,11 @@ export async function redisSubScribe() { let servers = pinus.app.getServersByType('guild'); let server = getRandSingleEelm(servers); pinus.app.rpc.guild.guildRemote.treatGuildName.toServer(server.id, message); + } else if (channel == refundChannel) { + let servers = pinus.app.getServersByType('order'); + let server = getRandSingleEelm(servers); + pinus.app.rpc.order.orderRemote.refundOrderFromRedisPub.toServer(server.id, message); + } }); } diff --git a/shared/consts/constModules/activityConst.ts b/shared/consts/constModules/activityConst.ts index 34cb5c216..e4400a220 100644 --- a/shared/consts/constModules/activityConst.ts +++ b/shared/consts/constModules/activityConst.ts @@ -109,9 +109,10 @@ export enum FIRST_GIFT_STATE { export enum PAY_TYPE { TEST = 0, // 测试 THREE_SEVEN = 1, // 37 - WX = 2, // 微信 - ALI = 3, // 阿里 - APPLE = 4, // 苹果 + THREE_SEVEN_IOS = 2, // 37ios + WX = 3, // 微信 + ALI = 4, // 阿里 + APPLE = 5, // 苹果 } /** @@ -122,6 +123,8 @@ export enum ORDER_STATE { RESULT_SUCCESS = 1, // 订单成功并结算奖励 CHECK_ORDER = 2, // 触发查询订单 RESULT_FAIL = 3, // 订单失败 + CHECK_TO_REFUND = 4, // 触发查询要去退款 + REFUND = 5, // 已退款 } /** diff --git a/shared/consts/constModules/httpConst.ts b/shared/consts/constModules/httpConst.ts index 1525d5599..bd5e30598 100644 --- a/shared/consts/constModules/httpConst.ts +++ b/shared/consts/constModules/httpConst.ts @@ -27,6 +27,7 @@ export enum SDK_37_CONST { LOGIN_KEY = '3PerD)H!JdTC_pEUnZl8vXKgasj5;7Q~', // 登录KEY PAY_KEY = '0;_Zy.qodXCF8NGQmrOYltk%HgfAz*39', // 重置KEY CHAT_KEY = '3PerD)H!JdTC_pEUnZl8vXKgasj5;7Q~', // 聊天KEY + IOS_PID = 'zyz', } export enum SDK_TA_CONST { diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index c544a9d8e..a68d6a3f4 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -237,6 +237,7 @@ export enum REDIS_KEY { SHOW_LINEUP ="showLineup", // 展示阵容 SYS_SERVER ='sysServer', // 全服connector服 PAY_CHANNEL = 'pay', // 支付订阅频道 + REFUND_CHANNEL = 'refund', // 退款频道 TREAT_ROLE_CHANNEL = 'treatRole', // 处理玩家账号名频道 TREAT_GUILD_CHANNEL = 'treatGuild', // 处理公会账号名频道 GUILD_FUND = 'guildFund', // 限时排行 diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index dcefdaa78..1bb8967d4 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -520,6 +520,19 @@ export const PAY_37_CALLBACK_CODE = { PAY_ERR: { code: 10, simStr: '充值失败' } } +export const PAY_IOS_37_CALLBACK_CODE = { + SUCCESS: { code: 1, simStr: '发货成功' }, + FAIL: { code: -1, simStr: '发货失败' }, + USER_NOT_FOUND: { code: -2, simStr: '用户不存在' }, + ROLE_NOT_FOUND: { code: -3, simStr: '角色不存在' }, + IP_LIMIT: { code: -4, simStr: 'IP限制' }, + MD5_ERR: { code: -5, simStr: 'md5校验错误' }, + ORDER_DUPLICATE: { code: -6, simStr: '订单号重复' }, + TIME_IS_EXPIRED: { code: -7, simStr: 'time时间已过期' }, + SERVER_IS_BUSY: { code: -8, simStr: '游戏服务器繁忙' }, + WRONG_PARAM: { code: -9, simStr: '参数错误' }, +} + export const SDK_37_TREAT_CODE = { SUCCESS: { code: 1, simStr: '成功' }, WRONG_PARAMS: { code: -1, simStr: '参数错误' }, @@ -528,4 +541,13 @@ export const SDK_37_TREAT_CODE = { ERR: { code: -4, simStr: '其他错误' }, USER_NOT_FOUND: { code: -5, simStr: '用户不存在' }, ROLE_NOT_FOUND: { code: -6, simStr: '角色不存在' }, +} + +export const SDK_37_REFUND_CODE = { + SUCCESS: { code: 1, simStr: '扣除元宝成功' }, + FAIL: { code: -1, simStr: '扣除元宝失败' }, + ROLE_NOT_FOUND: { code: -2, simStr: '角色不存在' }, + IP_LIMIT: { code: -3, simStr: 'IP限制' }, + MD5_ERR: { code: -4, simStr: 'md5校验错误' }, + TIME_IS_EXPIRED: { code: -6, simStr: 'time时间已过期' }, } \ No newline at end of file diff --git a/shared/db/UserOrder.ts b/shared/db/UserOrder.ts index acac02334..11ce48bcd 100644 --- a/shared/db/UserOrder.ts +++ b/shared/db/UserOrder.ts @@ -68,6 +68,22 @@ export default class UserOrder extends BaseModel { return result; } + // 准备退款 + public static async startRefund(roleId: string, localOrderID: string, message: string = '') { + let result: UserOrderModelType = await UserOrderModel.findOneAndUpdate({ roleId, localOrderID }, + { $set: { state: ORDER_STATE.CHECK_TO_REFUND, message } }, + { new: true }).lean(true); + return result; + } + + // 退款 + public static async refund(roleId: string, localOrderID: string, message: string = '') { + let result: UserOrderModelType = await UserOrderModel.findOneAndUpdate({ roleId, localOrderID }, + { $set: { state: ORDER_STATE.REFUND, message } }, + { new: true }).lean(true); + return result; + } + //查询成功订单详情 public static async findSuccessOrderByProductID(productID: string, roleId: string, activityId: number) { let result: UserOrderModelType[] = await UserOrderModel.find({ productID, roleId, activityId, state: ORDER_STATE.RESULT_SUCCESS }).lean(true); diff --git a/shared/domain/sdk.ts b/shared/domain/sdk.ts index b47bd70b3..0cfe92f58 100644 --- a/shared/domain/sdk.ts +++ b/shared/domain/sdk.ts @@ -338,4 +338,44 @@ export class GetServerListParam { checkParams() { return this.appid != undefined && this.gid != undefined && this.time != undefined && this.sign != undefined } +} + +export class IOSRefundParam { + appid: string; // pid, 平台id + uid: number; // 用户id + game_id: number; // 发行游戏id + fx_c_game_id: string; // 子游戏id + sid: number; // 游戏服id + actor_id: string; // 角色id + order_id: string; // 37订单号 + order_no: string; // 本地订单号 + money: number; // 金额 + game_coin: number; // 元宝数 + product_id: string; // 商品id + time: number; // 请求时间 + ext: string; // 扩展参数 + sign: string; // 签名 + + constructor(data: any) { + this.appid = data.appid; + this.uid = data.uid; + this.game_id = data.game_id; + this.fx_c_game_id = data.fx_c_game_id; + this.sid = data.sid; + this.actor_id = data.actor_id; + this.order_id = data.order_id; + this.order_no = data.order_no; + this.money = data.money; + this.game_coin = data.game_coin; + this.product_id = data.product_id; + this.time = data.time; + this.ext = data.ext; + this.sign = data.sign; + } + + getBody() { + let { appid, uid, game_id, sid, actor_id, order_id, order_no, money, game_coin, product_id, time, ext } = this; + return { appid, uid, game_id, sid, actor_id, order_id, order_no, money, game_coin, product_id, time, ext } + } + } \ No newline at end of file diff --git a/shared/pubUtils/sdkUtil.ts b/shared/pubUtils/sdkUtil.ts index 83f7b011f..0260a9fae 100644 --- a/shared/pubUtils/sdkUtil.ts +++ b/shared/pubUtils/sdkUtil.ts @@ -63,7 +63,14 @@ export function get37GetServerMd5Sign(body: GetServerListParam, key: string) { return sign } -export async function loginValidate37(clientId: string, pst: string, platformAppid: string = SDK_37_CONST.PID, childGameId: number = SDK_37_CONST.FX_C_GAME_ID) { +export async function loginValidate37(clientId: string, pst: string, platform: string, platformAppid: string, childGameId: number = SDK_37_CONST.FX_C_GAME_ID) { + if(!platformAppid) { + if(platform == 'android') { + platformAppid = SDK_37_CONST.PID; + } else if(platform == 'ios' ){ + platformAppid = SDK_37_CONST.IOS_PID; + } + } let result: string = await request37(SDK_37_ADDR.LOGIN, { clientid: clientId, pid: platformAppid, @@ -86,10 +93,10 @@ export async function loginValidate37(clientId: string, pst: string, platformApp return json; } -export async function loginValidata(channelType: string, params: { clientId: string, pst: string, platformAppid: string, childGameId: number }) { +export async function loginValidata(channelType: string, params: { clientId: string, pst: string, platform: string, platformAppid: string, childGameId: number }) { if(channelType == '37') { - let { clientId, pst, platformAppid, childGameId } = params; - return await loginValidate37(clientId, pst, platformAppid, childGameId); + let { clientId, pst, platform, platformAppid, childGameId } = params; + return await loginValidate37(clientId, pst, platform, platformAppid, childGameId); } else { return false; } diff --git a/web-server/app/controller/sdk.ts b/web-server/app/controller/sdk.ts index 1f57ce5ae..d8d3c2224 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, GetServerListParam, GuildNameCallBackParam, PayCallback37Data, RoleNameCallBackParam } from '../domain/sdk'; +import { GetGuildInfoByUserParam, GetServerListParam, GuildNameCallBackParam, IOSRefundParam, PayCallback37Data, RoleNameCallBackParam } from '../domain/sdk'; export default class SdkController extends Controller { @@ -10,6 +10,20 @@ export default class SdkController extends Controller { return; } + public async pay37IosCallback() { + const { ctx } = this; + const params = new PayCallback37Data(ctx.request.body); + ctx.body = await ctx.service.sdk.pay37IOSCallback(params); + return; + } + + public async refundIOSCallback() { + const { ctx } = this; + const params = new IOSRefundParam(ctx.request.body); + ctx.body = await ctx.service.sdk.refundIOSCallback(params); + return; + } + public async treatRoleName() { const { ctx } = this; const params = new RoleNameCallBackParam(ctx.query); diff --git a/web-server/app/router.ts b/web-server/app/router.ts index 5594b7d2e..a46c1355c 100644 --- a/web-server/app/router.ts +++ b/web-server/app/router.ts @@ -28,9 +28,11 @@ export default (app: Application) => { // sdk 回调 router.post('/cb/pay37callback', controller.sdk.pay37Callback); + router.post('/cb/pay37ioscallback', controller.sdk.pay37IosCallback); router.get('/cb/treatusername', controller.sdk.treatRoleName); router.get('/cb/treatguildname', controller.sdk.treatGuildName); router.get('/cb/getguildbyuser', controller.sdk.getGuildByUser); router.get('/cb/getserverlist', controller.sdk.getServerList); router.post('/cb/getserverlist', controller.sdk.getServerList); + router.post('/cb/refundioscallback', controller.sdk.refundIOSCallback); }; diff --git a/web-server/app/service/Auth.ts b/web-server/app/service/Auth.ts index fc9e19f26..9b07cc7d6 100644 --- a/web-server/app/service/Auth.ts +++ b/web-server/app/service/Auth.ts @@ -404,7 +404,7 @@ export default class Auth extends Service { const ctx = this.ctx; - let requestResult = await loginValidata(channelType, { clientId, pst, platformAppid, childGameId }); + let requestResult = await loginValidata(channelType, { clientId, pst, platform, platformAppid, childGameId }); if(!requestResult) return this.ctx.service.utils.resResult(STATUS.CHANNEL_ERR); if(requestResult.code != 1) { diff --git a/web-server/app/service/Sdk.ts b/web-server/app/service/Sdk.ts index cc7acbf25..b22cc4cf0 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 } from '@consts'; -import { GetGuildInfoByUserParam, GetServerListParam, GuildNameCallBackParam, PayCallback37Data, RoleNameCallBackParam } from '../domain/sdk'; +import { REDIS_KEY, PAY_37_CALLBACK_CODE, SDK_37_CONST, ORDER_STATE, SDK_37_TREAT_CODE, SERVER_STATUS, PAY_IOS_37_CALLBACK_CODE, SDK_37_REFUND_CODE } from '@consts'; +import { GetGuildInfoByUserParam, GetServerListParam, GuildNameCallBackParam, IOSRefundParam, PayCallback37Data, RoleNameCallBackParam } from '../domain/sdk'; import { RedisClient } from 'redis'; import { get37GetServerMd5Sign, get37Md5SignA, get37Md5SignB, getChannelId, getRedisSubChannel } from '../pubUtils/sdkUtil'; import { UserOrderModel } from '@db/UserOrder'; @@ -20,7 +20,7 @@ import moment = require('moment'); */ export default class Sdk extends Service { - public check37Sign(params: PayCallback37Data) { + public check37Sign(params: PayCallback37Data|IOSRefundParam) { let sign = get37Md5SignA(params.getBody(), SDK_37_CONST.PAY_KEY); console.log('******37Sign', sign); return sign == params.sign; @@ -85,6 +85,119 @@ export default class Sdk extends Service { return ctx.service.utils.resResult(PAY_37_CALLBACK_CODE.SUCCESS, ''); } + public async pay37IOSCallback(params: PayCallback37Data) { + const { ctx } = this; + const { app } = ctx; + + let checkResult = this.check37Sign(params); + if(!checkResult) return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.MD5_ERR, ''); + + console.log('*****pay37Callback check sign ok') + if(gameData.whiteip.indexOf(ctx.clientIp) == -1) { + return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.IP_LIMIT, ''); + } + + console.log('*****pay37Callback check ip ok') + if(nowSeconds() - params.time > 15 * 60) { + return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.TIME_IS_EXPIRED, ''); + } + console.log('*****pay37Callback check time ok') + + let order = await UserOrderModel.findOrder(params.order_no); + if(!order) { + return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.ORDER_DUPLICATE, ''); + } + console.log('*****pay37Callback check order ok') + if(order.state != ORDER_STATE.APPLY) { + return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.SUCCESS, ''); + } + console.log('*****pay37Callback check order status ok', params.money, typeof params.money) + if(order.price != parseFloat(params.money)) { + return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.FAIL, ''); + } + console.log('*****pay37Callback check money ok', order.price, params.money) + + let role = await RoleModel.findByRoleId(order.roleId); + if(!role) { + return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.ROLE_NOT_FOUND, ''); + } + console.log('*****pay37Callback check role ok') + if(role.serverId != params.sid) { + return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.ROLE_NOT_FOUND, ''); + } + console.log('*****pay37Callback check server ok') + + order = await UserOrderModel.check(order.roleId, order.localOrderID); + if(!order) { + return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.FAIL, ''); + } + console.log('*****pay37Callback save order check ok') + + let redisClient: RedisClient = app.context.redisClient; + let name = getRedisSubChannel(REDIS_KEY.PAY_CHANNEL, app.config.env); + let result = await redisClient.publishAsync(name, JSON.stringify(params)); + if(result == 0) { + return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.SERVER_IS_BUSY, ''); + } + console.log('*****pay37Callback redis publish ok') + + return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.SUCCESS, ''); + } + + public async refundIOSCallback(params: IOSRefundParam) { + const { ctx } = this; + const { app } = ctx; + + let checkResult = this.check37Sign(params); + if(!checkResult) return ctx.service.utils.resResult(SDK_37_REFUND_CODE.MD5_ERR, ''); + + console.log('*****refundIOSCallback check sign ok') + if(gameData.whiteip.indexOf(ctx.clientIp) == -1) { + return ctx.service.utils.resResult(SDK_37_REFUND_CODE.IP_LIMIT, ''); + } + + console.log('*****refundIOSCallback check ip ok') + if(nowSeconds() - params.time > 15 * 60) { + return ctx.service.utils.resResult(SDK_37_REFUND_CODE.TIME_IS_EXPIRED, ''); + } + console.log('*****refundIOSCallback check time ok, order_no:', params.order_no) + + let order = await UserOrderModel.findOrder(params.order_no); + if(!order) { + return ctx.service.utils.resResult(SDK_37_REFUND_CODE.FAIL, ''); + } + console.log('*****refundIOSCallback check order ok') + if(order.state != ORDER_STATE.RESULT_SUCCESS) { + return ctx.service.utils.resResult(SDK_37_REFUND_CODE.SUCCESS, ''); + } + console.log('*****refundIOSCallback check order status ok', params.money, typeof params.money) + + let role = await RoleModel.findByRoleId(order.roleId); + if(!role) { + return ctx.service.utils.resResult(SDK_37_REFUND_CODE.ROLE_NOT_FOUND, ''); + } + console.log('*****refundIOSCallback check role ok') + if(role.serverId != params.sid) { + return ctx.service.utils.resResult(SDK_37_REFUND_CODE.ROLE_NOT_FOUND, ''); + } + console.log('*****refundIOSCallback check server ok') + + order = await UserOrderModel.startRefund(order.roleId, order.localOrderID); + if(!order) { + return ctx.service.utils.resResult(SDK_37_REFUND_CODE.FAIL, ''); + } + console.log('*****refundIOSCallback save order check ok') + + let redisClient: RedisClient = app.context.redisClient; + let name = getRedisSubChannel(REDIS_KEY.REFUND_CHANNEL, app.config.env); + let result = await redisClient.publishAsync(name, JSON.stringify(params)); + if(result == 0) { + return ctx.service.utils.resResult(SDK_37_REFUND_CODE.FAIL, ''); + } + console.log('*****refundIOSCallback redis publish ok') + + return ctx.service.utils.resResult(SDK_37_REFUND_CODE.SUCCESS, ''); + } public check37WordsSign(params: RoleNameCallBackParam|GuildNameCallBackParam|GetGuildInfoByUserParam) { let sign = get37Md5SignB(params.getBody(), SDK_37_CONST.CHAT_KEY);