import Msg from '../msg'; // 确保路径是正确的 const servers = require('../serverList.json') const CryptoJS = require("crypto-js"); const crypto = require('crypto'); const AppSecret = "67db708fdc1b3f61341db6e8551143c0" const AppKey = "57afbdc608db9aa423e1b15b321d7de0" const Account = "H1EqhbpA80jt0Jw6Q3T2"//ws请求密钥 const Order = require('../model/OrderModel') const logger = require('../log') var orderList = [] //根据区服id获取地址 const getServerList = (serverId) => { for (let i = 0; i < servers.length; i++) { if (servers[i].id == serverId) { return 'ws://' + servers[i].ip + ':' + servers[i].port } } } const callPay = async (ctx) => { let ret = { code: 0, msg: '发货失败' } let data = ctx.request.body let sign = data.sign let serverId = data.serverID let orderId = data.cpOrderID 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.msg = `订单${orderId}已经重复发货` return ret } //签名参数 let signData = Object.keys(data).filter(key => key !== 'sign'); let signStr = signData.map(key => `${data[key]}`).join(''); signStr += AppSecret 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 = getServerList(serverId) if (!url) { logger.info(`区服id错误: serverId ${serverId}`) ret.msg = `区服id错误: serverId ${serverId}` return ret } //发货 // 使用 Msg 类的 connect 方法连接到 WebSocket 服务器 Msg.connect(url, Account); let orgMemId = data.uid let orgOderId = data.cpOrder let orgProductId = data.orderId 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秒后打印出来"); Msg.CG_ASK_LOGIN(Account, 0, "", 'cn', 'CN', ctx.request.ip, params); const update_time = formatDate(new Date()) const res = await Order.updateOrderStats( orderId, 2, update_time ); if (res.affectedRows <= 0) { logger.info(`订单${orderId} 发货失败`) ret.msg = '发货失败' resolve(ret); } ret.code = 1 ret.msg = '发货成功' resolve(ret); }, 1000); }); } //验证账号 const checkUserToken = async (ctx) => { let data = ctx.request.body //签名参数 let signData = Object.keys(data).filter(key => key !== 'sign'); let signStr = signData.map(key => `${data[key]}`).join(''); signStr += AppKey let newSign = CryptoJS.MD5(signStr).toString(); console.log("signStr:", signStr) console.log("newSign:", newSign) if (data.sign != newSign) { console.log("签名错误:", signStr, newSign, data.sign) return false } return data.sign } const generateOrderNumber = () => { const date = new Date(); const year = date.getFullYear(); const month = (date.getMonth() + 1).toString().padStart(2, '0'); const day = date.getDate().toString().padStart(2, '0'); const hours = date.getHours().toString().padStart(2, '0'); const minutes = date.getMinutes().toString().padStart(2, '0'); const seconds = date.getSeconds().toString().padStart(2, '0'); const dateString = `${year}${month}${day}${hours}${minutes}${seconds}`; const randomString1 = Math.floor(Math.random() * 1090000000800) .toString() .slice(0, 4); const randomString2 = Math.floor(Math.random() * 1090000000800) .toString() .slice(0, 4); return "CP" + dateString + randomString1 + randomString2; } const formatDate = (date: Date) => { const year = date.getFullYear(); const month = (date.getMonth() + 1).toString().padStart(2, '0'); const day = date.getDate().toString().padStart(2, '0'); return `${year}-${month}-${day}`; } class ApiController { async createOrder(ctx) { let { uid, level, amount, role_id, role_name, product_id } = ctx.request.body logger.info("create params:", { "params": ctx.request.body }) 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, create_time ); if (res.affectedRows > 0) { ctx.body = { code: 0, message: '创建订单成功', data: orderId } } else { ctx.body = { code: -1, message: '创建订单失败', data: '' } } } 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) { var result = await callPay(ctx) console.log('发货结果', result) ctx.body = result } async getServerList(ctx) { let id = ctx.query.id console.log(getServerList(id)) ctx.body = servers } } module.exports = new ApiController()