docs(t218): freeze single-submit reconciliation contract
This commit is contained in:
+29
@@ -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`
|
||||
|
||||
Reference in New Issue
Block a user