场景 a · 成功
全部普通券有效
Body: ["0473990306","3629327113"]
HTTP 200
areAllVouchersValid: true
faceValue: 100 + 500
totalFaceValue: 600
separate: true
→ 可进入 Redeem
场景 b · 部分失败
部分普通券无效
Body: ["0123456789","01234567"]
HTTP 200(注意仍是 200)
areAllVouchersValid: false
valid: ["0123456789"] faceValue 1000
invalid: ["01234567"]
→ 移除无效券后可重新验券
场景 c · 重复
普通券重复提交
Body: ["0123456789","0123456789"]
HTTP 200
第1条: isValid true, faceValue 1000
第2条: isValid false(重复)
invalidVoucherCodes: ["0123456789"]
→ 前端应防重复录入
场景 d · 401
Header 非法
Auth/Merchant/POS/DateTime 任一无效或为空
HTTP 401
{"message":"Unauthorized"}
→ 检查配置,非券码问题
场景 e · 400
Body 非法
Body: [] / null / [null]
HTTP 400
{"message":"Bad Request"}
→ 未录入券码不应发起请求
场景 f · 组券成功
有效组券展开
Body: ["0001234567"](1 个组码)
HTTP 200
areAllVouchersValid: true
展开: 7439470471 + 3575594396
各 faceValue 10000, total 20000
validVoucherCodes = 子券码
→ Redeem 仍传组码
场景 g · 无效组券
组券码本身无效
Body: ["2726518"]
HTTP 200
areAllVouchersValid: false
isValid: false, totalFaceValue: 0
validVoucherCodes: []
→ 提示券码无效
场景 h · 重复组券
同一组码提交两次
Body: ["05375611","05375611"]
HTTP 200
areAllVouchersValid: false
展开 2 组子券,部分 isValid true
invalidVoucherCodes: ["58063524"]
totalFaceValue: 20000
→ 虽计算出面值,仍不可 Redeem