瀏覽代碼

fix(wechat): 防止重复调度小程序 AccessToken 刷新任务

runphp 4 月之前
父節點
當前提交
c41fbb1874
共有 1 個文件被更改,包括 13 次插入5 次删除
  1. 13 5
      src/Cron/AccessTokenCron.php

+ 13 - 5
src/Cron/AccessTokenCron.php

@@ -26,6 +26,11 @@ class AccessTokenCron extends BaseJob
 
     private bool $isRunning = false;
 
+    /**
+     * 刷新 AccessToken 的计划执行时间
+     */
+    private int $scheduleRefreshTime = 0;
+
     public function __construct(private MiniApp $miniApp)
     {
         $this->accessToken = $this->miniApp->getAccessToken();
@@ -35,11 +40,14 @@ class AccessTokenCron extends BaseJob
     #[Cron('0 0 */2 * * *', 'wechat.refreshMiniAppAccessToken')]
     public function refreshMiniAppAccessToken(): void
     {
-        $expireIn = $this->execute();
-        self::dispatch()->delay($expireIn - self::LEAD_TIME);
-        Log::debug('定时刷新小程序 AccessToken 任务已启动,计划执行时间:{time}', [
-            'time' => date('Y-m-d H:i:s', time() + $expireIn - self::LEAD_TIME)
-        ]);
+        if (time() > $this->scheduleRefreshTime) {
+            $expireIn = $this->execute();
+            self::dispatch()->delay($expireIn - self::LEAD_TIME);
+            $this->scheduleRefreshTime = time() + $expireIn - self::LEAD_TIME;
+            Log::debug('定时刷新小程序 AccessToken 任务已启动,计划执行时间:{time}', [
+                'time' => date('Y-m-d H:i:s', $this->scheduleRefreshTime)
+            ]);
+        }
     }
 
     public function execute(): int