ApiController.ts 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. import Msg from '../msg'; // 确保路径是正确的
  2. const servers = require('../serverList.json')
  3. const CryptoJS = require("crypto-js");
  4. const crypto = require('crypto');
  5. const AppSecret = "67db708fdc1b3f61341db6e8551143c0"
  6. const AppKey = "57afbdc608db9aa423e1b15b321d7de0"
  7. const Account = "H1EqhbpA80jt0Jw6Q3T2"//ws请求密钥
  8. const Order = require('../model/OrderModel')
  9. const logger = require('../log')
  10. var orderList = []
  11. //根据区服id获取地址
  12. const getServerList = (serverId) => {
  13. for (let i = 0; i < servers.length; i++) {
  14. if (servers[i].id == serverId) {
  15. return 'ws://' + servers[i].ip + ':' + servers[i].port
  16. }
  17. }
  18. }
  19. const callPay = async (ctx) => {
  20. let data = ctx.request.body
  21. let sign = data.sign
  22. let serverId = data.serverId
  23. logger.info("pay callback params:", { "url": ctx.href, "params": data })
  24. //签名参数
  25. let signData = Object.keys(data).filter(key => key !== 'sign');
  26. let signStr = signData.map(key => `${data[key]}`).join('');
  27. signStr += AppSecret
  28. let newSign = CryptoJS.MD5(signStr).toString();
  29. console.log("signStr:", signStr)
  30. console.log("newSign:", newSign)
  31. if (sign != newSign) {
  32. console.log("签名错误:", signStr, newSign, sign)
  33. return false
  34. }
  35. console.log(111, orderList)
  36. if (orderList.includes(data.orderId)) {
  37. logger.error("订单号无效", data.orderId)
  38. return false
  39. }
  40. let url = getServerList(serverId)
  41. if (!url) {
  42. console.log("区服id错误")
  43. return false
  44. }
  45. //发货
  46. // 使用 Msg 类的 connect 方法连接到 WebSocket 服务器
  47. Msg.connect(url, Account);
  48. let orgMemId = data.uid
  49. let orgOderId = data.cpOrder
  50. let orgProductId = data.orderId
  51. let orgExt = data.cText
  52. let orgProductPrice = data.skuPrice
  53. // 在适当的时机,调用 CG_ASK_LOGIN 方法
  54. let params = `{"account":"${orgMemId}","order":"${orgOderId}","id":${orgProductId},"cnt":100,"money":${orgProductPrice}}`
  55. setTimeout(function () {
  56. console.log("这个消息将在3秒后打印出来");
  57. Msg.CG_ASK_LOGIN("payCallback", 0, "", 'cn', 'CN', ctx.request.ip, params);
  58. }, 3000);
  59. orderList.push(data.order_id)
  60. return true
  61. }
  62. //验证账号
  63. const checkUserToken = async (ctx) => {
  64. let data = ctx.request.body
  65. //签名参数
  66. let signData = Object.keys(data).filter(key => key !== 'sign');
  67. let signStr = signData.map(key => `${data[key]}`).join('');
  68. signStr += AppKey
  69. let newSign = CryptoJS.MD5(signStr).toString();
  70. console.log("signStr:", signStr)
  71. console.log("newSign:", newSign)
  72. if (data.sign != newSign) {
  73. console.log("签名错误:", signStr, newSign, data.sign)
  74. return false
  75. }
  76. return data.sign
  77. }
  78. const generateOrderNumber = () => {
  79. const date = new Date();
  80. const year = date.getFullYear();
  81. const month = (date.getMonth() + 1).toString().padStart(2, '0');
  82. const day = date.getDate().toString().padStart(2, '0');
  83. const hours = date.getHours().toString().padStart(2, '0');
  84. const minutes = date.getMinutes().toString().padStart(2, '0');
  85. const seconds = date.getSeconds().toString().padStart(2, '0');
  86. const datestring = `${year}${month}${day}${hours}${minutes}${seconds}`;
  87. const randomString1 = Math.floor(Math.random() * 1090000000800)
  88. .toString()
  89. .slice(0, 4);
  90. const randomString2 = Math.floor(Math.random() * 1090000000800)
  91. .toString()
  92. .slice(0, 4);
  93. return datestring + randomString1 + randomString2;
  94. }
  95. const formatDate = (date: Date) => {
  96. const year = date.getFullYear();
  97. const month = (date.getMonth() + 1).toString().padStart(2, '0');
  98. const day = date.getDate().toString().padStart(2, '0');
  99. return `${year}-${month}-${day}`;
  100. }
  101. class ApiController {
  102. async createOrder(ctx) {
  103. let {
  104. uid,
  105. level,
  106. amount,
  107. role_id,
  108. role_name,
  109. product_id
  110. } = ctx.request.body
  111. logger.info("create params:", {"params": ctx.request.body })
  112. const orderId = generateOrderNumber(); // 生成一个长度为8的订单号
  113. const create_time = formatDate(new Date())
  114. const res = await Order.createOrder(
  115. orderId,
  116. uid,
  117. level,
  118. amount,
  119. role_id,
  120. role_name,
  121. product_id,
  122. create_time
  123. );
  124. if (res.affectedRows > 0) {
  125. ctx.body = { code: 0, message: '创建订单成功', data: orderId }
  126. } else {
  127. ctx.body = { code: -1, message: '创建订单失败', data: '' }
  128. }
  129. }
  130. async checkUserToken(ctx) {
  131. const result = await checkUserToken(ctx);
  132. let data = { "status": false, "sign": "" }
  133. if (result) {
  134. data.status = true
  135. data.sign = result
  136. }
  137. ctx.body = data
  138. }
  139. async callPay(ctx) {
  140. let ret = {
  141. code: 0,
  142. msg: '发货失败'
  143. }
  144. var result = await callPay(ctx)
  145. if (result) {
  146. ret.code = 1;
  147. ret.msg = '发货成功';
  148. }
  149. ctx.body = JSON.stringify(ret)
  150. }
  151. async getServerList(ctx) {
  152. let id = ctx.query.id
  153. console.log(getServerList(id))
  154. ctx.body = servers
  155. }
  156. }
  157. module.exports = new ApiController()