docs(t218): freeze single-submit reconciliation contract

This commit is contained in:
QiuSW
2026-07-28 16:56:17 +08:00
parent 1e87b6273a
commit 682cc7327c
8 changed files with 223 additions and 10 deletions
+29
View File
@@ -314,6 +314,35 @@ App 到达确认订单页并先加密保存 READY 后,提交当前 card/detail
task/execution/claim、数量、预算和 evidence 归属后,把同一 dry-run 置为 READY 并写
事件;相同请求可重放。该响应不表示订单已提交,且不授权付款。
### `POST /api/v1/tasks/{task_id}/order-submissions/start`
T-218 App 在最终提交前调用。请求带 BUYER bearer、claim token、
`Idempotency-Key`,body 固定 device、execution、generation、authorization、
command id/hash、dry-run id/hash 和 App 重新核验的 SKU/数量/单价/总额。服务端要求
有效租约、未取消、authorization=`EXECUTING`、dry-run=`READY` 且所有快照完全一致。
成功事务内创建一个 `order_submission`、写 `ORDER_SUBMISSION_FENCED` 并使原授权
不可再次创建 submission。响应返回稳定 submission ID 和 `fenced_at`。同 key/body
重放返回相同记录;同 key 不同 body、第二个 submission 或非 READY 返回冲突。围栏
成功只表示 App 获得过一次点击机会;从此即使响应丢失或 App 退出也只能对账,不能
再次提交。
### `POST /api/v1/tasks/{task_id}/order-submissions/{submission_id}/reconcile`
App 唯一识别待付款订单并先上传受控 evidence 后,提交订单编号、平台显示下单时间、
标题、SKU、数量、金额、状态和 evidence asset/hash。服务端核对原 device/task/
execution/generation、submission、期望快照、证据归属和幂等键;成功将 submission
置为 `RECONCILED`、authorization 置为 `CONSUMED` 并记录
`order_submitted=true`。订单编号不得进入 URL、日志、事件 message 或模型字段。
### `POST /api/v1/tasks/{task_id}/order-submissions/{submission_id}/manual-review`
围栏后无法唯一回读订单时,App 用相同身份提交受限 reason code 和可选 evidence。
服务端将 submission 置为 `MANUAL_REVIEW` 并写审计事件,但不释放围栏、不允许生成
第二个 submission。后续只允许人员或同一设备重新对账,不提供“重试提交”接口。
三个接口都不接收支付方式、支付密码或付款结果,也不授权客户端点击付款控件。
## 设备与领取
### `POST /api/v1/devices/heartbeat`