|
@@ -1,198 +1,13 @@
|
|
|
-import Koa from 'koa';
|
|
|
|
|
-import Router from '@koa/router';
|
|
|
|
|
-import Msg from './msg'; // 确保路径是正确的
|
|
|
|
|
-const winston = require('winston');
|
|
|
|
|
-const DailyRotateFile = require('winston-daily-rotate-file');
|
|
|
|
|
-const path = require('path');
|
|
|
|
|
|
|
+// 导入koa
|
|
|
|
|
+const Koa = require('koa')
|
|
|
const bodyParser = require('koa-bodyparser');
|
|
const bodyParser = require('koa-bodyparser');
|
|
|
-const CryptoJS = require("crypto-js");
|
|
|
|
|
-const axios = require('axios');
|
|
|
|
|
-const querystring = require('querystring');
|
|
|
|
|
-const servers = require('./serverList.json')
|
|
|
|
|
-
|
|
|
|
|
-const AppSecret = "67db708fdc1b3f61341db6e8551143c0"
|
|
|
|
|
-const AppKey = "57afbdc608db9aa423e1b15b321d7de0"
|
|
|
|
|
-const AppId = "120"
|
|
|
|
|
-// var Url = 'ws://43.198.254.107:8192' //服务器地址
|
|
|
|
|
-const Account = "H1EqhbpA80jt0Jw6Q3T2"//ws请求密钥
|
|
|
|
|
-const SdkUrl = "https://sdk.87game1.com/cp/user/check"
|
|
|
|
|
-var orderList = []
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-const logger = winston.createLogger({
|
|
|
|
|
- level: 'info',
|
|
|
|
|
- format: winston.format.json(),
|
|
|
|
|
- defaultMeta: { service: 'sdk-service' }
|
|
|
|
|
-});
|
|
|
|
|
-
|
|
|
|
|
-logger.add(new DailyRotateFile({
|
|
|
|
|
- dirname: path.join(__dirname, 'logs'),
|
|
|
|
|
- filename: '%DATE%.log',
|
|
|
|
|
- datePattern: 'YYYY-MM-DD-HH',
|
|
|
|
|
- zippedArchive: true,
|
|
|
|
|
- maxSize: '20m',
|
|
|
|
|
- maxFiles: '14d'
|
|
|
|
|
-}));
|
|
|
|
|
-
|
|
|
|
|
-logger.add(new winston.transports.Console({
|
|
|
|
|
- format: winston.format.simple(),
|
|
|
|
|
-}));
|
|
|
|
|
-
|
|
|
|
|
-const app = new Koa();
|
|
|
|
|
-const router = new Router();
|
|
|
|
|
-
|
|
|
|
|
-app.use(bodyParser());
|
|
|
|
|
-// 将路由应用到 Koa 应用上
|
|
|
|
|
-app.use(router.routes()).use(router.allowedMethods());
|
|
|
|
|
-
|
|
|
|
|
-// 支付回调
|
|
|
|
|
-router.post('/callback', async (ctx, next) => {
|
|
|
|
|
- let ret = {
|
|
|
|
|
- code: 0,
|
|
|
|
|
- msg: '发货失败'
|
|
|
|
|
- }
|
|
|
|
|
- var result = await callPay(ctx)
|
|
|
|
|
- if(result){
|
|
|
|
|
- ret.code = 1;
|
|
|
|
|
- ret.msg = '发货成功';
|
|
|
|
|
- }
|
|
|
|
|
- ctx.body = JSON.stringify(ret)
|
|
|
|
|
-})
|
|
|
|
|
-
|
|
|
|
|
-//账号验证
|
|
|
|
|
-router.post("/checkUserToken",async (ctx,next)=>{
|
|
|
|
|
- const result = await checkUserToken(ctx);
|
|
|
|
|
- let data = {"status":false,"sign":""}
|
|
|
|
|
- if(result){
|
|
|
|
|
- data.status = true
|
|
|
|
|
- data.sign = result
|
|
|
|
|
- }
|
|
|
|
|
- ctx.body = data
|
|
|
|
|
-})
|
|
|
|
|
-
|
|
|
|
|
-// router.post('/testCallback', async (ctx, next) => {
|
|
|
|
|
-
|
|
|
|
|
-// //发货
|
|
|
|
|
-// // 使用 Msg 类的 connect 方法连接到 WebSocket 服务器
|
|
|
|
|
-// Msg.connect(Url, Account);
|
|
|
|
|
-
|
|
|
|
|
-// // 在适当的时机,调用 CG_ASK_LOGIN 方法
|
|
|
|
|
-// let params = `{"account":"23417","order":"123456","id":102,"cnt":100,"money":6}`
|
|
|
|
|
-
|
|
|
|
|
-// setTimeout(function() {
|
|
|
|
|
-// console.log("这个消息将在3秒后打印出来");
|
|
|
|
|
-// Msg.CG_ASK_LOGIN(Account, 0, "", 'cn', 'CN',Url, params);
|
|
|
|
|
-// }, 3000);
|
|
|
|
|
-
|
|
|
|
|
-// ctx.body = "ok"
|
|
|
|
|
-// })
|
|
|
|
|
-
|
|
|
|
|
-router.get('/serverList',async (ctx,next)=>{
|
|
|
|
|
- let id = ctx.query.id
|
|
|
|
|
- console.log(getServerList(id))
|
|
|
|
|
- ctx.body = servers
|
|
|
|
|
-
|
|
|
|
|
-})
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-app.listen(3000);
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-//根据区服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 data = ctx.request.body
|
|
|
|
|
- let sign = data.sign
|
|
|
|
|
- let serverId = data.serverId
|
|
|
|
|
-
|
|
|
|
|
- logger.info("pay callback params:",{"url":ctx.href,"params":data})
|
|
|
|
|
-
|
|
|
|
|
- //签名参数
|
|
|
|
|
- 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){
|
|
|
|
|
- console.log("签名错误:",signStr,newSign,sign)
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- console.log(111,orderList)
|
|
|
|
|
- if(orderList.includes(data.orderId)){
|
|
|
|
|
- logger.error("订单号无效",data.orderId)
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- let url = getServerList(serverId)
|
|
|
|
|
- if(!url){
|
|
|
|
|
- console.log("区服id错误")
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- //发货
|
|
|
|
|
- // 使用 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}}`
|
|
|
|
|
-
|
|
|
|
|
- setTimeout(function() {
|
|
|
|
|
- console.log("这个消息将在3秒后打印出来");
|
|
|
|
|
- Msg.CG_ASK_LOGIN("payCallback", 0, "", 'cn', 'CN',ctx.request.ip, params);
|
|
|
|
|
- }, 3000);
|
|
|
|
|
- orderList.push(data.order_id)
|
|
|
|
|
- return true
|
|
|
|
|
-
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-//验证账号
|
|
|
|
|
-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 router = require('./router/index')
|
|
|
|
|
+// 创建一个koa对象
|
|
|
|
|
+const app = new Koa()
|
|
|
|
|
+
|
|
|
|
|
+app.use(bodyParser());//中间件
|
|
|
|
|
+app.use(router.routes()); //路由
|
|
|
|
|
+//监听端口
|
|
|
|
|
+const port = 3000
|
|
|
|
|
+app.listen(port);
|
|
|
|
|
+console.log(`启动成功,服务端口为:${port}`)
|