Przeglądaj źródła

App对接文档补充下单章节:各场景下单方式与服务端处理差异

qmj 5 dni temu
rodzic
commit
7d2591f32f
1 zmienionych plików z 15 dodań i 2 usunięć
  1. 15 2
      specs/008-promotion-coupon/app-integration.md

+ 15 - 2
specs/008-promotion-coupon/app-integration.md

@@ -95,7 +95,18 @@
 
 ## 4. 下单:版本 2 显式接入
 
-继续用 **`POST /system/userOrder/createOrder`**,在 `items[0]` 增加 `promotionPricingVersion: 2`:
+**下单接口不变**:仍是 `POST /system/userOrder/createOrder`,没有新增下单接口;`promotionPricingVersion` 只是显式开关,不传就完全走旧流程(旧版本 App 不受任何影响)。
+
+各场景下单方式(算价已统一,下单按场景区分):
+
+| 场景 | 结算页报价 | 下单方式 | 服务端处理差异 |
+|---|---|---|---|
+| 平台骑手外送 | /deliveryQuote | **传 version=2**(推荐) | 同一事务内重新报价并核对客户端 amount/freight/父单应付,不符返回 `quoteChanged`;父单金额、food JSON、优惠快照全部以服务端为准 |
+| 商家自配送 | /deliveryQuote | **传 version=2**(推荐) | 与上完全同流程,免运快照 F=0;运费结算归商家由后端订单快照 `selfDelivery=1` 处理,App 无感知 |
+| 自取 / 堂食 | /deliveryQuote(A=G) | **旧流程,不带 version=2** | 下单字段结构与旧版一致(food/amount 原样传);服务端不重算,金额以结算页报价为准;误传 version=2 返回 `unsupportedOrder` |
+| 旧版本 App | /calculate | 旧流程 | 完全不变 |
+
+版本2请求体(外送示例,自取/堂食不要带 version=2),在 `items[0]` 增加 `promotionPricingVersion: 2`:
 
 ```json
 {
@@ -122,10 +133,12 @@
 ```
 
 **必须遵守:**
-- `items` 必须只有 1 个、父/子 `type` 都为 0(**版本2下单仍限外送**,含商家自配送门店,其免运快照 F=0);自取/堂食下单继续走旧流程;否则返回 `unsupportedOrder`。
+- `items` 必须只有 1 个、父/子 `type` 都为 0(**版本2下单限外送**:平台骑手与商家自配送门店均可,自配送单免运快照 F=0);自取/堂食下单走旧流程不带 version=2;违反返回 `unsupportedOrder`。
 - `item.amount` = 报价的 `payableAmount`(A),`item.freight` = 报价的 `deliveryFee`(R)——**免运时 freight 也照传 30,不要改成 0**;父单 `actualPayAmount` = A。服务端会在同一事务内重新报价并逐项核对。
 - `cartItems` 必传(含 `specValueIds`);`food` 里的价格服务端会忽略并用数据库价格重写。
 
+**与计算阶段的衔接:** version=2 下单时服务端会用**下单时刻**的最新报价重算(活动可能已结束/运价变化),所以结算页拿到的金额若已过期,下单会收到 `quoteChanged`——App 重新调 deliveryQuote 刷新后让用户确认即可,不要静默重试提交。
+
 **错误处理:**(业务错误走既有 AjaxResult 错误机制,`msg` 返回**按用户语言本地化后的文案**;下表 key 仅作对照,不要拿 key 字符串做 UI 判断)
 
 | key | 场景 | App 处理 |