Files
chaohua_coze/WEIBO_INTEGRATION_GUIDE.md
jaystar 6885ec10d1 feat: 接入真实微博OAuth 2.0登录
**实现内容**:

1. **微博OAuth 2.0登录**
   - 实现完整的OAuth授权流程
   - 支持开发模式(模拟数据)和生产模式(真实API)
   - 自动判断运行模式,无需手动切换

2. **微博账号绑定**
   - 获取授权URL接口:GET /api/weibo/bind-url
   - 处理授权回调:GET /api/weibo/callback
   - 绑定状态查询:GET /api/weibo/status
   - 解除绑定:DELETE /api/weibo/unbind

3. **超话功能(模拟实现)**
   - 超话列表查询:GET /api/topic/list
   - 单个签到:POST /api/topic/signin
   - 批量签到:POST /api/topic/batch-signin
   - 签到记录:GET /api/topic/records
   - 同步超话:POST /api/topic/sync

4. **环境配置**
   - 新增server/.env配置文件
   - 支持环境变量配置微博App Key/Secret
   - 安装@nestjs/config依赖

5. **技术文档**
   - 创建WEIBO_INTEGRATION_GUIDE.md完整接入指南
   - 包含微博开放平台配置步骤
   - 提供OAuth 2.0授权流程说明
   - 详细的风险提示和安全建议

**重要说明**:
- 超话功能目前使用模拟数据,真实实现需要调用微博移动端非官方API
- 非官方API存在法律和技术风险,使用需谨慎
- 系统已预留真实API接口实现位置和注释说明
2026-03-16 13:19:55 +08:00

