diff --git a/docs/需求文档-PRD.md b/docs/需求文档-PRD.md index b4aa9e6..7d2b745 100644 --- a/docs/需求文档-PRD.md +++ b/docs/需求文档-PRD.md @@ -20,6 +20,7 @@ | 预约服务状态查询接口 | 查询邮储侧服务状态 | [3.1.2](#312-服务取消接口) | | 预约取消接口 | 发起取消请求 | [3.1.2](#312-服务取消接口) | | 服务完成接口 | 通知邮储服务完成 | [3.1.3](#313-服务完成通知接口) | +| 过期积分查询接口 | 查询订单退还时已过期积分 | [3.1.4](#314-订单过期积分查询接口) | ### 调用上游的接口(调用蓝色兄弟API) @@ -49,9 +50,7 @@ ### 订单状态流转 ``` -100(未预约) → 200(已预约) → 300(已完成) - → 400(已取消) - → 500(已过期) +100(未预约) → 200(已预约) → 300(已完成)→ 400(已取消) → 500(已过期) ``` --- @@ -175,7 +174,7 @@ **输入**: | 字段 | 类型 | 必填 | 说明 | |-----|------|-----|------| -| class | String | M | 服务编码,用于查询数据库获取AES解密密钥 | +| type | String | M | 服务编码,用于查询数据库获取AES解密密钥 | | request | String | M | AES加密字符串,解密后格式:type=服务编码&code=权益码&mac=加密后的客户id | | channel | String | M | 渠道标识:12-手机银行,17-电话银行,41-CRM零售 | | tranChnl | String | M | 渠道标识:12-手机银行,17-电话银行,41-CRM零售 | @@ -277,7 +276,7 @@ **输入**: | 字段 | 类型 | 必填 | 说明 | |-----|------|-----|------| -| class | String | M | 服务编码,用于查询数据库获取AES解密密钥 | +| type | String | M | 服务编码,用于查询数据库获取AES解密密钥 | | request | String | M | AES加密字符串,解密后格式:type=服务编码&code=权益码&mac=加密后的客户id | | channel | String | M | 渠道标识:12-手机银行,17-电话银行,41-CRM零售 | | tranChnl | String | M | 渠道标识:12-手机银行,17-电话银行,41-CRM零售 | @@ -293,6 +292,10 @@ | backUrl | String | C | 返回手机银行的地址 | **验收标准**: +- [ ] 入参type(服务编码)为必填字段,缺失时返回“参数错误” +- [ ] 根据入参type查询数据库获取对应的aes_key和aes_iv +- [ ] 服务编码(type)不存在时,返回“暂不支持此服务”(在AES解密之前校验) +- [ ] 使用数据库查询到的aes_key和aes_iv能正确解密AES加密的request参数 - [ ] 正确解析AES加密的request参数,提取type、code、mac字段 - [ ] 本地订单状态为已取消时,直接返回取消成功 - [ ] 本地订单状态为已过期时,返回"服务已过期" @@ -312,7 +315,9 @@ | 用例编号 | 测试场景 | 前置条件 | 输入数据 | 预期结果 | |---------|---------|---------|---------|----------| | TC-3.1.2-001 | 正常取消成功 | 订单状态=已预约(200),邮储状态=已预约,蓝色兄弟作废成功,邮储取消成功 | request=有效加密参数 | code=0, 订单状态=400 | -| TC-3.1.2-002 | AES解密失败 | - | request=无效加密字符串 | code=2, msg="参数错误" | +| TC-3.1.2-002 | AES解密失败 | 服务编码存在 | type=有效服务编码, request=无效加密字符串 | code=2, msg="参数错误" | +| TC-3.1.2-002a | 必填参数缺失-type | - | 不传type | code=2, msg="参数错误" | +| TC-3.1.2-002b | 服务编码不存在 | 数据库无该服务编码映射 | type=999999 | code=4, msg="暂不支持此服务" | | TC-3.1.2-003 | 本地订单状态已取消 | 订单状态=已取消(400) | request=有效加密参数 | code=0, 直接返回取消成功 | | TC-3.1.2-004 | 本地订单状态非已预约 | 订单状态=已完成(300) | request=有效加密参数 | code=4, msg="服务已生效无法取消" | | TC-3.1.2-004a | 本地订单状态已过期 | 订单状态=已过期(500) | request=有效加密参数 | code=4, msg="服务已过期" | @@ -369,19 +374,22 @@ **功能描述**:查询订单退还时已过期的幸福点信息,用于取消前提醒客户 **业务规则**: -1. 根据权益码或原交易流水号查询订单 -2. 计算订单涉及的总幸福点 -3. 计算已过期的幸福点数量 -4. 返回过期幸福点提醒信息 +1. 验证服务编码(type),查询数据库获取AES解密密钥 +2. 服务编码不存在返回“暂不支持此服务” +3. 解密request参数获取服务编码、权益码、客户ID +4. 调用邮储「高端客户权益订单退还时已过期积分查询」接口 +5. 返回邮储接口查询结果(总幸福点、过期幸福点、提醒信息) **输入**: | 字段 | 类型 | 必填 | 说明 | |-----|------|-----|------| -| rightsCode | String | C | 兑换预约码(已预约取消场景必填) | -| orgTranSq | String | C | 原交易流水号(已兑换未预约取消场景必填) | -| cstmName | String | C | 客户名称 | -| paperType | String | C | 证件类型 | -| paperId | String | C | 证件号码 | +| type | String | M | 服务编码,用于查询数据库获取AES解密密钥 | +| request | String | M | AES加密字符串,解密后格式:type=服务编码&code=权益码&mac=加密后的客户id | +| channel | String | M | 渠道标识:12-手机银行,17-电话银行,41-CRM零售 | +| tranChnl | String | M | 渠道标识:12-手机银行,17-电话银行,41-CRM零售 | +| backUrl | String | C | 返回手机银行的地址,可为空 | +| instType | String | M | 客户自营代理属性:01-自营,02-代理 | +| provinceInstNo | String | M | 客户归属一分机构号 | **输出**(data字段内容): | 字段 | 类型 | 必填 | 说明 | @@ -391,9 +399,25 @@ | noticeMsg | String | C | 提醒信息文本 | **验收标准**: -- [ ] 能正确查询订单积分信息 -- [ ] 过期幸福点计算准确 -- [ ] 返回友好的提醒信息 +- [ ] 入参type(服务编码)为必填字段,缺失时返回“参数错误” +- [ ] 根据入参type查询数据库获取对应的aes_key和aes_iv +- [ ] 服务编码(type)不存在时,返回“暂不支持此服务”(在AES解密之前校验) +- [ ] 使用数据库查询到的aes_key和aes_iv能正确解密AES加密的request参数 +- [ ] 调用邮储过期积分查询接口成功时,正确返回查询结果 +- [ ] 调用邮储过期积分查询接口失败时,返回错误提示 +- [ ] 调用邮储过期积分查询接口超时时,返回“查询失败,请重试” + +**测试用例**: + +| 用例编号 | 测试场景 | 前置条件 | 输入数据 | 预期结果 | +|---------|---------|---------|---------|----------| +| TC-3.1.4-001 | 正常查询成功 | 邮储接口返回成功 | type=有效服务编码, request=有效加密参数 | code=0, 返回tranIntglNum、ovdueIntglNum、noticeMsg | +| TC-3.1.4-002 | 必填参数缺失-type | - | 不传type | code=2, msg="参数错误" | +| TC-3.1.4-003 | 服务编码不存在 | 数据库无该服务编码映射 | type=999999 | code=4, msg="暂不支持此服务" | +| TC-3.1.4-004 | AES解密失败 | 服务编码存在 | type=有效服务编码, request=无效加密字符串 | code=2, msg="参数错误" | +| TC-3.1.4-005 | 邮储接口返回失败 | AES解密成功,邮储接口返回失败 | type=有效服务编码, request=有效加密参数 | code=1, msg=邮储返回的错误信息 | +| TC-3.1.4-006 | 邮储接口调用超时 | AES解密成功,邮储接口超时5s | type=有效服务编码, request=有效加密参数 | code=1, msg="查询失败,请重试" | +| TC-3.1.4-007 | 无过期积分 | 邮储接口返回ovdueIntglNum=0 | type=有效服务编码, request=有效加密参数 | code=0, ovdueIntglNum=0 | --- @@ -428,14 +452,16 @@ **功能描述**:提供给邮储银行跳转服务详情页面,根据参数获取上游券码链接展示服务详情 **业务规则**: -1. 解密request参数获取服务编码、权益码、客户ID -2. 根据权益码查询订单获取券码链接 -3. 返回券码链接用于页面展示 +1. 验证服务编码(type),查询数据库获取AES解密密钥 +2. 服务编码不存在返回“暂不支持此服务” +3. 解密request参数获取服务编码、权益码、客户ID +4. 根据权益码查询订单获取券码链接 +5. 返回券码链接用于页面展示 **输入**: | 字段 | 类型 | 必填 | 说明 | |-----|------|-----|------| -| class | String | M | 服务编码,用于查询数据库获取AES解密密钥 | +| type | String | M | 服务编码,用于查询数据库获取AES解密密钥 | | request | String | M | AES加密字符串,解密后格式:type=服务编码&code=权益码&mac=加密后的客户id | | channel | String | M | 渠道标识:12-手机银行 17-电话银行 41-CRM零售 | | tranChnl | String | M | 交易渠道:12-手机银行 17-电话银行 41-CRM零售 | @@ -450,10 +476,23 @@ | backUrl | String | M | 返回手机银行的地址 | **验收标准**: -- [ ] 能正确解密request参数 +- [ ] 入参type(服务编码)为必填字段,缺失时返回“参数错误” +- [ ] 根据入参type查询数据库获取对应的aes_key和aes_iv +- [ ] 服务编码(type)不存在时,返回“暂不支持此服务”(在AES解密之前校验) +- [ ] 使用数据库查询到的aes_key和aes_iv能正确解密AES加密的request参数 - [ ] 能正确查询订单获取券码链接 - [ ] 权益码不存在时返回错误提示 +**测试用例**: + +| 用例编号 | 测试场景 | 前置条件 | 输入数据 | 预期结果 | +|---------|---------|---------|---------|----------| +| TC-3.1.6-001 | 正常查询成功 | 订单存在且有券码链接 | type=有效服务编码, request=有效加密参数 | code=0, 返回codeUrl和backUrl | +| TC-3.1.6-002 | 必填参数缺失-type | - | 不传type | code=2, msg="参数错误" | +| TC-3.1.6-003 | 服务编码不存在 | 数据库无该服务编码映射 | type=999999 | code=4, msg="暂不支持此服务" | +| TC-3.1.6-004 | AES解密失败 | 服务编码存在 | type=有效服务编码, request=无效加密字符串 | code=2, msg="参数错误" | +| TC-3.1.6-005 | 权益码不存在 | AES解密成功,订单不存在 | request解密后code不存在 | code=1, msg="订单不存在" | + --- ### 3.2 券码管理模块