MatchMaster/server/laf-cloud/functions/wx/payCallBack.ts

125 lines
4.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}