355 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 微博OAuth 2.0 接入指南
## 一、微博开放平台配置
### 1. 注册开发者账号
访问 [微博开放平台](https://open.weibo.com/),注册并认证开发者账号。
### 2. 创建应用
1. 登录微博开放平台
2. 点击"创建应用"
3. 选择"网页应用"或"移动应用"
4. 填写应用信息:
- 应用名称:你的小程序名称
- 应用类型:选择合适类型
- 应用描述:简要说明应用功能
### 3. 获取App Key和App Secret
创建应用后,在应用详情页可以看到:
- **App Key**:应用的唯一标识
- **App Secret**:应用的密钥(需保密)
### 4. 配置回调地址
在应用设置中,配置授权回调地址:
```
https://your-domain.com/api/weibo/callback
```
开发环境可配置为:
```
http://localhost:3000/api/weibo/callback
```
---
## 二、环境变量配置
编辑 `server/.env` 文件,填入真实的微博配置:
```bash
# 微博开放平台配置
WEIBO_APP_KEY=你的App_Key
WEIBO_APP_SECRET=你的App_Secret
WEIBO_REDIRECT_URI=http://localhost:3000/api/weibo/callback
# JWT配置
JWT_SECRET=你的JWT密钥建议使用随机字符串
```
**注意**
- `WEIBO_REDIRECT_URI` 必须与微博开放平台配置的回调地址一致
- `JWT_SECRET` 建议使用强密码用于签名JWT Token
---
## 三、OAuth 2.0授权流程
### 流程图
```
用户 → 点击"绑定微博" → 跳转微博授权页 → 用户授权 → 回调到你的应用 → 获取access_token → 保存绑定信息
```
### 详细步骤
#### 1. 获取授权URL
**请求**
```
GET /api/weibo/bind-url
Authorization: Bearer {微信JWT Token}
```
**响应**
```json
{
"code": 200,
"msg": "success",
"data": {
"bindUrl": "https://api.weibo.com/oauth2/authorize?client_id={app_key}&redirect_uri={redirect_uri}&response_type=code&state={state}",
"devMode": false
}
}
```
#### 2. 用户授权
前端跳转到 `bindUrl`,用户在微博页面登录并授权。
#### 3. 处理回调
用户授权后,微博会重定向到:
```
{redirect_uri}?code={授权码}&state={state}
```
后端自动处理回调获取access_token并保存绑定信息。
#### 4. 检查绑定状态
**请求**
```
GET /api/weibo/status
Authorization: Bearer {微信JWT Token}
```
**响应**
```json
{
"code": 200,
"msg": "success",
"data": {
"bound": true,
"weiboName": "微博昵称"
}
}
```
---
## 四、开发模式 vs 生产模式
系统自动判断运行模式:
### 开发模式未配置微博App Key
**触发条件**
- `WEIBO_APP_KEY` 为空或为 `your_weibo_app_key`
**行为**
- 使用模拟数据
- 不需要真实的微博账号
- 适合开发和测试
### 生产模式已配置真实App Key
**触发条件**
- `WEIBO_APP_KEY` 为真实的App Key
**行为**
- 调用真实的微博API
- 需要用户真实授权
- 获取真实的微博用户信息
---
## 五、超话功能说明
### 重要警告
⚠️ **微博官方不提供超话API**所有超话功能均基于移动端API逆向分析实现。
### 技术方案
#### 1. 获取超话列表
**接口**(非官方):
```
GET https://m.weibo.cn/api/container/getIndex?containerid=100803
Headers: Cookie: SUB={access_token}
```
#### 2. 超话签到
**接口**(非官方):
```
POST https://m.weibo.cn/ajax/statuses/checkin
Headers: Cookie: SUB={access_token}
Body: containerid=100808{超话ID}
```
### 风险提示
1. **接口不稳定**:微博可能随时更改接口
2. **账号风险**:频繁调用可能导致账号被限制
3. **法律风险**使用非官方API可能违反微博服务条款
### 当前实现
系统目前使用**模拟数据**,真实实现需要:
1. 修改 `topic.service.ts` 中的 `mockWeiboSignin` 方法
2. 实现真实的API调用逻辑
3. 处理各种异常情况
---
## 六、测试流程
### 1. 测试开发模式
```bash
# 1. 确保.env中的微博配置为默认值
WEIBO_APP_KEY=your_weibo_app_key
# 2. 启动服务
cd /workspace/projects
coze dev
# 3. 测试登录
curl -X POST http://localhost:3000/api/auth/dev-login
# 4. 测试绑定微博
curl -X POST http://localhost:3000/api/weibo/dev-bind \
-H "Authorization: Bearer {token}"
```
### 2. 测试生产模式
```bash
# 1. 配置真实的微博App Key
WEIBO_APP_KEY=真实的App_Key
WEIBO_APP_SECRET=真实的App_Secret
# 2. 启动服务
coze dev
# 3. 获取授权URL
curl -X GET http://localhost:3000/api/weibo/bind-url \
-H "Authorization: Bearer {token}"
# 4. 在浏览器中访问授权URL完成授权
# 5. 检查绑定状态
curl -X GET http://localhost:3000/api/weibo/status \
-H "Authorization: Bearer {token}"
```
---
## 七、常见问题
### Q1: 授权后回调失败?
**原因**:回调地址配置不一致
**解决**
1. 检查微博开放平台的回调地址配置
2. 确保 `.env` 中的 `WEIBO_REDIRECT_URI` 与平台配置一致
3. 注意URL编码问题
### Q2: access_token过期怎么办
**原因**微博OAuth Token有效期有限
**解决**
1. 微博OAuth2.0没有refresh_token
2. 需要用户重新授权
3.`weibo.service.ts` 中实现Token刷新逻辑
### Q3: 超话签到失败?
**原因**非官方API不稳定
**解决**
1. 检查access_token是否有效
2. 降低调用频率
3. 添加重试机制
### Q4: 如何在生产环境部署?
**步骤**
1. 申请微博开发者账号
2. 创建应用并配置回调地址
3. 配置生产环境的环境变量
4. 部署后端服务
5. 配置前端域名
---
## 八、API接口文档
### 认证相关
#### POST /api/auth/dev-login
开发环境模拟登录
#### POST /api/auth/wechat-login
微信登录需配置微信AppID
#### GET /api/auth/me
获取当前用户信息
### 微博相关
#### GET /api/weibo/bind-url
获取微博授权URL
#### GET /api/weibo/callback
微博授权回调(自动处理)
#### POST /api/weibo/dev-bind
开发环境模拟绑定微博
#### GET /api/weibo/status
获取微博绑定状态
#### DELETE /api/weibo/unbind
解除微博绑定
### 超话相关
#### GET /api/topic/list
获取超话列表
#### POST /api/topic/signin
单个超话签到
#### POST /api/topic/batch-signin
批量签到
#### GET /api/topic/records
获取签到记录
---
## 九、技术架构
```
微信用户登录JWT认证
微博账号绑定OAuth 2.0
超话数据同步非官方API
签到功能(模拟实现)
```
### 数据流转
1. 用户通过微信登录 → 获得JWT Token
2. 使用Token调用绑定接口 → 跳转微博授权
3. 微博授权成功 → 获取access_token → 保存到数据库
4. 使用access_token调用超话API → 获取超话列表
5. 用户点击签到 → 调用签到API → 记录签到数据
---
## 十、安全建议
1. **保护App Secret**:不要在代码中硬编码,使用环境变量
2. **HTTPS传输**生产环境必须使用HTTPS
3. **Token管理**妥善保存用户Token定期清理过期Token
4. **频率限制**避免频繁调用微博API
5. **数据加密**敏感数据如access_token应加密存储
---
## 联系支持
如有问题,请联系:
- 微博开放平台https://open.weibo.com/
- 项目Issue提交到你的项目仓库