|
|
@@ -6,14 +6,20 @@ const DailyRotateFile = require('winston-daily-rotate-file');
|
|
|
const path = require('path');
|
|
|
const bodyParser = require('koa-bodyparser');
|
|
|
const CryptoJS = require("crypto-js");
|
|
|
-const AppKey = "23424234" //sdk key
|
|
|
-const Url = 'ws://43.143.193.23:8192' //服务器地址
|
|
|
-const Account = "H1EqhbpA80jt0Jw6Q3T2"
|
|
|
+const axios = require('axios');
|
|
|
+const querystring = require('querystring');
|
|
|
+
|
|
|
+const AppKey = "64ba80a7e327f3f334425d8a8d897117"
|
|
|
+const AppId = "120"
|
|
|
+const 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: 'user-service' }
|
|
|
+ defaultMeta: { service: 'sdk-service' }
|
|
|
});
|
|
|
|
|
|
logger.add(new DailyRotateFile({
|
|
|
@@ -36,37 +42,67 @@ app.use(bodyParser());
|
|
|
// 将路由应用到 Koa 应用上
|
|
|
app.use(router.routes()).use(router.allowedMethods());
|
|
|
|
|
|
-// 定义一个新的路由
|
|
|
+// 支付回调
|
|
|
router.post('/callback', async (ctx, next) => {
|
|
|
let ret = "FAILURE"
|
|
|
- if(callPay(ctx)){
|
|
|
+ var result = await callPay(ctx)
|
|
|
+ if(result){
|
|
|
ret = "SUCCESS"
|
|
|
}
|
|
|
ctx.body = 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"
|
|
|
+})
|
|
|
|
|
|
app.listen(3000);
|
|
|
|
|
|
|
|
|
|
|
|
//支付回调逻辑
|
|
|
-const callPay = (ctx)=>{
|
|
|
+const callPay = async(ctx)=>{
|
|
|
|
|
|
let data = ctx.request.body
|
|
|
- logger.info("pay callback params:",data)
|
|
|
- let appId = data.app_id
|
|
|
- let cpOrderId = data.cp_order_id
|
|
|
- let memId = data.mem_id
|
|
|
- let orderId = data.order_id
|
|
|
- let orderStatus = data.order_status
|
|
|
- let payTime = data.pay_time
|
|
|
- let productId = data.product_id
|
|
|
- let productName = data.product_name
|
|
|
- let productPrice = data.product_price
|
|
|
- let ext = data.ext
|
|
|
+
|
|
|
+ logger.info("pay callback params:",{"url":ctx.href,"params":data})
|
|
|
+ let appId = querystring.escape(data.app_id)
|
|
|
+ let cpOrderId = querystring.escape(data.cp_order_id)
|
|
|
+ let memId = querystring.escape(data.mem_id)
|
|
|
+ let orderId = querystring.escape(data.order_id)
|
|
|
+ let orderStatus = querystring.escape(data.order_status)
|
|
|
+ let payTime = querystring.escape(data.pay_time)
|
|
|
+ let productId = querystring.escape(data.product_id)
|
|
|
+ let productName = querystring.escape(data.product_name)
|
|
|
+ let productPrice = querystring.escape(data.product_price)
|
|
|
+ let ext = querystring.escape(data.ext)
|
|
|
let sign = data.sign
|
|
|
- let signStr = `app_id=${appId}&cp_order_id=${cpOrderId}&mem_id=${memId}}&order_id=${orderId}&order_status=${orderStatus}&pay_time=${payTime}&product_id=${productId}&product_name=${productName}&product_price=${productPrice}&app_key=`
|
|
|
+ let signStr = `app_id=${appId}&cp_order_id=${cpOrderId}&ext=${ext}&mem_id=${memId}&order_id=${orderId}&order_status=${orderStatus}&pay_time=${payTime}&product_id=${productId}&product_name=${productName}&product_price=${productPrice}&app_key=`
|
|
|
signStr += AppKey
|
|
|
let newSign = CryptoJS.MD5(signStr).toString();
|
|
|
console.log("signStr:",signStr)
|
|
|
@@ -75,23 +111,68 @@ const callPay = (ctx)=>{
|
|
|
console.log("签名错误:",signStr,newSign,sign)
|
|
|
return false
|
|
|
}
|
|
|
+ console.log(111,orderList)
|
|
|
+ if(orderList.includes(data.order_id)){
|
|
|
+ logger.error("订单号无效",data.order_id)
|
|
|
+ return false
|
|
|
+ }
|
|
|
|
|
|
//发货
|
|
|
// 使用 Msg 类的 connect 方法连接到 WebSocket 服务器
|
|
|
Msg.connect(Url, Account);
|
|
|
|
|
|
+ let orgMemId = data.mem_id
|
|
|
+ let orgOderId = data.order_id
|
|
|
+ let orgProductId = data.product_id
|
|
|
+ let orgExt = data.ext
|
|
|
+ let orgProductPrice = data.product_price
|
|
|
// 在适当的时机,调用 CG_ASK_LOGIN 方法
|
|
|
- let params = `{"account":${memId},"order":${orderId},"id":${productId},"cnt":${ext},"money":${productPrice}}`
|
|
|
+ let params = `{"account":"${orgMemId}","order":"${orgOderId}","id":${orgProductId},"cnt":100,"money":${orgProductPrice}}`
|
|
|
|
|
|
setTimeout(function() {
|
|
|
console.log("这个消息将在3秒后打印出来");
|
|
|
Msg.CG_ASK_LOGIN(Account, 0, "", 'cn', 'CN',Url, params);
|
|
|
}, 3000);
|
|
|
-
|
|
|
+ orderList.push(data.order_id)
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
|
|
|
+//验证账号
|
|
|
+const checkUserToken = async(ctx)=>{
|
|
|
+ let id = AppId
|
|
|
+ let key = AppKey
|
|
|
+ let memId = ctx.request.body.mem_id
|
|
|
+ let userToken = ctx.request.body.user_token
|
|
|
+ let signStr = `app_id=${id}&mem_id=${memId}&user_token=${userToken}&app_key=${key}`
|
|
|
+ console.log("signStr",signStr)
|
|
|
+ let sign = CryptoJS.MD5(signStr).toString()
|
|
|
+ let params = {
|
|
|
+ "app_id": AppId,
|
|
|
+ "mem_id":memId,
|
|
|
+ "user_token":userToken,
|
|
|
+ "sign":sign
|
|
|
+ }
|
|
|
+ logger.info("req params",{"url":SdkUrl,"params":params})
|
|
|
+ var ret = axios.post(SdkUrl, params)
|
|
|
+
|
|
|
+ .then(function (response) {
|
|
|
+ // 处理成功的情况
|
|
|
+ logger.info("sdk resp data",response.data)
|
|
|
+ if(response.data.status ==1){
|
|
|
+ return sign
|
|
|
+ }
|
|
|
+ return ""
|
|
|
+
|
|
|
+ })
|
|
|
+ .catch(function (error) {
|
|
|
+ // 处理错误的情况
|
|
|
+ logger.error("请求sdk服务器错误:"+error.response.statusText)
|
|
|
+ return ""
|
|
|
+ });
|
|
|
+ return ret
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
|
|
|
|