Pārlūkot izejas kodu

feat(wechat): 添加小程序 AccessToken 定时刷新功能

- 新增 AccessTokenCron 类实现定时刷新逻辑
- 在 MiniApp 服务中启用稳定版 access token 配置
- 注册定时任务到扩展类中以便系统调度
- 添加对应的单元测试确保功能正常运行
runphp 4 mēneši atpakaļ
vecāks
revīzija
ad82c85539

+ 24 - 0
src/Cron/AccessTokenCron.php

@@ -0,0 +1,24 @@
+<?php
+declare(strict_types=1);
+
+namespace SixShop\Wechat\Cron;
+
+use app\api\controller\Wechat;
+use SixShop\Core\Attribute\Cron;
+use SixShop\Wechat\Service\MiniApp;
+use think\facade\Log;
+
+class AccessTokenCron
+{
+    public function __construct(private MiniApp $miniApp)
+    {
+    }
+
+    #[Cron('* 12 * * * *', 'wechat.refreshMiniAppAccessToken')]
+    public function refreshMiniAppAccessToken(): void
+    {
+        $accessToken = $this->miniApp->getAccessToken();
+        $accessToken->refresh();
+        Log::debug('刷新小程序 AccessToken');
+    }
+}

+ 11 - 0
src/Extension.php

@@ -4,11 +4,13 @@ declare(strict_types=1);
 namespace SixShop\Wechat;
 
 use SixShop\Core\ExtensionAbstract;
+use SixShop\Wechat\Cron\AccessTokenCron;
 use SixShop\Wechat\Hook\WechatUserHook;
 
 class Extension extends ExtensionAbstract
 {
 
+    #[\Override]
     public function getHooks(): array
     {
         return [
@@ -16,8 +18,17 @@ class Extension extends ExtensionAbstract
         ];
     }
 
+    #[\Override]
     protected function getBaseDir(): string
     {
         return dirname(__DIR__);
     }
+
+    #[\Override]
+    public function getCronJobs(): array
+    {
+        return [
+            AccessTokenCron::class,
+        ];
+    }
 }

+ 1 - 0
src/Service/MiniApp.php

@@ -30,6 +30,7 @@ class MiniApp extends Application
                 }
             }
         }
+        $config['use_stable_access_token'] = true;
         parent::__construct($config);
         $this->setCache(Cache::instance());
     }

+ 0 - 0
test/ChineseUtilTest.php → tests/ChineseUtilTest.php


+ 20 - 0
tests/Cron/AccessTokenCronTest.php

@@ -0,0 +1,20 @@
+<?php
+declare(strict_types=1);
+namespace SixShop\Wechat\Cron;
+
+use PHPUnit\Framework\Attributes\Test;
+use PHPUnit\Framework\TestCase;
+
+class AccessTokenCronTest extends TestCase
+{
+    private AccessTokenCron $accessTokenCron;
+    protected function setUp(): void
+    {
+        $this->accessTokenCron = app(AccessTokenCron::class);
+    }
+
+    #[Test] public function refreshMiniAppAccessToken()
+    {
+        $this->accessTokenCron->refreshMiniAppAccessToken();
+    }
+}

+ 0 - 0
test/Entity/ExtensionWechatUserEntityTest.php → tests/Entity/ExtensionWechatUserEntityTest.php


+ 0 - 0
test/Service/ExpressServiceTest.php → tests/Service/ExpressServiceTest.php


+ 0 - 0
test/Service/MiniAppTest.php → tests/Service/MiniAppTest.php