| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018 |
- import Msg from '../utils/msg'; // 确保路径是正确的
- import {
- RefreshToken,
- PackageName,
- ProductId,
- IosUrl,
- SandboxIosUrl,
- Account,
- ClientSecret,
- ClientId,
- AppSecret360
- } from '../config/thirdParams'
- import {
- compareVersions,
- generateOrderNumber,
- formatDate,
- getServerList
- } from '../utils/common'
- const CryptoJS = require("crypto-js");
- const Order = require('../model/OrderModel')
- const Server = require('../model/ServerModel')
- const Version = require('../model/VersionModel')
- const CDK = require("../model/CDK")
- const notice = require("../json/notice.json")
- const th_notice = require("../json/th_notice.json")
- const logger = require('../utils/log')
- const axios = require('axios');
- const googleCallPay = async (ctx) => {
- let ret = {
- code: 0,
- msg: '发货失败'
- }
- let data = ctx.request.body
- let orderId = data.orderId
- let googleToken = data.purchaseToken
- let out_trade_no = ''
- logger.info("pay callback params:", { "url": ctx.href, "params": data })
- const res = await Order.updateOrderToken(
- orderId,
- googleToken,
- 'google',
- );
- const redisClient = ctx.redis.client;
- let access_token = await redisClient.get('access_token');
- if (!access_token) {
- console.log('请求api获取token')
- const apiData = {
- "grant_type": "refresh_token",
- "client_id": ClientId,
- "client_secret": ClientSecret,
- "refresh_token": RefreshToken
- }
- const response = await axios.post('https://accounts.google.com/o/oauth2/token', apiData, {
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded'
- }
- });
- logger.info("token params:", { "data": response.data, "params": apiData })
- if (!response.data.access_token) {
- return ret
- }
- access_token = response.data.access_token
- await redisClient.set('access_token', response.data.access_token);
- await redisClient.expire('access_token', 1800);
- }
- if (!access_token) {
- return ret;
- }
- const orderInfo = (await Order.getOrder(orderId))[0]
- if (!orderInfo) {
- logger.info(`订单${orderId}不存在`)
- ret.msg = `订单${orderId}不存在`
- return ret
- }
- if (orderInfo.status == 2) {
- logger.info(`订单${orderId}已经重复发货`)
- ret.code = 1
- ret.msg = `订单${orderId}已经重复发货`
- return ret
- }
- let url = await getServerList(orderInfo.server_id, 'default')
- if (!url) {
- logger.info(`区服id错误: serverId ${orderInfo.server_id}`)
- ret.msg = `区服id错误: serverId ${orderInfo.server_id}`
- return ret
- }
- const productId = ProductId + orderInfo.product_id
- let apiUrl = `https://androidpublisher.googleapis.com/androidpublisher/v3/applications/${PackageName}/purchases/products/${productId}/tokens/${googleToken}?access_token=${access_token}`
- let maxRetries = 5;
- let currentRetry = 0;
- let isCheck = false;
- // 使用 while 循环进行重试
- while (currentRetry < maxRetries) {
- try {
- // // 尝试执行的操作
- const googleRes = await axios.get(apiUrl, {
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded'
- }
- })
- console.log(googleRes.data)
- // 如果操作成功,退出循环
- if (googleRes.data.purchaseState == 0) {
- out_trade_no = googleRes.data.orderId
- isCheck = true
- break;
- }
- } catch (error) {
- // 如果操作失败,记录错误并继续尝试
- console.log(error)
- }
- currentRetry++;
- }
- if (!isCheck) {
- return ret;
- }
- let sendMsg = new Msg()
- sendMsg.connect(url, Account);
- let orgMemId = orderInfo.uid
- let orgOderId = orderId
- let orgProductId = orderInfo.product_id
- let orgProductPrice = orderInfo.amount
- // 在适当的时机,调用 CG_ASK_LOGIN 方法
- let params = `{"account":"${orgMemId}","order":"${orgOderId}","id":${orgProductId},"cnt":100,"money":${orgProductPrice}}`
- return new Promise((resolve) => {
- setTimeout(async () => {
- const send_res = sendMsg.CG_ASK_LOGIN(Account, 0, "", 'cn', 'CN', ctx.request.ip, params);
- if (!send_res) {
- resolve(ret);
- return;
- }
- let acknowledgeUrl = `https://androidpublisher.googleapis.com/androidpublisher/v3/applications/${PackageName}/purchases/products/${productId}/tokens/${googleToken}:acknowledge?access_token=${access_token}`
- console.log(acknowledgeUrl)
- const acknowledgeRes = await axios.post(acknowledgeUrl,
- {
- developerPayload: ""
- }
- ,
- {
- headers: {
- 'Content-Type': 'application/json'
- }
- })
- let consumeUrl = `https://androidpublisher.googleapis.com/androidpublisher/v3/applications/${PackageName}/purchases/products/${productId}/tokens/${googleToken}:consume?access_token=${access_token}`
- const consumeRes = await axios.post(consumeUrl,
- {
- developerPayload: ""
- }
- ,
- {
- headers: {
- 'Content-Type': 'application/json'
- }
- })
- logger.info("pass :", { "orderId": orderId })
- const update_time = formatDate(new Date())
- const res = await Order.updateOrderStats(
- orderId,
- 2,
- out_trade_no,
- update_time
- );
- if (res.affectedRows <= 0) {
- logger.info(`订单${orderId} 发货失败`)
- ret.msg = '发货失败'
- resolve(ret);
- return;
- }
- ret.code = 1
- ret.msg = '发货成功'
- resolve(ret);
- }, 1000);
- });
- }
- const appleCallPay = async (ctx) => {
- let ret = {
- code: 0,
- msg: '发货失败'
- }
- let data = ctx.request.body
- logger.info("pay callback params:", { "url": ctx.href, "params": data })
- if (!data.purchaseToken || !data.orderId) {
- return ret;
- }
- let receipt_data = data.purchaseToken.replace(/ /g, '+')
- let orderId = data.orderId
- let maxRetries = 5;
- let currentRetry = 0;
- let isCheck = false;
- let out_trade_no = orderId
- // 使用 while 循环进行重试
- while (currentRetry < maxRetries) {
- try {
- const apiData = {
- "receipt-data": receipt_data,
- }
- const response = await axios.post(IosUrl, apiData, {
- headers: {
- 'Content-Type': 'application/json'
- }
- });
- logger.info(`苹果返回的状态:${response.data.status}`)
- // 如果操作成功,退出循环
- if (response.data.status == 0) {
- isCheck = true
- break;
- }
- } catch (error) {
- // 如果操作失败,记录错误并继续尝试
- console.log(error)
- }
- currentRetry++;
- }
- if (!isCheck) {
- logger.info(`票据验证失败!`)
- ret.msg = `票据验证失败!`
- return ret;
- }
- const orderInfo = (await Order.getOrder(orderId))[0]
- if (!orderInfo) {
- logger.info(`订单${orderId}不存在`)
- ret.msg = `订单${orderId}不存在`
- return ret
- }
- if (orderInfo.status == 2) {
- logger.info(`订单${orderId}已经重复发货`)
- ret.code = 1
- ret.msg = `订单${orderId}已经重复发货`
- return ret
- }
- let url = await getServerList(orderInfo.server_id, 'default')
- if (!url) {
- logger.info(`区服id错误: serverId ${orderInfo.server_id}`)
- ret.msg = `区服id错误: serverId ${orderInfo.server_id}`
- return ret
- }
- let sendMsg = new Msg()
- sendMsg.connect(url, Account);
- let orgMemId = orderInfo.uid
- let orgOderId = orderId
- let orgProductId = orderInfo.product_id
- let orgProductPrice = orderInfo.amount
- // 在适当的时机,调用 CG_ASK_LOGIN 方法
- let params = `{"account":"${orgMemId}","order":"${orgOderId}","id":${orgProductId},"cnt":100,"money":${orgProductPrice}}`
- return new Promise((resolve) => {
- setTimeout(async () => {
- logger.info(`订单${orderId}通知游戏发货开始`)
- const send_res = sendMsg.CG_ASK_LOGIN(Account, 0, "", 'cn', 'CN', ctx.request.ip, params);
- if (!send_res) {
- resolve(ret);
- return;
- }
- logger.info(`订单${orderId}通知游戏发货结束`)
- const update_time = formatDate(new Date())
- const res = await Order.updateOrderStats(
- orderId,
- 2,
- out_trade_no,
- update_time
- );
- if (res.affectedRows <= 0) {
- logger.info(`订单${orderId} 发货失败`)
- ret.msg = '发货失败'
- resolve(ret);
- return;
- }
- ret.code = 1
- ret.msg = '发货成功'
- resolve(ret);
- }, 1000);
- });
- }
- const CallPay360 = async (ctx) => {
- let ret = {
- code: 0,
- msg: '发货失败'
- }
- let data = ctx.request.body
- let sign = data.sign
- let serverId = data.serverId
- let orderId = data.cpOrder
- let out_trade_no = data.orderId
- logger.info("pay callback params:", { "url": ctx.href, "params": data })
- const orderInfo = (await Order.getOrder(orderId))[0]
- if (!orderInfo) {
- logger.info(`订单${orderId}不存在`)
- ret.msg = `订单${orderId}不存在`
- return ret
- }
- if (orderInfo.status == 2) {
- logger.info(`订单${orderId}已经重复发货`)
- ret.code = 1
- ret.msg = `订单${orderId}已经重复发货`
- return ret
- }
- //签名参数
- let signData = Object.keys(data).sort().filter(key => key !== 'sign');
- let signStr = signData.map(key => `${data[key]}`).join('');
- signStr += AppSecret360
- let newSign = CryptoJS.MD5(signStr).toString();
- console.log("signStr:", signStr)
- console.log("newSign:", newSign)
- if (sign != newSign) {
- logger.info(`签名错误: 签名串 ${signStr} newSign ${newSign} sign ${sign}`)
- ret.msg = `签名错误`
- return ret
- }
- let url = await getServerList(serverId, 'default')
- if (!url) {
- logger.info(`区服id错误: serverId ${serverId}`)
- ret.msg = `区服id错误: serverId ${serverId}`
- return ret
- }
- //发货
- // 使用 Msg 类的 connect 方法连接到 WebSocket 服务器
- let sendMsg = new Msg()
- sendMsg.connect(url, Account);
- logger.info(`订单${orderId} ${url}`)
- let orgMemId = data.uid
- let orgOderId = data.cpOrder
- let orgProductId = orderInfo.product_id
- let orgExt = data.cText
- let orgProductPrice = data.skuPrice
- // 在适当的时机,调用 CG_ASK_LOGIN 方法
- let params = `{"account":"${orgMemId}","order":"${orgOderId}","id":${orgProductId},"cnt":100,"money":${orgProductPrice}}`
- return new Promise((resolve) => {
- setTimeout(async () => {
- console.log("这个消息将在3秒后打印出来");
- const send_res = sendMsg.CG_ASK_LOGIN(Account, 0, "", 'cn', 'CN', ctx.request.ip, params);
- if (!send_res) {
- resolve(ret);
- return;
- }
- const update_time = formatDate(new Date())
- const res = await Order.updateOrderStats(
- orderId,
- 2,
- out_trade_no,
- update_time
- );
- if (res.affectedRows <= 0) {
- logger.info(`订单${orderId} 发货失败`)
- ret.msg = '发货失败'
- resolve(ret);
- return;
- }
- ret.code = 1
- ret.msg = '发货成功'
- resolve(ret);
- }, 1000);
- });
- }
- const testGoogleCallPay = async (ctx) => {
- let ret = {
- code: 0,
- msg: '消费失败'
- }
- let data = ctx.request.body
- logger.info("pay callback params:", { "url": ctx.href, "params": data })
- const redisClient = ctx.redis.client;
- let access_token = await redisClient.get('access_token');
- if (!access_token) {
- console.log('请求api获取token')
- const apiData = {
- "grant_type": "refresh_token",
- "client_id": ClientId,
- "client_secret": ClientSecret,
- "refresh_token": RefreshToken
- }
- const response = await axios.post('https://accounts.google.com/o/oauth2/token', apiData, {
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded'
- }
- });
- logger.info("token params:", { "data": response.data, "params": apiData })
- if (!response.data.access_token) {
- return ret
- }
- access_token = response.data.access_token
- await redisClient.set('access_token', response.data.access_token);
- await redisClient.expire('access_token', 1800);
- }
- if (!access_token) {
- return ret;
- }
- let googleToken = data.purchaseToken
- let product_id = data.orderId
- const productId = ProductId + product_id
- let apiUrl = `https://androidpublisher.googleapis.com/androidpublisher/v3/applications/${PackageName}/purchases/products/${productId}/tokens/${googleToken}?access_token=${access_token}`
- let maxRetries = 5;
- let currentRetry = 0;
- let isCheck = false;
- // 使用 while 循环进行重试
- while (currentRetry < maxRetries) {
- try {
- // // 尝试执行的操作
- const googleRes = await axios.get(apiUrl, {
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded'
- }
- })
- console.log(googleRes.data)
- // 如果操作成功,退出循环
- if (googleRes.data.purchaseState == 0) {
- isCheck = true
- break;
- }
- } catch (error) {
- // 如果操作失败,记录错误并继续尝试
- console.log(error)
- }
- currentRetry++;
- }
- if (!isCheck) {
- return ret;
- }
- return new Promise(async (resolve) => {
- let acknowledgeUrl = `https://androidpublisher.googleapis.com/androidpublisher/v3/applications/${PackageName}/purchases/products/${productId}/tokens/${googleToken}:acknowledge?access_token=${access_token}`
- console.log(acknowledgeUrl)
- const acknowledgeRes = await axios.post(acknowledgeUrl,
- {
- developerPayload: ""
- }
- ,
- {
- headers: {
- 'Content-Type': 'application/json'
- }
- })
- let consumeUrl = `https://androidpublisher.googleapis.com/androidpublisher/v3/applications/${PackageName}/purchases/products/${productId}/tokens/${googleToken}:consume?access_token=${access_token}`
- const consumeRes = await axios.post(consumeUrl,
- {
- developerPayload: ""
- }
- ,
- {
- headers: {
- 'Content-Type': 'application/json'
- }
- })
- ret.code = 1
- ret.msg = '发货成功'
- resolve(ret);
- });
- }
- const checkVersion = async (ctx) => {
- let ret = {
- code: 0,
- msg: '无需更新',
- url: '',
- }
- let data = ctx.request.body
- let version = data.version
- let tag = data.tag || 'default'
- logger.info("checkVersion params:", { "url": ctx.href, "params": data })
- const versionInfo = (await Version.getGameVersion(tag))[0]
- if (!versionInfo) {
- return ret
- }
- if (compareVersions(versionInfo.version, version) === 1) {
- if (versionInfo.download_url) {
- ret.code = 1
- ret.msg = '需要更新'
- ret.url = versionInfo.download_url
- }
- }
- return ret
- }
- //验证账号
- const checkUserToken = async (ctx) => {
- }
- class ApiController {
- async createOrder(ctx) {
- let {
- uid,
- level,
- amount,
- role_id,
- role_name,
- product_id,
- server_id
- } = ctx.request.body
- logger.info("create params:", { "params": ctx.request.body })
- if (!product_id || !server_id || !role_name || !role_id || !amount || !uid) {
- ctx.body = { code: -1, message: '参数错误,创建订单失败!!', data: '' }
- return
- }
- const orderId = generateOrderNumber(); // 生成一个长度为8的订单号
- const create_time = formatDate(new Date())
- const res = await Order.createOrder(
- orderId,
- uid,
- level,
- amount,
- role_id,
- role_name,
- product_id,
- server_id,
- create_time
- );
- if (res.affectedRows > 0) {
- ctx.body = { code: 0, message: '创建订单成功', data: orderId }
- } else {
- ctx.body = { code: -1, message: '创建订单失败', data: '' }
- }
- logger.info("创建订单返回结果:", { "params": ctx.body })
- }
- async checkUserToken(ctx) {
- // const result = await checkUserToken(ctx);
- // let data = { "status": false, "sign": "" }
- // if (result) {
- // data.status = true
- // data.sign = result
- // }
- // ctx.body = data
- }
- async callPay(ctx) {
- let data = ctx.request.body
- let platform = data.platform || '360'
- switch (platform) {
- case 'google':
- var result = await googleCallPay(ctx)
- console.log('发货结果', result)
- ctx.body = result
- break;
- case 'apple':
- var result = await appleCallPay(ctx)
- console.log('发货结果', result)
- ctx.body = result
- break;
- case '360':
- var result = await CallPay360(ctx)
- console.log('发货结果', result)
- ctx.body = result
- break;
- // case 'testGoogle':
- // var result = await testGoogleCallPay(ctx)
- // console.log('发货结果', result)
- // ctx.body = result
- // break;
- default:
- ctx.body = {
- code: 0,
- msg: '渠道错误'
- }
- }
- }
- async checkVersion(ctx) {
- var result = await checkVersion(ctx)
- console.log('校验版本', result)
- ctx.body = result
- }
- async getServerList(ctx) {
- let tag = ctx.query.tag || 'default'
- const servers = (await Server.getServerList(tag))
- let data = []
- let ip = ctx.request.ip
- if (ip.startsWith('::ffff:')) {
- ip = ip.substring('::ffff:'.length);
- }
- logger.info("区服接口", { "ip": ctx.request.ip })
- if (servers.length > 0) {
- servers.forEach(function (element) {
- let status = element.status
- if ((status == 0 || status == 3) && element.white_list) {
- const list = element.white_list.split(",");
- if (list.length > 0) {
- if (list.includes(ip)) {
- status = 1
- }
- }
- }
- data.push({
- "id": element.id,
- "name": element.name,
- "ip": element.ip,
- "port": element.port,
- "tips": element.tips,
- "status": status,
- })
- });
- }
- ctx.body = data
- }
- async getAllServerList(ctx) {
- let tag = ctx.query.tag || 'default'
- let ip = ctx.request.ip
- if (ip.startsWith('::ffff:')) {
- ip = ip.substring('::ffff:'.length);
- }
- logger.info("getAllServerList 区服接口", { "ip": ctx.request.ip })
- const servers = (await Server.getAllServerList(tag, ip))
- ctx.body = servers
- }
- async enterServer(ctx) {
- let ret = {
- code: 0,
- msg: '请求失败'
- }
- let {
- uid,
- server_id
- } = ctx.request.body
- let url = await getServerList(server_id, 'default')
- if (!url) {
- ctx.body = { code: -1, message: `区服id错误: serverId ${server_id}`, data: '' }
- return
- }
- logger.info("create params:", { "params": ctx.request.body })
- if (!server_id || !uid) {
- ctx.body = { code: -1, message: '参数错误!!', data: '' }
- return
- }
- const create_time = formatDate(new Date())
- const serverInfo = (await Server.checkEnterServerByUid(uid, server_id))[0]
- let res = null
- if (serverInfo) {
- res = await Server.updateEnterServer(
- serverInfo.id,
- create_time
- );
- } else {
- res = await Server.enterServer(
- uid,
- server_id,
- create_time
- );
- }
- if (res.affectedRows > 0) {
- ctx.body = { code: 0, message: '请求成功', data: '' }
- } else {
- ctx.body = { code: -1, message: '请求失败', data: '' }
- }
- }
- async getLastServerList(ctx) {
- let {
- uid,
- } = ctx.request.body
- let tag = 'default'
- let data = [];
- let isNewAccount = 1
- let enterServerList = (await Server.getEnterServerListByUid(uid))
- if (enterServerList.length > 0) {
- isNewAccount = 0
- enterServerList.forEach(function (element) {
- data.push({
- "channel": "Thailand", //渠道固定
- "minSid": 1, //最小服务器
- "maxSid": 10, //最大服务器 这里会控制 服务器列表显示的数量
- "isNewAccount": isNewAccount, //1为新号 会弹出用户协议
- //以下是最近登陆的服务器 (不可为空 如果没有参数可以填最后一个区)
- "sid": element.server_id || 1,
- "id": element.server_id || 1,
- "name": element.name || "1区",
- "tips": element.tips || "",
- "server": element.ip ? `ws://${element.ip}:${element.port}` : "",
- "status": element.status || 0,
- })
- });
- } else {
- const servers = (await Server.getServerList(tag, 1))
- if(servers.length > 0){
- const serverInfo = servers[servers.length - 1]
- data.push({
- "channel": "Thailand", //渠道固定
- "minSid": 1, //最小服务器
- "maxSid": 10, //最大服务器 这里会控制 服务器列表显示的数量
- "isNewAccount": isNewAccount, //1为新号 会弹出用户协议
- //以下是最近登陆的服务器 (不可为空 如果没有参数可以填最后一个区)
- "sid": serverInfo.id || 1,
- "id": serverInfo.id || 1,
- "name": serverInfo.name || "1区",
- "tips": serverInfo.tips || "",
- "server": serverInfo.ip ? `ws://${serverInfo.ip}:${serverInfo.port}` : "",
- "status": serverInfo.status || 0,
- })
- }else{
- data.push({
- "channel": "Thailand", //渠道固定
- "minSid": 1, //最小服务器
- "maxSid": 10, //最大服务器 这里会控制 服务器列表显示的数量
- "isNewAccount": isNewAccount, //1为新号 会弹出用户协议
- //以下是最近登陆的服务器 (不可为空 如果没有参数可以填最后一个区)
- "sid": 1,
- "id": 1,
- "name": "1区",
- "tips": "",
- "server": "",
- "status": 0,
- })
- }
- }
- ctx.body = data
- }
- async getNotice(ctx) {
- let data = ctx.request.body
- let platform = data.platform || 'th'
- switch (platform) {
- case 'th':
- ctx.body = th_notice
- break;
- case '360':
- ctx.body = notice
- break;
- default:
- ctx.body = notice
- }
- }
- async genCDK(ctx) {
- /*
- data = {
- cnt : number -- 生成数量
- useCnt : number -- 当前批次最大使用数量
- serverList : string -- 区服列表Json字符串
- itemList : string -- CDK对应物品列表Json字符串
- }
- */
- let data = ctx.request.body
- await CDK.genCDK(ctx, data.cnt, data.useCnt, data.serverList, data.itemList)
- ctx.body = {
- code: 0,
- msg: 'success'
- }
- return
- }
- async getCDK(ctx) {
- let data = ctx.request.body
- let ret = await CDK.getCDK(ctx, data.batch)
- if (ret.length <= 0) {
- ctx.body = {
- code: 1,
- msg: "batch invalid"
- }
- return
- }
- ctx.body = {
- code: 0,
- msg: ret
- }
- }
- async useCDK(ctx) {
- let data = ctx.request.body
- let url = await getServerList(data.serverId, 'default')
- let err = ""
- if (!url) {
- ctx.body = {
- code: 1,
- msg: `区服id错误: serverId ${data.serverId}`
- }
- err = "server id invalid"
- }
- let param: string = ""
- // 验证CDK
- if (err.length == 0) {
- let batchInfo = await CDK.getCDKItemList(ctx, data.code)
- if (batchInfo.length <= 0) {
- err = "cdk not found"
- } else {
- err = await CDK.checkCDK(ctx, data.code, data.serverId)
- param = JSON.stringify({
- type: "UseCDK",
- err: err,
- batchInfo: batchInfo
- })
- }
- }
- // 固定码
- if (err == "cdk not found" || err == "server id invalid") {
- param = JSON.stringify({
- code: data.code,
- type: "UseFixCDK"
- })
- }
- // 测试是否可以调用过去
- // 通知给服务器,发放道具
- // "ws://43.143.193.23:18192"
- // Msg.connect(url, Account);
- try {
- let sendMsg = new Msg()
- sendMsg.connect(url, Account);
- logger.info(`code ${data.code} id ${data.serverId} ${url}`)
- new Promise((resolve) => {
- setTimeout(async () => {
- sendMsg.CG_TEST_PROTO(data.account, param)
- }, 1000);
- });
- } catch (error) {
- console.log(error)
- }
- ctx.body = {
- code: 0,
- msg: "success"
- }
- }
- async validCDK(ctx) {
- let data = ctx.request.body
- if (data.code.length == 10) {
- let ret = await CDK.useCDK(ctx, data.code)
- if (ret != "success") {
- ctx.body = {
- code: 1,
- msg: ret
- }
- return
- }
- }
- ctx.body = {
- code: 0,
- msg: "success"
- }
- }
- // 维护服务器,踢掉所有玩家
- async maintenance(ctx) {
- let data = ctx.request.body
- let url = await getServerList(data.serverId, 'default')
- if (!url) {
- ctx.body = {
- code: 1,
- msg: `区服id错误: serverId ${data.serverId}`
- }
- return
- }
- let param = JSON.stringify({
- type: "kickAllUser"
- })
- // Msg.connect(url, Account);
- let sendMsg = new Msg()
- sendMsg.connect(url, Account);
- new Promise((resolve) => {
- setTimeout(async () => {
- sendMsg.CG_TEST_PROTO("test", param)
- }, 1000);
- });
- ctx.body = {
- code: 0,
- msg: "success"
- }
- }
- async sendMail(ctx) {
- let data = ctx.request.body
- let url = await getServerList(data.serverId, 'default')
- if (!url) {
- ctx.body = {
- code: 1,
- msg: `区服id错误: serverId ${data.serverId}`
- }
- return
- }
- let param = JSON.stringify({
- type: "sendMail",
- mail: JSON.stringify({
- uuid: data.uuid,
- title: data.title,
- content: data.content,
- items: JSON.parse(data.items),
- expire: data.expire
- })
- })
- // Msg.connect(url, Account);
- let sendMsg = new Msg()
- sendMsg.connect(url, Account);
- new Promise((resolve) => {
- setTimeout(async () => {
- sendMsg.CG_TEST_PROTO("test", param)
- }, 1000);
- });
- ctx.body = {
- code: 0,
- msg: "success"
- }
- }
- }
- module.exports = new ApiController()
|