# 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` - 微信登录控制器

### 影响范围
- 扫码登录生成小程序码 ✅
- 小程序手机号授权登录 ✅
