416 lines
8.8 KiB
Markdown
416 lines
8.8 KiB
Markdown
# Identity Service 测试指南
|
||
|
||
项目已成功启动!现在可以通过以下方式测试 API。
|
||
|
||
## 🌐 访问 Swagger API 文档
|
||
|
||
打开浏览器访问:
|
||
```
|
||
http://localhost:3000/api/docs
|
||
```
|
||
|
||
Swagger UI 提供了交互式的 API 测试界面,可以直接在浏览器中测试所有端点。
|
||
|
||
## 📋 可用的 API 端点
|
||
|
||
### 1. 用户注册和登录
|
||
|
||
#### 1.1 自动创建账户(首次打开 APP)
|
||
```bash
|
||
POST http://localhost:3000/api/v1/user/auto-create
|
||
|
||
# 请求体
|
||
{
|
||
"deviceId": "device-123456",
|
||
"deviceName": "iPhone 15 Pro",
|
||
"provinceCode": "110000",
|
||
"cityCode": "110100"
|
||
}
|
||
|
||
# 响应示例
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"userId": "uuid-string",
|
||
"accountSequence": 1000001,
|
||
"referralCode": "ABC123",
|
||
"mnemonic": "word1 word2 word3 ... word12", // 12个助记词
|
||
"walletAddresses": {
|
||
"kava": "kava1...",
|
||
"dst": "dst1...",
|
||
"bsc": "0x..."
|
||
},
|
||
"accessToken": "eyJhbGciOiJIUzI1NiIs...",
|
||
"refreshToken": "eyJhbGciOiJIUzI1NiIs..."
|
||
}
|
||
}
|
||
```
|
||
|
||
⚠️ **重要**:助记词只返回一次,请务必保存!
|
||
|
||
#### 1.2 发送短信验证码
|
||
```bash
|
||
POST http://localhost:3000/api/v1/user/send-sms-code
|
||
|
||
{
|
||
"phoneNumber": "13800138000",
|
||
"type": "REGISTER" // REGISTER | LOGIN | BIND | RECOVER
|
||
}
|
||
```
|
||
|
||
#### 1.3 手机号注册
|
||
```bash
|
||
POST http://localhost:3000/api/v1/user/register
|
||
|
||
{
|
||
"phoneNumber": "13800138000",
|
||
"smsCode": "123456",
|
||
"deviceId": "device-123456",
|
||
"deviceName": "iPhone 15 Pro",
|
||
"provinceCode": "110000",
|
||
"cityCode": "110100",
|
||
"inviterReferralCode": "ABC123" // 可选:推荐人的推荐码
|
||
}
|
||
```
|
||
|
||
#### 1.4 手机号登录
|
||
```bash
|
||
POST http://localhost:3000/api/v1/user/login
|
||
|
||
{
|
||
"phoneNumber": "13800138000",
|
||
"smsCode": "123456",
|
||
"deviceId": "device-789012"
|
||
}
|
||
```
|
||
|
||
#### 1.5 自动登录(刷新 Token)
|
||
```bash
|
||
POST http://localhost:3000/api/v1/user/auto-login
|
||
|
||
{
|
||
"refreshToken": "eyJhbGciOiJIUzI1NiIs...",
|
||
"deviceId": "device-123456"
|
||
}
|
||
```
|
||
|
||
### 2. 账户恢复
|
||
|
||
#### 2.1 通过助记词恢复
|
||
```bash
|
||
POST http://localhost:3000/api/v1/user/recover-by-mnemonic
|
||
|
||
{
|
||
"accountSequence": 1000001,
|
||
"mnemonic": "word1 word2 word3 ... word12",
|
||
"deviceId": "device-new-123",
|
||
"deviceName": "新设备"
|
||
}
|
||
```
|
||
|
||
#### 2.2 通过手机号恢复
|
||
```bash
|
||
POST http://localhost:3000/api/v1/user/recover-by-phone
|
||
|
||
{
|
||
"accountSequence": 1000001,
|
||
"phoneNumber": "13800138000",
|
||
"smsCode": "123456",
|
||
"deviceId": "device-new-456",
|
||
"deviceName": "新设备"
|
||
}
|
||
```
|
||
|
||
### 3. 用户资料管理(需要认证)
|
||
|
||
所有以下请求都需要在 Header 中添加:
|
||
```
|
||
Authorization: Bearer <accessToken>
|
||
```
|
||
|
||
#### 3.1 获取个人资料
|
||
```bash
|
||
GET http://localhost:3000/api/v1/user/my-profile
|
||
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
|
||
```
|
||
|
||
#### 3.2 更新个人资料
|
||
```bash
|
||
PUT http://localhost:3000/api/v1/user/update-profile
|
||
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
|
||
|
||
{
|
||
"nickname": "张三",
|
||
"avatarUrl": "https://example.com/avatar.jpg",
|
||
"address": "北京市朝阳区xx街道"
|
||
}
|
||
```
|
||
|
||
#### 3.3 绑定手机号
|
||
```bash
|
||
POST http://localhost:3000/api/v1/user/bind-phone
|
||
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
|
||
|
||
{
|
||
"phoneNumber": "13800138000",
|
||
"smsCode": "123456"
|
||
}
|
||
```
|
||
|
||
#### 3.4 提交 KYC 认证
|
||
```bash
|
||
POST http://localhost:3000/api/v1/user/submit-kyc
|
||
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
|
||
|
||
{
|
||
"realName": "张三",
|
||
"idCardNumber": "110101199001011234",
|
||
"idCardFrontUrl": "https://example.com/id-front.jpg",
|
||
"idCardBackUrl": "https://example.com/id-back.jpg"
|
||
}
|
||
```
|
||
|
||
### 4. 设备管理(需要认证)
|
||
|
||
#### 4.1 获取我的设备列表
|
||
```bash
|
||
GET http://localhost:3000/api/v1/user/my-devices
|
||
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
|
||
```
|
||
|
||
#### 4.2 移除设备
|
||
```bash
|
||
POST http://localhost:3000/api/v1/user/remove-device
|
||
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
|
||
|
||
{
|
||
"deviceId": "device-to-remove"
|
||
}
|
||
```
|
||
|
||
### 5. 查询功能
|
||
|
||
#### 5.1 根据推荐码查询用户
|
||
```bash
|
||
GET http://localhost:3000/api/v1/user/by-referral-code/ABC123
|
||
```
|
||
|
||
## 🧪 使用 cURL 测试
|
||
|
||
### 示例 1:自动创建账户
|
||
```bash
|
||
curl -X POST http://localhost:3000/api/v1/user/auto-create \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"deviceId": "test-device-001",
|
||
"deviceName": "Test Device",
|
||
"provinceCode": "110000",
|
||
"cityCode": "110100"
|
||
}'
|
||
```
|
||
|
||
### 示例 2:获取个人资料(需要 Token)
|
||
```bash
|
||
curl -X GET http://localhost:3000/api/v1/user/my-profile \
|
||
-H "Authorization: Bearer YOUR_ACCESS_TOKEN_HERE"
|
||
```
|
||
|
||
## 🔧 使用 Postman 测试
|
||
|
||
### 1. 导入集合
|
||
|
||
创建一个新的 Postman Collection,添加以下环境变量:
|
||
```
|
||
BASE_URL: http://localhost:3000/api/v1
|
||
ACCESS_TOKEN: (从登录响应中获取)
|
||
REFRESH_TOKEN: (从登录响应中获取)
|
||
```
|
||
|
||
### 2. 测试流程
|
||
|
||
**完整测试流程示例**:
|
||
|
||
1. **创建账户**
|
||
- POST `/user/auto-create`
|
||
- 保存返回的 `accessToken` 和 `mnemonic`
|
||
|
||
2. **获取个人资料**
|
||
- GET `/user/my-profile`
|
||
- Headers: `Authorization: Bearer {accessToken}`
|
||
|
||
3. **更新资料**
|
||
- PUT `/user/update-profile`
|
||
- 设置昵称和头像
|
||
|
||
4. **绑定手机号**
|
||
- POST `/user/send-sms-code`(发送验证码)
|
||
- POST `/user/bind-phone`(绑定)
|
||
|
||
5. **提交 KYC**
|
||
- POST `/user/submit-kyc`
|
||
|
||
6. **查看设备列表**
|
||
- GET `/user/my-devices`
|
||
|
||
## 📊 使用 Swagger UI 测试(推荐)
|
||
|
||
1. 打开 http://localhost:3000/api/docs
|
||
|
||
2. 点击 **Authorize** 按钮
|
||
|
||
3. 输入 Bearer Token:
|
||
```
|
||
eyJhbGciOiJIUzI1NiIs...
|
||
```
|
||
|
||
4. 点击任意端点展开
|
||
|
||
5. 点击 **Try it out**
|
||
|
||
6. 填写请求参数
|
||
|
||
7. 点击 **Execute**
|
||
|
||
8. 查看响应结果
|
||
|
||
## 🎯 测试场景
|
||
|
||
### 场景 1:新用户首次使用
|
||
```
|
||
1. 自动创建账户 → 保存助记词
|
||
2. 查看个人资料
|
||
3. 更新昵称和头像
|
||
4. 绑定手机号
|
||
5. 提交 KYC
|
||
```
|
||
|
||
### 场景 2:老用户更换设备
|
||
```
|
||
1. 通过助记词恢复账户
|
||
2. 查看设备列表
|
||
3. 移除旧设备(可选)
|
||
```
|
||
|
||
### 场景 3:多设备登录
|
||
```
|
||
1. 设备 A 登录
|
||
2. 设备 B 登录
|
||
3. 查看两个设备都在设备列表中
|
||
4. 从设备 A 移除设备 B
|
||
```
|
||
|
||
### 场景 4:推荐邀请
|
||
```
|
||
1. 用户 A 创建账户 → 获得推荐码
|
||
2. 用户 B 注册时使用用户 A 的推荐码
|
||
3. 通过推荐码查询用户 A 的信息
|
||
```
|
||
|
||
## 🔍 验证数据
|
||
|
||
### 查看数据库数据
|
||
```bash
|
||
# 启动 Prisma Studio
|
||
npm run prisma:studio
|
||
|
||
# 浏览器会自动打开 http://localhost:5555
|
||
# 可以查看所有表的数据
|
||
```
|
||
|
||
### 查看日志
|
||
服务启动后会实时输出日志,包括:
|
||
- 请求日志
|
||
- 业务逻辑日志
|
||
- 错误日志
|
||
- Kafka 事件发布日志
|
||
|
||
## 📝 测试数据示例
|
||
|
||
### 有效的中国手机号
|
||
```
|
||
13800138000
|
||
13912345678
|
||
15800001111
|
||
18600002222
|
||
```
|
||
|
||
### 有效的身份证号(测试用)
|
||
```
|
||
110101199001011234 (北京)
|
||
310101199001011234 (上海)
|
||
440101199001011234 (广东)
|
||
```
|
||
|
||
### 省市代码
|
||
```
|
||
北京: 110000 / 110100
|
||
上海: 310000 / 310100
|
||
广东: 440000 / 440100
|
||
```
|
||
|
||
## ⚠️ 注意事项
|
||
|
||
1. **短信验证码**:
|
||
- 开发环境下,验证码可能不会真正发送
|
||
- 检查日志中的验证码
|
||
- 或配置 Redis 查看存储的验证码
|
||
|
||
2. **助记词安全**:
|
||
- 只在创建时返回一次
|
||
- 生产环境务必安全存储
|
||
- 测试时记得保存以便恢复账户
|
||
|
||
3. **Token 过期**:
|
||
- Access Token: 2小时
|
||
- Refresh Token: 30天
|
||
- 过期后使用 `/auto-login` 刷新
|
||
|
||
4. **设备限制**:
|
||
- 每个账户最多 5 个设备
|
||
- 超过限制需要先移除旧设备
|
||
|
||
5. **KYC 限制**:
|
||
- 一旦提交不可修改
|
||
- 身份证号唯一
|
||
- 测试时使用不同的身份证号
|
||
|
||
## 🐛 常见问题
|
||
|
||
### Q: Token 失效怎么办?
|
||
A: 使用 `/auto-login` 端点用 refreshToken 获取新的 accessToken
|
||
|
||
### Q: 忘记助记词怎么办?
|
||
A:
|
||
- 如果绑定了手机号,使用手机号恢复
|
||
- 否则无法恢复,这是设计的安全特性
|
||
|
||
### Q: 如何测试 Kafka 事件?
|
||
A: 查看服务日志,或配置 Kafka 消费者监听主题:
|
||
```bash
|
||
# 使用 Kafka 命令行工具
|
||
kafka-console-consumer --bootstrap-server localhost:9092 \
|
||
--topic identity.UserAccountCreated \
|
||
--from-beginning
|
||
```
|
||
|
||
### Q: 数据库迁移失败?
|
||
A:
|
||
```bash
|
||
# 重置数据库(开发环境)
|
||
npm run prisma:migrate reset
|
||
|
||
# 重新生成 Prisma Client
|
||
npm run prisma:generate
|
||
```
|
||
|
||
## 📚 相关文档
|
||
|
||
- [Swagger UI](http://localhost:3000/api/docs)
|
||
- [Prisma Studio](http://localhost:5555) - 数据库可视化工具
|
||
- [NestJS 文档](https://docs.nestjs.com)
|
||
- [Prisma 文档](https://www.prisma.io/docs)
|
||
|
||
---
|
||
|
||
祝测试愉快!如有问题,请查看服务日志获取详细错误信息。
|