173 lines
5.8 KiB
TypeScript
173 lines
5.8 KiB
TypeScript
import cloud from '@lafjs/cloud'
|
||
import * as crypto from 'crypto';
|
||
const db = cloud.database();
|
||
const ThinkingData = require('thinkingdata-node');
|
||
export default async function (ctx: FunctionContext) {
|
||
let uid = ctx.body.uid;
|
||
let outTradeNo = ctx.body.outTradeNo;
|
||
let user = await db.collection("users").where({ _id: uid }).getOne();
|
||
if (user.data == null) {
|
||
return { code: 0, data: null, msg: "未获取到玩家数据" };
|
||
}
|
||
let res = await db.collection("order").where({ outTradeNo: outTradeNo }).getOne();
|
||
if (res.data.state == 1) {
|
||
return {
|
||
code: 1, data: {
|
||
pay_state: 2
|
||
}, msg: "成功"
|
||
};
|
||
} else if (res.data.state == 2) {
|
||
return {
|
||
code: 1, data: {
|
||
pay_state: 1,
|
||
}, msg: "已领取奖励"
|
||
}
|
||
} else {
|
||
return {
|
||
code: 0, data: {
|
||
pay_state: 1,
|
||
}, msg: "充值未成功"
|
||
}
|
||
};
|
||
// let time =Date.now();
|
||
// let uid = ctx.body.uid;
|
||
// let outTradeNo = ctx.body.outTradeNo;
|
||
// let user = await db.collection("users").where({ _id: uid }).getOne();
|
||
// if (user.data == null) {
|
||
// return { code: 0, data: null, msg: "未获取到玩家数据" };
|
||
// }
|
||
|
||
// let res = await db.collection("order").where({ outTradeNo: outTradeNo }).getOne();
|
||
// if (res.data.state == 1) {
|
||
// return { code: 1, data:{
|
||
// pay_state:2
|
||
// }, msg: "成功" };
|
||
// }else{
|
||
// return {code:1,data:{
|
||
// pay_state:1,
|
||
// },msg:"失败"}
|
||
// };
|
||
// let session_key = user.data.session_key;
|
||
// let token = cloud.shared.get('wxaccess_token');
|
||
// if (!token) {
|
||
// return { code: 0, data: null, msg: "token获取失败" };
|
||
// }
|
||
// const info = {
|
||
// "openid": user.data.openid,
|
||
// "offer_id": "1450390549",
|
||
// "ts": Math.floor(Date.now() / 1000),
|
||
// "zone_id": "1",
|
||
// "env": 0,
|
||
// "out_trade_no": outTradeNo,
|
||
// "biz_id": 2
|
||
// }
|
||
// const signature = hmacSha256(session_key, JSON.stringify(info));
|
||
// const key = "4HfZwqLjVkLb6s4TfIxRGKaTxgvvL1rl";
|
||
// let data = '/wxa/game/queryorderinfo' + '&' + JSON.stringify(info);
|
||
// const pay_sig = hmacSha256(key, data);
|
||
// const url = `https://api.weixin.qq.com/wxa/game/queryorderinfo?access_token=${token}&signature=${signature}&sig_method=hmac_sha256&pay_sig=${pay_sig}`;
|
||
// const response = await cloud.fetch(url, {
|
||
// url: url,
|
||
// method: 'POST',
|
||
// headers: {
|
||
// 'Content-Type': 'application/json;charset=utf-8'
|
||
// },
|
||
// data: JSON.stringify(info)
|
||
// })
|
||
// // console.log("查询充值结果");
|
||
// // console.log(response.data);
|
||
// let ret = await db.collection("order").where({ "outTradeNo": outTradeNo }).getOne();
|
||
// let payment_name = "";
|
||
// if (ret.data) {
|
||
// if(propName[ret.data.itemid]){
|
||
// payment_name = propName[ret.data.itemid];
|
||
// }else{
|
||
// payment_name = ret.data.itemid;
|
||
// }
|
||
// }
|
||
// response.data.payment_name=payment_name;
|
||
// response.data.goodsPrice=ret.data.goodsPrice;
|
||
// //console.error("充值结果");
|
||
// //console.log(response.data);
|
||
// if (response.data.pay_state==2){
|
||
// let res = await db.collection("order").where({ outTradeNo:outTradeNo}).getOne();
|
||
// // console.log(res);
|
||
// // console.log
|
||
// if(res.data&&res.data.state==0){
|
||
// await db.collection("order").where({ outTradeNo:outTradeNo}).update({ state: 1 });
|
||
// sead(res.data, user.data, getClientIp(ctx));
|
||
// console.error("充值结果:"+(Date.now()-time));
|
||
// }
|
||
// }
|
||
//return { code: 1, data: response.data, msg: "成功" };
|
||
}
|
||
const propName = {
|
||
"金币包1": "gold_1",
|
||
"金币包2": "gold_2",
|
||
"金币包3": "gold_3",
|
||
"金币包4": "gold_4",
|
||
"金币包5": "gold_5",
|
||
"金币包6": "gold_6",
|
||
"无限体力组合包1": "unlimited_health_bundle_1",
|
||
"无限体力组合包2": "unlimited_health_bundle_2",
|
||
"无限体力组合包3": "unlimited_health_bundle_3",
|
||
"局内购买冻结": "freeze_in_game",
|
||
"局内购买锤子": "hammer_in_game",
|
||
"局内购买魔棒": "wand_in_gamerefill",
|
||
"补满体力": "health",
|
||
"新手礼包": "starter_pack",
|
||
};
|
||
function hmacSha256(sessionKey, signData) {
|
||
const hmac = crypto.createHmac('sha256', sessionKey);
|
||
hmac.update(signData);
|
||
return hmac.digest('hex');
|
||
}
|
||
const getClientIp = (req) => {
|
||
return (
|
||
req.headers['x-forwarded-for']?.split(',')[0]?.trim() || // 代理链中的第一个 IP
|
||
req.headers['x-real-ip'] || // Nginx 配置的 real-ip
|
||
req.socket.remoteAddress // 原始 IP(可能是代理)
|
||
);
|
||
};
|
||
async function sead(order, userInfo, ip) {
|
||
console.error("上传数数");
|
||
//db.collection("susu").add({order: order,time: Date.now()});
|
||
if (!userInfo.distinctId) {
|
||
console.log("未找到distinctId无法上传数数")
|
||
return;
|
||
}
|
||
let id = '87d18958cea145f29d3265470ecd3486';
|
||
if (userInfo.isDebug != "true") {
|
||
id = '121591378fc1423893deb12041413eb3';
|
||
}
|
||
let teSDK = ThinkingData.initWithBatchMode(id, 'https://data.nika4fun.com/sync_data', {
|
||
dryRun: false, // report data to TE or not
|
||
deviceId: "123456789",//设备唯一标识
|
||
});
|
||
let trackEvent = {
|
||
accountId: order.openid,
|
||
distinctId: userInfo.distinctId,//访客id
|
||
event: 'payment',
|
||
time: new Date(Date.now() + 8 * 3600000),
|
||
ip: ip,
|
||
properties: {
|
||
order_id: order.outTradeNo,
|
||
pay_amount: order.goodsPrice,
|
||
payment_name: order.itemid,
|
||
payment_num: order.itemCount,
|
||
payment_type: "Android",
|
||
current_level: userInfo.levelAmount, //当前关卡等级 number
|
||
current_health: userInfo.healthAmount, //当前体力值
|
||
tmp_coin: userInfo.coinAmount,//当前金币
|
||
version: "1.6",
|
||
user_id: userInfo._id, //用户id
|
||
pay_user: userInfo.pay_user,
|
||
register_time: userInfo.register_time
|
||
},
|
||
callback(e) {if (e) {}}
|
||
};
|
||
teSDK.track(trackEvent);
|
||
teSDK.close();
|
||
return;
|
||
}
|