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

51 lines
1.8 KiB
TypeScript

import cloud from '@lafjs/cloud'
import * as crypto from 'crypto';
const db = cloud.database();
export default async function (ctx: FunctionContext) {
let uid = ctx.body.uid;
let itemid = ctx.body.itemid;
let itemCount = ctx.body.itemCount;
let itemPrice = ctx.body.itemPrice;
let user = await db.collection("users").where({ _id: uid }).getOne();
if (user.data == null) {
return { code: 0, data: null, msg: "未获取到玩家数据" };
}
const outTradeNo = `wcx_` + Math.round(Math.random() * 10 ** 13) + Date.now();
let signData = JSON.stringify({
"mode": "goods",
"offerId": "1450390549",
"buyQuantity": Number(itemCount),//购买数量
"env": 0,//正式环境
"currencyType": "CNY",//人民币
"platform": "android",
"zoneId": "1",//分区id
"productId": itemid,
"goodsPrice": Number(itemPrice),
"outTradeNo": outTradeNo,
"attach": "购买道具"
});
let session_key = user.data.session_key;
const signature = hmacSha256(session_key, signData);
let key = "4HfZwqLjVkLb6s4TfIxRGKaTxgvvL1rl";
let data = 'requestMidasPaymentGameItem' + '&' + signData;
const paySig = hmacSha256(key, data);
await db.collection("order").add({
openid: user.data.openid,
outTradeNo: outTradeNo,
itemid: itemid,
itemCount: itemCount,
goodsPrice: Number(itemPrice),
time: Date.now(),
type:"and",
state: 0,
});
// console.log("申请订单");
// console.log(outTradeNo);
// 计算哈希值并转换为十六进制字符串
return { code: 1, data: { paySig: paySig, signature: signature, signData: signData, outTradeNo: outTradeNo }, msg: "成功" }
}
function hmacSha256(sessionKey, signData) {
const hmac = crypto.createHmac('sha256', sessionKey);
hmac.update(signData);
return hmac.digest('hex');
}