| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- 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()
|