docs(changelog): order-v3 每日审查修正 发票金额String序列化(admin)+售后mp归属校验(mp)
这个提交包含在:
父节点
77a1c4a780
当前提交
b1d70a9020
@ -0,0 +1,31 @@
|
||||
# 【修正·小程序】售后工单 mp 端接口加归属校验(防横向越权)
|
||||
|
||||
> 模块:order-v3 售后工单(aftersale)小程序端
|
||||
> 类型:安全加固(每日审查驱动,新模块上线前修正)
|
||||
> 影响端点:`/v3/mp/aftersale/ticket/**`(我的工单列表 / 详情 / 撤回)
|
||||
> 关联:售后工单中心 PR1-5(#4162/#4165/#4168/#4173/#4185)的每日审查修正
|
||||
> 测试服已部署验证(9443 实测端点 200)
|
||||
|
||||
## ⚠️ 关键说明
|
||||
|
||||
售后工单 mp 端三个用户入口此前缺少归属校验,任意登录用户传他人 `ticketId`/`orderId` 即可读取或撤回他人工单(横向越权 IDOR)。本次加固:**经订单归属校验当前用户是否为下单人**,非本人操作返回错误码 **586014(TICKET_NOT_OWN)**。
|
||||
|
||||
正常业务流程下,小程序用户只操作自己订单的售后工单,**不会触发**该错误;前端无需改动,仅需对 586014 做兜底提示(如「无权访问该工单」)。
|
||||
|
||||
## 1. 受影响端点与行为
|
||||
|
||||
| 端点 | 修正 |
|
||||
|------|------|
|
||||
| `GET /v3/mp/aftersale/ticket/my`(我的工单列表) | 新增按当前用户校验 `orderId` 归属;端点入参不变,仅服务端加校验 |
|
||||
| `GET /v3/mp/aftersale/ticket/{id}`(工单详情) | 校验工单所属订单归属当前用户,非本人抛 586014 |
|
||||
| `POST /v3/mp/aftersale/ticket/{id}/withdraw`(撤回) | 同上归属校验,非本人不可撤回(且不再触发他人 OA 审批撤销) |
|
||||
|
||||
## 2. 附带修正:撤回工单不再消失
|
||||
|
||||
撤回(WITHDRAWN)此前被误当软删处理,导致撤回后的工单在「我的工单」列表/详情中**永久不可见**。本次修正后,**撤回是可见终态**,撤回的工单仍可在列表与详情中查看(状态显示「已撤回」)。
|
||||
|
||||
## 3. 错误码
|
||||
|
||||
| code | 含义 |
|
||||
|------|------|
|
||||
| 586014 | 无权操作该售后工单(非本人订单)|
|
||||
@ -0,0 +1,50 @@
|
||||
# 【修正·管理后台】发票管理接口金额字段改 String 序列化(对齐平台金额约定)
|
||||
|
||||
> 模块:order-v3 发票(invoice)管理后台
|
||||
> 类型:契约修正(每日审查驱动,非新增端点)
|
||||
> 影响端点:`/v3/admin/order/invoice/**`(发票申请/开票/重传/分页列表)
|
||||
> 关联:发票补齐 PR1-4(#4171/#4172/#4173/#4174)的每日审查修正
|
||||
> 测试服已部署验证(9443 真 token 实测 200,金额字段确认为字符串)
|
||||
|
||||
## ⚠️ 关键说明
|
||||
|
||||
发票管理后台部分响应 VO 的金额字段(`BigDecimal`)此前漏标 `@JsonSerialize(ToStringSerializer)`,会被全局 Jackson 序列化成 **JSON 数字**(如 `0`),与平台「所有金额一律 String」约定不一致。本次修正后统一返回**字符串**(如 `"0"`、`"1280.00"`)。
|
||||
|
||||
前端按平台惯例**以字符串解析金额**即可,无需改动;若此前已按数字解析这几个字段,请改回字符串。
|
||||
|
||||
## 1. 受影响字段
|
||||
|
||||
| VO | 字段 | 修正前 | 修正后 |
|
||||
|----|------|--------|--------|
|
||||
| InvoicePageStatsVO(分页统计) | requestedAmount / issuedAmount / pushedAmount / currentMonthIssuedAmount | 数字 `0` | 字符串 `"0"` |
|
||||
| InvoicePageItemRespVO(分页行) | amount | 数字 | 字符串 |
|
||||
| AdminInvoiceApplyRespVO(代客申请响应) | amount | 数字 | 字符串 |
|
||||
|
||||
## 2. 实测样例
|
||||
|
||||
请求:`GET /v3/admin/order/invoice/page?pageNo=1&pageSize=5`(Bearer admin token)
|
||||
|
||||
响应(节选,金额均为字符串):
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "成功",
|
||||
"data": {
|
||||
"records": [],
|
||||
"total": 0,
|
||||
"stats": {
|
||||
"requestedCount": 0,
|
||||
"requestedAmount": "0",
|
||||
"issuedCount": 0,
|
||||
"issuedAmount": "0",
|
||||
"pushedCount": 0,
|
||||
"pushedAmount": "0",
|
||||
"currentMonthIssuedCount": 0,
|
||||
"currentMonthIssuedAmount": "0"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
count 类计数字段仍为数字(非金额,不受影响)。
|
||||
正在加载...
x
在新工单中引用
屏蔽一个用户