更新战令
This commit is contained in:
parent
1dd0e9f23d
commit
8e4a978918
|
|
@ -14,11 +14,10 @@ import {
|
||||||
const JungleConfig: any = JungleConfigModule as any;
|
const JungleConfig: any = JungleConfigModule as any;
|
||||||
const db = cloud.database();
|
const db = cloud.database();
|
||||||
import crypto from 'crypto';
|
import crypto from 'crypto';
|
||||||
const mchid = process.env.WX_MCH_ID;//商户id
|
const mchid = "1719895437";//商户id
|
||||||
const serialNo = process.env.WX_MCH_CERT_SERIAL_NO;//证书序列号
|
const serialNo = "2A97ED6ED441E55600EBC8830B9EC889ED41496E";//证书序列号
|
||||||
const ThinkingData = require('thinkingdata-node');
|
const ThinkingData = require('thinkingdata-node');
|
||||||
import Ip2region from 'ip2region';
|
import Ip2region from 'ip2region';
|
||||||
import { refreshTaskData } from "@/dailyTaskService";
|
|
||||||
const query = new Ip2region();
|
const query = new Ip2region();
|
||||||
const canIos = false;
|
const canIos = false;
|
||||||
const version = "9.9.99";
|
const version = "9.9.99";
|
||||||
|
|
@ -173,11 +172,39 @@ export default async function (ctx: FunctionContext) {
|
||||||
abTests = await getActiveABAssignments(openid, userData.abTests, false);
|
abTests = await getActiveABAssignments(openid, userData.abTests, false);
|
||||||
shouldPersistABTests = JSON.stringify(userData.abTests) !== JSON.stringify(abTests);
|
shouldPersistABTests = JSON.stringify(userData.abTests) !== JSON.stringify(abTests);
|
||||||
}
|
}
|
||||||
const task = refreshTaskData(
|
let taskTime = userData.taskTime || 0;
|
||||||
userData.task,
|
let task = userData.task;
|
||||||
userData._id,
|
if (task) {
|
||||||
Number(userData.levelAmount) + 1 || 1,
|
task = JSON.parse(task);
|
||||||
).data;
|
} else {
|
||||||
|
task = {
|
||||||
|
levelPass: {
|
||||||
|
value: 0,
|
||||||
|
state: 0,
|
||||||
|
},
|
||||||
|
share: {
|
||||||
|
value: 0,
|
||||||
|
state: 0,
|
||||||
|
},
|
||||||
|
useEnergy: {
|
||||||
|
value: 0,
|
||||||
|
state: 0,
|
||||||
|
},
|
||||||
|
useProp: {
|
||||||
|
value: 0,
|
||||||
|
state: 0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const now = new Date(Date.now() + 8 * 3600000);
|
||||||
|
now.setHours(0, 0, 0, 0); // 直接修改当前Date对象
|
||||||
|
const timestamp = now.getTime();
|
||||||
|
if (timestamp > taskTime) {
|
||||||
|
for (var key in task) {
|
||||||
|
task[key].value = 0;
|
||||||
|
task[key].state = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
const loginUpdate: any = {
|
const loginUpdate: any = {
|
||||||
session_key: session_key,
|
session_key: session_key,
|
||||||
...(unionid ? { unionid } : {}),
|
...(unionid ? { unionid } : {}),
|
||||||
|
|
@ -185,7 +212,7 @@ export default async function (ctx: FunctionContext) {
|
||||||
isDebug: isDebug,
|
isDebug: isDebug,
|
||||||
isFirst: false,
|
isFirst: false,
|
||||||
task: JSON.stringify(task),
|
task: JSON.stringify(task),
|
||||||
taskTime: Date.now(),
|
taskTime: Date.now() + 8 * 3600000,
|
||||||
token: token,
|
token: token,
|
||||||
...migrationUpdate,
|
...migrationUpdate,
|
||||||
};
|
};
|
||||||
|
|
@ -214,19 +241,6 @@ export default async function (ctx: FunctionContext) {
|
||||||
}
|
}
|
||||||
await delayExecution(0.1);
|
await delayExecution(0.1);
|
||||||
userData = await getUserData(dbname, openid);
|
userData = await getUserData(dbname, openid);
|
||||||
const ensuredTask = refreshTaskData(
|
|
||||||
userData.task,
|
|
||||||
userData._id,
|
|
||||||
Number(userData.levelAmount) + 1 || 1,
|
|
||||||
);
|
|
||||||
if (ensuredTask.changed) {
|
|
||||||
userData.task = JSON.stringify(ensuredTask.data);
|
|
||||||
userData.taskTime = Date.now();
|
|
||||||
await db.collection(dbname).where({ _id: userData._id }).update({
|
|
||||||
task: userData.task,
|
|
||||||
taskTime: userData.taskTime,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
let outTradeNo: any = [];
|
let outTradeNo: any = [];
|
||||||
if (!isNewUser) {
|
if (!isNewUser) {
|
||||||
let res = null;
|
let res = null;
|
||||||
|
|
@ -244,7 +258,9 @@ export default async function (ctx: FunctionContext) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (dbname == "users") {
|
if (dbname == "users") {
|
||||||
userData.outTradeNo = outTradeNo;
|
// 旧客户端不处理新战令订单,其他商品补发保持原流程。
|
||||||
|
userData.outTradeNo = Number(ctx.body.passVersion) === 2 ? outTradeNo : outTradeNo.filter(o =>
|
||||||
|
!(o.passVersion === 2 || o.itemid === 'battlepass_30' || o.itemid === 'battlepass_12'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!userData.onlyId) {
|
if (!userData.onlyId) {
|
||||||
|
|
@ -286,6 +302,7 @@ export default async function (ctx: FunctionContext) {
|
||||||
function stringToHash(input: string, algorithm: 'sha1' | 'sha256' | 'sha512' = 'sha256'): string {
|
function stringToHash(input: string, algorithm: 'sha1' | 'sha256' | 'sha512' = 'sha256'): string {
|
||||||
return createHash(algorithm).update(input).digest('hex');
|
return createHash(algorithm).update(input).digest('hex');
|
||||||
}
|
}
|
||||||
|
|
||||||
async function hasUserOrder(openid: string): Promise<boolean> {
|
async function hasUserOrder(openid: string): Promise<boolean> {
|
||||||
if (!openid) {
|
if (!openid) {
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -425,11 +442,11 @@ async function getIosOrder(openid, ctx) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// 月卡补单确认成功后进入待客户端补发状态。
|
// 月卡补单确认成功后进入待客户端补发状态。
|
||||||
if (res.data[i].itemid === "month_Card" || jungleTier) {
|
if (res.data[i].itemid === "month_Card" || jungleTier || /^battlepass(?:_30|_12)?$/.test(res.data[i].itemid)) {
|
||||||
await db.collection("order").where({ outTradeNo: res.data[i].outTradeNo }).update({ state: 1 });
|
await db.collection("order").where({ outTradeNo: res.data[i].outTradeNo }).update({ state: 1 });
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (Date.now() - res.data[i].time > 3 * 3600000) {
|
if (!res.data[i].passVersion && Date.now() - res.data[i].time > 3 * 3600000) {
|
||||||
let ret = await db.collection('order').where({ outTradeNo: res.data[i].outTradeNo }).remove({ multi: true });
|
let ret = await db.collection('order').where({ outTradeNo: res.data[i].outTradeNo }).remove({ multi: true });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import cloud from '@lafjs/cloud'
|
import cloud from '@lafjs/cloud'
|
||||||
const db = cloud.database();
|
const db = cloud.database();
|
||||||
import Utils from "@/Utils";
|
import Utils from "@/Utils";
|
||||||
|
import { legacyPassView } from '@/passCheckUpgrade';
|
||||||
export default async function (ctx: FunctionContext) {
|
export default async function (ctx: FunctionContext) {
|
||||||
const action = ctx.body.action;
|
const action = ctx.body.action;
|
||||||
const uid = ctx.body.uid;
|
const uid = ctx.body.uid;
|
||||||
|
|
@ -32,7 +33,7 @@ export default async function (ctx: FunctionContext) {
|
||||||
let ret = await db.collection(dbname).where({ _id: uid }).update({ passCheck: passCheck });
|
let ret = await db.collection(dbname).where({ _id: uid }).update({ passCheck: passCheck });
|
||||||
return { code: 1, data: { passCheck: passCheck }, msg: "用户数据更新成功" }
|
return { code: 1, data: { passCheck: passCheck }, msg: "用户数据更新成功" }
|
||||||
case 'read':
|
case 'read':
|
||||||
let passCheck1 = res.data?.passCheck || null;
|
let passCheck1 = legacyPassView(res.data?.passCheck || null, res.data?.passCheckUpgrade);
|
||||||
let time = await db.collection("idcount").where({ _id: "69fac1528463a95668c5e5db" }).getOne();
|
let time = await db.collection("idcount").where({ _id: "69fac1528463a95668c5e5db" }).getOne();
|
||||||
let t = time.data.passcheckTime;
|
let t = time.data.passcheckTime;
|
||||||
if (Date.now() > t + 30 * 24 * 3600000) {
|
if (Date.now() > t + 30 * 24 * 3600000) {
|
||||||
|
|
|
||||||
118
laf-cloud/functions/passCheckUpgrade.ts
Normal file
118
laf-cloud/functions/passCheckUpgrade.ts
Normal file
|
|
@ -0,0 +1,118 @@
|
||||||
|
import cloud from '@lafjs/cloud';
|
||||||
|
import Utils from '@/Utils';
|
||||||
|
const db = cloud.database();
|
||||||
|
const PERIOD = 30 * 24 * 3600000;
|
||||||
|
export const PASS_PRICES = { battlepass: 1800, battlepass_30: 3000, battlepass_12: 1200 };
|
||||||
|
export function parsePass(raw: any): any {
|
||||||
|
try { return typeof raw === 'string' ? JSON.parse(raw) || {} : raw || {}; } catch (_) { return {}; }
|
||||||
|
}
|
||||||
|
export function isUpgradeOrder(order: any): boolean {
|
||||||
|
return order?.passVersion === 2 || order?.itemid === 'battlepass_30' || order?.itemid === 'battlepass_12';
|
||||||
|
}
|
||||||
|
export function passOrderFields(user: any, body: any): any {
|
||||||
|
if (!Object.prototype.hasOwnProperty.call(PASS_PRICES, body.itemid)) return {};
|
||||||
|
if (Number(body.passVersion) !== 2) {
|
||||||
|
if (body.itemid === 'battlepass') return {};
|
||||||
|
throw new Error('请更新客户端后购买高级战令');
|
||||||
|
}
|
||||||
|
const stage = parsePass(user.passCheck)[2];
|
||||||
|
if (!stage || String(stage.time) !== String(body.passEnd) || Number(stage.time) <= Date.now()) throw new Error('本期已结束,请重新打开战令');
|
||||||
|
const extra = parsePass(user.passCheckUpgrade)[String(stage.time)] || {};
|
||||||
|
const tier = extra.tier === 30 ? 30 : stage.activate || extra.activate ? 18 : 0;
|
||||||
|
if (body.itemid === 'battlepass_12' ? tier !== 18 : tier !== 0) throw new Error('战令购买状态已变化,请重新打开');
|
||||||
|
return { passVersion: 2, passEnd: String(stage.time) };
|
||||||
|
}
|
||||||
|
/** 仅已使用新版战令的账号合并领取记录;旧周期、旧经验和旧响应格式不变。 */
|
||||||
|
export function legacyPassView(raw: any, extraRaw: any): any {
|
||||||
|
if (!raw || !extraRaw) return raw;
|
||||||
|
const pass = parsePass(raw), extra = parsePass(extraRaw);
|
||||||
|
for (const key of [1, 2]) {
|
||||||
|
const stage = pass[key], saved = extra[String(stage?.time)];
|
||||||
|
if (!stage || !saved) continue;
|
||||||
|
stage.activate = !!stage.activate || !!saved.activate;
|
||||||
|
for (const lane of ['free', 'passCheck']) for (let i = 0; i < Math.min(30, (saved[lane] || []).length); i++) {
|
||||||
|
if (saved[lane][i] === 0) (stage[lane] || (stage[lane] = []))[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return JSON.stringify(pass);
|
||||||
|
}
|
||||||
|
export default async function (ctx: FunctionContext) {
|
||||||
|
const body = ctx.body;
|
||||||
|
const users = db.collection(body.gameName === 'iaa' ? 'usersAd' : 'users');
|
||||||
|
const { data: user } = await users.where({ _id: body.uid }).getOne();
|
||||||
|
if (!user || (user.token && !Utils.checkToken(body.token, user.token))) return { code: 0, msg: 'token校验失败' };
|
||||||
|
const extra = parsePass(user.passCheckUpgrade), base = parsePass(user.passCheck);
|
||||||
|
const revision = Number(user.passUpgradeRevision) || 0;
|
||||||
|
const reply = (data = {}) => ({ code: 1, data: { extra, legacy: user.passCheck, revision, coinAmount: user.coinAmount || 0, ...data } });
|
||||||
|
if (body.action === 'read') return reply();
|
||||||
|
if (body.action === 'legacyOrder') {
|
||||||
|
const orders = await db.collection('order').where({ openid: user.openid, itemid: 'battlepass', state: 2 }).get();
|
||||||
|
const order = (orders.data || []).find(o => !o.passVersion && !o.passGranted && [base[1], base[2]].some(s =>
|
||||||
|
!s?.activate && !extra[String(s?.time)]?.activate && Number(s?.time) > Date.now() - PERIOD
|
||||||
|
&& Number(o.time) >= Number(s.time) - PERIOD && Number(o.time) < Number(s.time)));
|
||||||
|
return reply({ outTradeNo: order?.outTradeNo });
|
||||||
|
}
|
||||||
|
let order: any, end: string, bonus = false, targetTier = 0;
|
||||||
|
if (body.outTradeNo) {
|
||||||
|
order = (await db.collection('order').where({ outTradeNo: body.outTradeNo }).getOne()).data;
|
||||||
|
if (!order || order.openid !== user.openid || !Object.prototype.hasOwnProperty.call(PASS_PRICES, order.itemid)
|
||||||
|
|| ![1, 2].includes(order.state)) return { code: 0, msg: '战令订单尚未支付或不属于当前玩家' };
|
||||||
|
if (order.passGranted) return reply({ alreadyGranted: true });
|
||||||
|
end = String(order.passEnd || [base[1], base[2]].find(s => Number(order.time) >= Number(s?.time) - PERIOD && Number(order.time) < Number(s?.time))?.time || '');
|
||||||
|
const stage = [base[1], base[2]].find(s => String(s?.time) === end);
|
||||||
|
const saved = extra[end] || {};
|
||||||
|
if ((!stage && !saved.time) || Number(end) <= Date.now() - PERIOD) return { code: 410, msg: '订单所属期已过期,请联系客服处理' };
|
||||||
|
if ((saved.orders || []).includes(order.outTradeNo) || (!isUpgradeOrder(order) && order.state === 2 && stage?.activate)) {
|
||||||
|
await db.collection('order').where({ outTradeNo: order.outTradeNo }).update({ state: 2, passGranted: true });
|
||||||
|
return reply({ alreadyGranted: true });
|
||||||
|
}
|
||||||
|
const owned = saved.tier === 30 ? 30 : saved.activate || stage?.activate ? 18 : 0;
|
||||||
|
targetTier = order.itemid === 'battlepass' ? 18 : 30;
|
||||||
|
if (owned >= targetTier || (order.itemid === 'battlepass_12' && owned !== 18)) return { code: 410, msg: '重复或无效升级订单,请联系客服处理' };
|
||||||
|
bonus = targetTier === 30 && !saved.bonusGranted;
|
||||||
|
if (body.action === 'order') return reply({ passEnd: end, targetTier, bonus });
|
||||||
|
}
|
||||||
|
if (body.action !== 'save') return { code: 0, msg: '无效战令操作' };
|
||||||
|
if (Number(body.revision) !== revision) return { code: 409, msg: '战令已更新,请重试' };
|
||||||
|
const supplied = parsePass(body.passCheck), legacy = parsePass(body.legacy);
|
||||||
|
const next: any = {};
|
||||||
|
for (const key of [1, 2]) {
|
||||||
|
const stage = supplied[key];
|
||||||
|
if (!stage || !Number(stage.time)) continue;
|
||||||
|
const time = String(stage.time), saved = extra[time] || {};
|
||||||
|
const old = [base[1], base[2]].find(s => String(s?.time) === time);
|
||||||
|
next[time] = { ...stage, experience: Math.max(saved.experience || 0, stage.experience || 0),
|
||||||
|
tier: saved.tier || 0, activate: !!saved.activate || !!old?.activate,
|
||||||
|
orders: saved.orders || [], bonusGranted: !!saved.bonusGranted };
|
||||||
|
for (const lane of ['free', 'passCheck']) {
|
||||||
|
next[time][lane] = [...(stage[lane] || [])];
|
||||||
|
for (let i = 0; i < next[time][lane].length; i++) {
|
||||||
|
if (saved[lane]?.[i] === 0 || (i < 30 && old?.[lane]?.[i] === 0)) next[time][lane][i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (legacy[key]) {
|
||||||
|
legacy[key].activate = next[time].activate;
|
||||||
|
legacy[key].free = next[time].free.slice(0, 30);
|
||||||
|
legacy[key].passCheck = next[time].passCheck.slice(0, 30);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (order) {
|
||||||
|
if (!next[end]) return { code: 0, msg: '订单所属期数据缺失' };
|
||||||
|
next[end].tier = targetTier; next[end].activate = true;
|
||||||
|
next[end].bonusGranted = !!next[end].bonusGranted || bonus;
|
||||||
|
next[end].orders = [...next[end].orders, order.outTradeNo];
|
||||||
|
for (const key of [1, 2]) if (String(legacy[key]?.time) === end) legacy[key].activate = true;
|
||||||
|
}
|
||||||
|
const update: any = { passCheck: JSON.stringify(legacy), passCheckUpgrade: JSON.stringify(next), passUpgradeRevision: revision + 1 };
|
||||||
|
if (bonus) {
|
||||||
|
// 战令赠金由客户端计算,此处仅保存上传余额与同一期的发奖记录。
|
||||||
|
const coin = Number(body.coinAmount);
|
||||||
|
if (!Number.isSafeInteger(coin) || coin < 0) return { code: 0, msg: '战令奖励数据不完整' };
|
||||||
|
update.coinAmount = coin; update.timestamp = Date.now();
|
||||||
|
}
|
||||||
|
const where: any = { _id: user._id, passCheck: user.passCheck == null ? null : user.passCheck,
|
||||||
|
passUpgradeRevision: user.passUpgradeRevision == null ? null : user.passUpgradeRevision };
|
||||||
|
if ((await users.where(where).update(update)).updated === 0) return { code: 409, msg: '战令已更新,请重试' };
|
||||||
|
if (order) await db.collection('order').where({ outTradeNo: order.outTradeNo }).update({ state: 2, passGranted: true, getTime: new Date() });
|
||||||
|
return reply({ extra: next, legacy: update.passCheck, revision: revision + 1, bonus, coinAmount: bonus ? update.coinAmount : user.coinAmount });
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import cloud from '@lafjs/cloud'
|
import cloud from '@lafjs/cloud'
|
||||||
|
import { passOrderFields, PASS_PRICES } from '@/passCheckUpgrade';
|
||||||
const token = "nika123";
|
const token = "nika123";
|
||||||
const EncodingAESKey = "XcdOFaZOQjmyBqYHxWAITtrmq11YaZQ63DeEZAAgYJt";
|
const EncodingAESKey = "XcdOFaZOQjmyBqYHxWAITtrmq11YaZQ63DeEZAAgYJt";
|
||||||
const mchid = "1719895437";//商户id
|
const mchid = "1719895437";//商户id
|
||||||
|
|
@ -17,7 +18,7 @@ export default async function (ctx: FunctionContext) {
|
||||||
console.log(data);
|
console.log(data);
|
||||||
if (data.tpye == "ios") {
|
if (data.tpye == "ios") {
|
||||||
await PostMsg(openid, "点击下方页面进行充值");
|
await PostMsg(openid, "点击下方页面进行充值");
|
||||||
await PostImg(openid, data.outTradeNo, data.propName, data.count, data.price);
|
await PostImg(openid, data.outTradeNo, data.propName, data.count, data.price, data);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error("ios客服充值参数错误:" + ctx.body.SessionFrom);
|
console.error("ios客服充值参数错误:" + ctx.body.SessionFrom);
|
||||||
|
|
@ -99,6 +100,7 @@ async function frontsign(data) {
|
||||||
return signature
|
return signature
|
||||||
}
|
}
|
||||||
const propName = {
|
const propName = {
|
||||||
|
battlepass: '基础战令', battlepass_30: '高级战令', battlepass_12: '战令升级',
|
||||||
gold_1: "金币包1",
|
gold_1: "金币包1",
|
||||||
gold_2: "金币包2",
|
gold_2: "金币包2",
|
||||||
gold_3: "金币包3",
|
gold_3: "金币包3",
|
||||||
|
|
@ -146,7 +148,14 @@ async function PostMsg(OpenId, msg) {
|
||||||
})
|
})
|
||||||
return "ok"
|
return "ok"
|
||||||
}
|
}
|
||||||
async function PostImg(OpenId, outTradeNo, name, count, price) {
|
async function PostImg(OpenId, outTradeNo, name, count, price, passInput: any = {}) {
|
||||||
|
let passFields: any = {};
|
||||||
|
if (Object.prototype.hasOwnProperty.call(PASS_PRICES, name)) {
|
||||||
|
const owner = await db.collection('users').where({ openid: OpenId }).getOne();
|
||||||
|
try { passFields = passOrderFields(owner.data, { ...passInput, itemid: name }); }
|
||||||
|
catch (error) { await PostMsg(OpenId, error.message); return; }
|
||||||
|
if (passFields.passVersion) { price = PASS_PRICES[name]; count = 1; }
|
||||||
|
}
|
||||||
let token = cloud.shared.get('wxaccess_token');
|
let token = cloud.shared.get('wxaccess_token');
|
||||||
if (!token) {
|
if (!token) {
|
||||||
return { code: 0, data: null, msg: "token获取失败" };
|
return { code: 0, data: null, msg: "token获取失败" };
|
||||||
|
|
@ -183,6 +192,7 @@ async function PostImg(OpenId, outTradeNo, name, count, price) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await db.collection("iosOrder").add({
|
await db.collection("iosOrder").add({
|
||||||
|
...passFields,
|
||||||
openid: OpenId,
|
openid: OpenId,
|
||||||
outTradeNo: outTradeNo,
|
outTradeNo: outTradeNo,
|
||||||
itemid: name,
|
itemid: name,
|
||||||
|
|
@ -219,7 +229,7 @@ async function PostImg(OpenId, outTradeNo, name, count, price) {
|
||||||
console.error("未获取到正确token,重新发送请求");
|
console.error("未获取到正确token,重新发送请求");
|
||||||
let res = await getWxToken();
|
let res = await getWxToken();
|
||||||
await PostMsg(OpenId, "点击下方页面进行充值");
|
await PostMsg(OpenId, "点击下方页面进行充值");
|
||||||
await PostImg(OpenId, outTradeNo, name, count, price);
|
await PostImg(OpenId, outTradeNo, name, count, price, passInput);
|
||||||
}
|
}
|
||||||
return "ok"
|
return "ok"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ export default async function (ctx: FunctionContext) {
|
||||||
let res = await db.collection("iosOrder").where({ outTradeNo: outTradeNo }).getOne();
|
let res = await db.collection("iosOrder").where({ outTradeNo: outTradeNo }).getOne();
|
||||||
if (res.data) {
|
if (res.data) {
|
||||||
await db.collection("order").add({
|
await db.collection("order").add({
|
||||||
|
...(res.data.passVersion === 2 ? { passVersion: 2, passEnd: res.data.passEnd } : {}),
|
||||||
openid: res.data.openid,
|
openid: res.data.openid,
|
||||||
outTradeNo: res.data.outTradeNo,
|
outTradeNo: res.data.outTradeNo,
|
||||||
itemid: res.data.itemid,
|
itemid: res.data.itemid,
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import cloud from '@lafjs/cloud'
|
import cloud from '@lafjs/cloud'
|
||||||
|
import { isUpgradeOrder } from '@/passCheckUpgrade';
|
||||||
const db = cloud.database();
|
const db = cloud.database();
|
||||||
export default async function (ctx: FunctionContext) {
|
export default async function (ctx: FunctionContext) {
|
||||||
let outTradeNo = ctx.body.outTradeNo;
|
let outTradeNo = ctx.body.outTradeNo;
|
||||||
|
|
@ -10,6 +11,7 @@ export default async function (ctx: FunctionContext) {
|
||||||
return { code: 0, data: null, msg: "未获取到充值订单" };
|
return { code: 0, data: null, msg: "未获取到充值订单" };
|
||||||
}
|
}
|
||||||
// 月卡由 monthlyCard 在成功加时后完成订单,避免两次请求之间断线导致无法补发。
|
// 月卡由 monthlyCard 在成功加时后完成订单,避免两次请求之间断线导致无法补发。
|
||||||
|
if (isUpgradeOrder(order.data)) return { code: 0, msg: '请在新版战令中完成发放' };
|
||||||
if (order.data.itemid !== "month_Card") {
|
if (order.data.itemid !== "month_Card") {
|
||||||
await db.collection("order").where({ outTradeNo: outTradeNo }).update({ state: 2, getTime: new Date(Date.now() + 8 * 3600000) });
|
await db.collection("order").where({ outTradeNo: outTradeNo }).update({ state: 2, getTime: new Date(Date.now() + 8 * 3600000) });
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import cloud from '@lafjs/cloud'
|
import cloud from '@lafjs/cloud'
|
||||||
|
import { isUpgradeOrder } from '@/passCheckUpgrade';
|
||||||
import crypto from 'crypto';
|
import crypto from 'crypto';
|
||||||
import * as JungleConfigModule from "@/jungleConfig";
|
import * as JungleConfigModule from "@/jungleConfig";
|
||||||
const JungleConfig: any = JungleConfigModule as any;
|
const JungleConfig: any = JungleConfigModule as any;
|
||||||
|
|
@ -21,6 +22,7 @@ export default async function (ctx: FunctionContext) {
|
||||||
return { code: 0, data: null, msg: "未获取到充值信息" };
|
return { code: 0, data: null, msg: "未获取到充值信息" };
|
||||||
}
|
}
|
||||||
let payment_name = ret.data?.itemid;
|
let payment_name = ret.data?.itemid;
|
||||||
|
if (isUpgradeOrder(ret.data) && ret.data.state === 2) return { code: 1, data: { payment_name, goodsPrice: ret.data.goodsPrice } };
|
||||||
if (ret.data.state == 2 && (payment_name !== "month_Card" || ret.data.monthCardGranted === true)) {
|
if (ret.data.state == 2 && (payment_name !== "month_Card" || ret.data.monthCardGranted === true)) {
|
||||||
console.error("ios已经获取奖励");
|
console.error("ios已经获取奖励");
|
||||||
return { code: 0, data: null, msg: "已经获取到奖励" };
|
return { code: 0, data: null, msg: "已经获取到奖励" };
|
||||||
|
|
@ -63,10 +65,10 @@ export default async function (ctx: FunctionContext) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 月卡等待 monthlyCard 完成加时后再进入 state=2,其他商品保持原逻辑。
|
// 月卡等待 monthlyCard 完成加时后再进入 state=2,其他商品保持原逻辑。
|
||||||
await db.collection("order").where({ outTradeNo: outTradeNo }).update({
|
await db.collection("order").where({ outTradeNo: outTradeNo, ...(isUpgradeOrder(ret.data) ? { state: ret.data.state } : {}) }).update({
|
||||||
state: payment_name === "month_Card" ? 1 : 2,
|
state: payment_name === "month_Card" || isUpgradeOrder(ret.data) ? 1 : 2,
|
||||||
chargeTime: new Date(Date.now() + 8 * 3600000),
|
chargeTime: new Date(Date.now() + 8 * 3600000),
|
||||||
...(payment_name === "month_Card" ? {} : { getTime: new Date(Date.now() + 8 * 3600000) }),
|
...(payment_name === "month_Card" || isUpgradeOrder(ret.data) ? {} : { getTime: new Date(Date.now() + 8 * 3600000) }),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import cloud from '@lafjs/cloud'
|
import cloud from '@lafjs/cloud'
|
||||||
|
import { passOrderFields, PASS_PRICES } from '@/passCheckUpgrade';
|
||||||
import * as crypto from 'crypto';
|
import * as crypto from 'crypto';
|
||||||
import * as JungleConfigModule from "@/jungleConfig";
|
import * as JungleConfigModule from "@/jungleConfig";
|
||||||
const JungleConfig: any = JungleConfigModule as any;
|
const JungleConfig: any = JungleConfigModule as any;
|
||||||
|
|
@ -13,6 +14,11 @@ export default async function (ctx: FunctionContext) {
|
||||||
return { code: 0, data: null, msg: "未获取到玩家数据" };
|
return { code: 0, data: null, msg: "未获取到玩家数据" };
|
||||||
}
|
}
|
||||||
const jungleTier = JungleConfig.getJunglePaidTierByProductId(itemid);
|
const jungleTier = JungleConfig.getJunglePaidTierByProductId(itemid);
|
||||||
|
let passFields: any = {};
|
||||||
|
try {
|
||||||
|
passFields = passOrderFields(user.data, ctx.body);
|
||||||
|
if (passFields.passVersion) { itemCount = 1; itemPrice = PASS_PRICES[itemid]; }
|
||||||
|
} catch (error) { return { code: 0, msg: error.message }; }
|
||||||
if (jungleTier) {
|
if (jungleTier) {
|
||||||
if (!JungleConfig.isJungleActivityPurchasable(user.data.jungleTreasureState)) {
|
if (!JungleConfig.isJungleActivityPurchasable(user.data.jungleTreasureState)) {
|
||||||
return { code: 0, data: null, msg: "Jungle 活动已结束,无法创建订单" };
|
return { code: 0, data: null, msg: "Jungle 活动已结束,无法创建订单" };
|
||||||
|
|
@ -44,6 +50,7 @@ export default async function (ctx: FunctionContext) {
|
||||||
let data = 'requestMidasPaymentGameItem' + '&' + signData;
|
let data = 'requestMidasPaymentGameItem' + '&' + signData;
|
||||||
const paySig = hmacSha256(key, data);
|
const paySig = hmacSha256(key, data);
|
||||||
await db.collection("order").add({
|
await db.collection("order").add({
|
||||||
|
...passFields,
|
||||||
openid: user.data.openid,
|
openid: user.data.openid,
|
||||||
outTradeNo: outTradeNo,
|
outTradeNo: outTradeNo,
|
||||||
itemid: itemid,
|
itemid: itemid,
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import cloud from '@lafjs/cloud'
|
import cloud from '@lafjs/cloud'
|
||||||
|
import { passOrderFields, PASS_PRICES } from '@/passCheckUpgrade';
|
||||||
import * as crypto from 'crypto';
|
import * as crypto from 'crypto';
|
||||||
import * as JungleConfigModule from "@/jungleConfig";
|
import * as JungleConfigModule from "@/jungleConfig";
|
||||||
const JungleConfig: any = JungleConfigModule as any;
|
const JungleConfig: any = JungleConfigModule as any;
|
||||||
|
|
@ -13,6 +14,11 @@ export default async function (ctx: FunctionContext) {
|
||||||
return { code: 0, data: null, msg: "未获取到玩家数据" };
|
return { code: 0, data: null, msg: "未获取到玩家数据" };
|
||||||
}
|
}
|
||||||
const jungleTier = JungleConfig.getJunglePaidTierByProductId(itemid);
|
const jungleTier = JungleConfig.getJunglePaidTierByProductId(itemid);
|
||||||
|
let passFields: any = {};
|
||||||
|
try {
|
||||||
|
passFields = passOrderFields(user.data, ctx.body);
|
||||||
|
if (passFields.passVersion) { itemCount = 1; itemPrice = PASS_PRICES[itemid]; }
|
||||||
|
} catch (error) { return { code: 0, msg: error.message }; }
|
||||||
if (jungleTier) {
|
if (jungleTier) {
|
||||||
if (!JungleConfig.isJungleActivityPurchasable(user.data.jungleTreasureState)) {
|
if (!JungleConfig.isJungleActivityPurchasable(user.data.jungleTreasureState)) {
|
||||||
return { code: 0, data: null, msg: "Jungle 活动已结束,无法创建订单" };
|
return { code: 0, data: null, msg: "Jungle 活动已结束,无法创建订单" };
|
||||||
|
|
@ -44,6 +50,7 @@ export default async function (ctx: FunctionContext) {
|
||||||
let data = 'requestMidasPaymentGameItem' + '&' + signData;
|
let data = 'requestMidasPaymentGameItem' + '&' + signData;
|
||||||
const paySig = hmacSha256(key, data);
|
const paySig = hmacSha256(key, data);
|
||||||
await db.collection("order").add({
|
await db.collection("order").add({
|
||||||
|
...passFields,
|
||||||
openid: user.data.openid,
|
openid: user.data.openid,
|
||||||
outTradeNo: outTradeNo,
|
outTradeNo: outTradeNo,
|
||||||
itemid: itemid,
|
itemid: itemid,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user