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