125 lines
4.1 KiB
TypeScript
125 lines
4.1 KiB
TypeScript
import cloud from '@lafjs/cloud';
|
||
const db = cloud.database();
|
||
const ThinkingData = require('thinkingdata-node');
|
||
export default async function (ctx: FunctionContext) {
|
||
let data = JSON.parse(ctx.body.MiniGame.Payload);
|
||
let OutTradeNo = data.OutTradeNo;
|
||
let res = await db.collection("order").where({ outTradeNo: OutTradeNo }).getOne();
|
||
if(res.data){
|
||
if(res.data.state!=2){
|
||
await db.collection("order").where({ outTradeNo: OutTradeNo }).update({ state: 1 });
|
||
let user = await db.collection("users").where({ openid: res.data.openid}).getOne();
|
||
sead(res.data, user.data, getClientIp(ctx));
|
||
switch (res.data.itemid) {
|
||
case "starter_pack":
|
||
db.collection("users").where({ _id:user.data._id}).update({ starter_packState: 1, pay_user: true });
|
||
break;
|
||
}
|
||
if (!user.data.pay_user) {
|
||
db.collection("users").where({ _id:user.data._id }).update({ pay_user: true });
|
||
}
|
||
}
|
||
}
|
||
|
||
// let query={
|
||
// signature: '1c1b5c1c72058436e2f1214e6aeafd258e50acd4',
|
||
// timestamp: '1751291889',
|
||
// nonce: '3122546041'
|
||
// }
|
||
/**
|
||
* ToUserName: 'gh_1092576a6ce7',
|
||
FromUserName: 'orm8I7IA-pMesygmTc5HPufGZHvA',
|
||
CreateTime: 1751292233,
|
||
MsgType: 'event',
|
||
MiniGame: {
|
||
Payload: '{"OpenId":"orm8I7BRTjhdQ3Mz9V9cg1jzTUcQ","OutTradeNo":"wcx_92778691620421751292218408","WeChatPayInfo":{"MchOrderNo":"20250630714915544","TransactionId":"4200002678202506307565098431"},"Env":0,"GoodsInfo":{"ProductId":"10011","Quantity":1,"ZoneId":"1","OrigPrice":100,"ActualPrice":100,"Attach":"购买道具","OrderSource":1},"PayChannel":0}',
|
||
PayEventSig: 'ecdaf472c239894706e28ab941d2aebf727b5bed45fe4073c645e922b6eefc1a',
|
||
IsMock: false
|
||
},
|
||
Event: 'minigame_game_pay_goods_deliver_notify'
|
||
*/
|
||
return { "ErrCode": 0, "ErrMsg": "Success" };
|
||
|
||
}
|
||
|
||
async function sead1(outTradeNo) {
|
||
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) {
|
||
let userInfo = await db.collection("users").where({ openid: res.data.openid }).getOne();
|
||
await sead(outTradeNo,userInfo.data,"")
|
||
console.log("1");
|
||
return {
|
||
code: 1, data: {
|
||
pay_state: 1,
|
||
}, msg: "已领取奖励"
|
||
}
|
||
} else {
|
||
return {
|
||
code: 1, data: {
|
||
pay_state: 1,
|
||
}, msg: "充值未成功"
|
||
}
|
||
};
|
||
}
|
||
|
||
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) {
|
||
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;
|
||
} |