From 5b3363d1ae6973826160b04b48de3e85540db082 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Sat, 11 Apr 2026 09:02:20 +0800 Subject: [PATCH] =?UTF-8?q?feat(wx):=20=E5=AE=9E=E7=8E=B0=E5=B0=8F?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E7=A0=81=E7=94=9F=E6=88=90=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E9=87=8D=E8=AF=95=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在生成小程序码时增加首次失败后清理缓存并重试的逻辑 - 新增强制刷新 access_token 的方法 getAccessTokenForcibly - 优化了获取 access_token 失败的日志提示,不再在错误时清理缓存 - 移除生成小程序码接口对 token 错误时清理缓存的判断及操作 - 移除异常时清理缓存的代码,避免误删除有效缓存 - 调整二维码请求参数,移除注释的颜色配置代码 --- .workbuddy/memory/2026-04-11.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .workbuddy/memory/2026-04-11.md diff --git a/.workbuddy/memory/2026-04-11.md b/.workbuddy/memory/2026-04-11.md new file mode 100644 index 0000000..7327384 --- /dev/null +++ b/.workbuddy/memory/2026-04-11.md @@ -0,0 +1,33 @@ +# 2026-04-11 工作日志 + +## 扫码登录 access_token 自动恢复机制 + +### 问题背景 +- `WX_ACCESS_TOKEN:{tenantId}` 缓存过期后,微信 API 返回 40001/42001 等错误 +- 之前需要手动删除 Redis 缓存才能恢复 + +### 解决方案 +实现了 access_token 自动清理和重试机制: + +#### 1. QrLoginServiceImpl 改动 +- `generateMiniprogramQrCode()` 添加重试逻辑 +- 首次失败 → 清理缓存 → 重试 +- 新增 `doGenerateMiniprogramQrCode()` 私有方法 + +#### 2. WxService 新增方法 +- `getAccessTokenForcibly(tenantId)` - 强制刷新 token + - 先删除 Redis 缓存 + - 直接从微信 API 获取新 token + +#### 3. WxLoginController 改动 +- `getPhoneByCode()` 检测 token 相关错误时自动清理缓存 +- 新增 `isTokenRelatedError()` 方法识别 40001/42001 等错误码 + +### 关键文件 +- `QrLoginServiceImpl.java` - 扫码登录服务 +- `WxService.java` - 微信公共服务 +- `WxLoginController.java` - 微信登录控制器 + +### 影响范围 +- 扫码登录生成小程序码 ✅ +- 小程序手机号授权登录 ✅