rwadurian/backend/services/identity-service/docs/TESTING_GUIDE.md

416 lines
8.8 KiB
Markdown
Raw 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.

# 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)
---
祝测试愉快!如有问题,请查看服务日志获取详细错误信息。