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