checkOrderToReport.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import { compile, uncompile, unixTimestamp } from "../utils/index.js";
  2. import request from "../utils/request.js";
  3. import DnSdk from "./DnSdk.js";
  4. class checkOrderToReport {
  5. static instance = null;
  6. static timer = null;
  7. static reportDelayMap = [
  8. //index是report次数 值是delayTime(秒)
  9. 20, // 立即
  10. 60, // 1分钟
  11. 120, // 2分钟
  12. 180, // 3分钟
  13. 300, // 5分钟
  14. 600, // 10分钟
  15. 1200, // 20分钟
  16. 1800, // 30分钟
  17. 3600, // 1小时
  18. 7200, // 2小时
  19. ];
  20. constructor() {}
  21. async checkOrder() {
  22. const res = wx.getStorageInfoSync();
  23. for (let storageKey of res.keys) {
  24. if (storageKey.indexOf("_extOrderToReport_") > -1) {
  25. const order = uncompile(wx.getStorageSync(storageKey));
  26. console.log("order",order);
  27. const delayTimeMap = checkOrderToReport.reportDelayMap;
  28. const delayTime = delayTimeMap[order.reportCount];
  29. const timeDiff = unixTimestamp() - order.timestamp;
  30. let currentMapIndex = -1;
  31. for (let i = delayTimeMap.length - 1; i >= 0; i--) {
  32. if (timeDiff >= delayTimeMap[i]) {
  33. currentMapIndex = i;
  34. break;
  35. }
  36. }
  37. if (delayTime == undefined) {
  38. // 删除超过重试次数的订单
  39. wx.removeStorageSync(storageKey);
  40. console.log(storageKey + " removed!");
  41. continue;
  42. }
  43. if (timeDiff >= delayTime) {
  44. let isPaid=0;
  45. let isRefused=0;
  46. // 请求判断是否支付成功
  47. const res = await request.api("COMMON", {
  48. do: "getExtPayStatus",
  49. ext: order.ext,
  50. order_no: order.order_no ?? null,
  51. });
  52. isPaid = res.isPaid ?? 0;
  53. isRefused = res.isRefused ?? 0;
  54. // isRefused=1 说明不需要上报
  55. if (isRefused) {
  56. wx.removeStorageSync(storageKey);
  57. console.log(storageKey + " report Refused and removed!");
  58. } else if (isPaid) {
  59. DnSdk.getInstance().onPurchase(order.amt * 100); // 腾讯广告小游戏SDK上报
  60. wx.removeStorageSync(storageKey);
  61. console.log(storageKey + " report success and removed!");
  62. } else {
  63. if (currentMapIndex == delayTimeMap.length - 1) {
  64. // 删除超过最长重试延时的订单
  65. wx.removeStorageSync(storageKey);
  66. console.log(storageKey + " removed!");
  67. continue;
  68. }
  69. if (currentMapIndex > order.reportCount) {
  70. order.reportCount = currentMapIndex;
  71. }
  72. order.reportCount += 1;
  73. wx.setStorageSync(storageKey, compile(order));
  74. }
  75. }
  76. }
  77. }
  78. checkOrderToReport.getInstance().timer = setTimeout(
  79. checkOrderToReport.getInstance().checkOrder,
  80. 60000
  81. );
  82. }
  83. run() {
  84. if (!checkOrderToReport.getInstance().timer) {
  85. checkOrderToReport.getInstance().checkOrder();
  86. }
  87. }
  88. static getInstance() {
  89. if (!this.instance) {
  90. this.instance = new checkOrderToReport();
  91. }
  92. return this.instance;
  93. }
  94. }
  95. export default checkOrderToReport;