import { compile, uncompile, unixTimestamp } from "../utils/index.js"; import request from "../utils/request.js"; import DnSdk from "./DnSdk.js"; class checkOrderToReport { static instance = null; static timer = null; static reportDelayMap = [ //index是report次数 值是delayTime(秒) 20, // 立即 60, // 1分钟 120, // 2分钟 180, // 3分钟 300, // 5分钟 600, // 10分钟 1200, // 20分钟 1800, // 30分钟 3600, // 1小时 7200, // 2小时 ]; constructor() {} async checkOrder() { const res = wx.getStorageInfoSync(); for (let storageKey of res.keys) { if (storageKey.indexOf("_extOrderToReport_") > -1) { const order = uncompile(wx.getStorageSync(storageKey)); console.log("order",order); const delayTimeMap = checkOrderToReport.reportDelayMap; const delayTime = delayTimeMap[order.reportCount]; const timeDiff = unixTimestamp() - order.timestamp; let currentMapIndex = -1; for (let i = delayTimeMap.length - 1; i >= 0; i--) { if (timeDiff >= delayTimeMap[i]) { currentMapIndex = i; break; } } if (delayTime == undefined) { // 删除超过重试次数的订单 wx.removeStorageSync(storageKey); console.log(storageKey + " removed!"); continue; } if (timeDiff >= delayTime) { let isPaid=0; let isRefused=0; // 请求判断是否支付成功 const res = await request.api("COMMON", { do: "getExtPayStatus", ext: order.ext, order_no: order.order_no ?? null, }); isPaid = res.isPaid ?? 0; isRefused = res.isRefused ?? 0; // isRefused=1 说明不需要上报 if (isRefused) { wx.removeStorageSync(storageKey); console.log(storageKey + " report Refused and removed!"); } else if (isPaid) { DnSdk.getInstance().onPurchase(order.amt * 100); // 腾讯广告小游戏SDK上报 wx.removeStorageSync(storageKey); console.log(storageKey + " report success and removed!"); } else { if (currentMapIndex == delayTimeMap.length - 1) { // 删除超过最长重试延时的订单 wx.removeStorageSync(storageKey); console.log(storageKey + " removed!"); continue; } if (currentMapIndex > order.reportCount) { order.reportCount = currentMapIndex; } order.reportCount += 1; wx.setStorageSync(storageKey, compile(order)); } } } } checkOrderToReport.getInstance().timer = setTimeout( checkOrderToReport.getInstance().checkOrder, 60000 ); } run() { if (!checkOrderToReport.getInstance().timer) { checkOrderToReport.getInstance().checkOrder(); } } static getInstance() { if (!this.instance) { this.instance = new checkOrderToReport(); } return this.instance; } } export default checkOrderToReport;