Procházet zdrojové kódy

📝 docs(prd): add mini-program phone number integration story US005-12

- add version 2.2 record with date 2025-10-25 and author John (PM)
- add user story US005-12 for WeChat mini-program phone number retrieval
- include acceptance criteria for phone number acquisition functionality
- provide technical implementation details for frontend and backend
- add API design for phone number decryption service
- specify test strategy and security considerations for phone number handling
- update story dependencies and implementation locations
yourname před 3 měsíci
rodič
revize
40d0994e8a
1 změnil soubory, kde provedl 95 přidání a 0 odebrání
  1. 95 0
      docs/prd/epic-005-travel-service-core.md

+ 95 - 0
docs/prd/epic-005-travel-service-core.md

@@ -3,6 +3,7 @@
 ## 版本信息
 | 版本 | 日期 | 描述 | 作者 |
 |------|------|------|------|
+| 2.2 | 2025-10-25 | 添加小程序手机号获取集成故事US005-12,顺延原有故事编号 | John (PM) |
 | 2.1 | 2025-10-20 | 添加车型和路线配置增强故事US005-04,顺延原有故事编号 | John (PM) |
 | 2.0 | 2025-10-19 | 添加样式迁移合规性修复故事US005-03,顺延原有故事编号 | John (PM) |
 | 1.9 | 2025-10-17 | 添加省市区实体设计方案,支持标准化行政区划数据管理 | John (PM) |
@@ -307,6 +308,100 @@ mini-demo包含14个页面,Epic 005将页面迁移作为用户故事的具体
 - **安全机制**: 签名验证、AES-256-GCM数据加密、防重放攻击
 - **测试覆盖**: 完整的集成测试和单元测试
 
+### US005-12: 小程序手机号获取集成
+**作为** 出行用户
+**我希望** 能够通过微信小程序一键获取我的手机号
+**以便** 快速完成订单联系信息填写
+
+**验收标准**:
+- [ ] 支持微信小程序 `getPhoneNumber` 功能调用
+- [ ] 实现手机号解密API接口,接收小程序加密数据
+- [ ] 将获取的手机号保存到用户信息中
+- [ ] 订单确认页面显示已获取的手机号状态
+- [ ] 支持手机号获取失败的重试机制
+- [ ] 确保手机号数据安全性和隐私保护
+- [ ] 手机号获取成功后自动填充到订单联系信息
+- [ ] 支持手机号验证状态显示
+
+**技术实现方案**:
+- **前端实现**: 使用微信小程序 `getPhoneNumber` 组件
+- **后端解密**: 使用微信官方SDK解密手机号加密数据
+- **数据存储**: 将手机号保存到用户实体的 `phone` 字段
+- **状态管理**: 订单页面显示手机号获取状态和验证状态
+
+**前端实现细节**:
+```typescript
+// 订单确认页面手机号获取逻辑
+const handleGetPhoneNumber = async (e: any) => {
+  if (e.detail.errMsg === 'getPhoneNumber:ok') {
+    // 调用后端手机号解密API
+    const phoneData = await authClient.phone.$post({
+      json: {
+        code: e.detail.code,
+        encryptedData: e.detail.encryptedData,
+        iv: e.detail.iv
+      }
+    });
+
+    // 更新用户信息和页面状态
+    setPhoneNumber(phoneData.phoneNumber);
+    setHasPhoneNumber(true);
+  }
+}
+```
+
+**后端实现细节**:
+- **服务位置**: `packages/server/src/modules/auth/mini-auth.service.ts`
+- **新增方法**: `decryptPhoneNumber(code: string, encryptedData: string, iv: string)`
+- **解密流程**:
+  1. 使用session_key解密手机号数据
+  2. 验证用户身份和会话有效性
+  3. 将手机号保存到用户实体
+  4. 返回解密后的手机号信息
+
+**API设计**:
+```typescript
+// 手机号解密API
+POST /api/v1/auth/phone
+{
+  "code": "微信小程序获取的code",
+  "encryptedData": "加密数据",
+  "iv": "加密算法的初始向量"
+}
+
+// 响应
+{
+  "phoneNumber": "13812345678",
+  "countryCode": "86",
+  "purePhoneNumber": "13812345678"
+}
+```
+
+**API路由位置**:
+- **文件路径**: `packages/server/src/api/auth/phone/post.ts`
+- **路由注册**: 在 `packages/server/src/api/auth/index.ts` 中添加
+- **认证中间件**: 需要用户登录状态验证
+- **错误处理**: 支持微信API错误、解密错误、网络错误等
+
+**安全考虑**:
+- 使用微信官方SDK进行数据解密
+- 验证用户身份和会话有效性
+- 防止重复获取和滥用
+- 符合微信小程序隐私政策要求
+- 手机号数据加密存储
+- 访问权限控制
+
+**依赖关系**:
+- **前置依赖**: US005-10 个人中心管理(用户信息展示)
+- **并行开发**: US005-08 订单创建和支付(订单确认页面)
+- **技术依赖**: 微信小程序SDK、微信开放平台配置
+
+**测试策略**:
+- 单元测试:手机号解密逻辑测试
+- 集成测试:微信API调用测试
+- E2E测试:完整手机号获取流程测试
+- 安全测试:数据加密和权限验证测试
+
 ## 技术实现方案
 
 ### 后端数据模型