WIP-309 joint-payment 解除降级 · 契约核验矩阵(2026-09-13 一号)

一、前后端契约逐字段核验(代码级,100% 对齐)

项前端(services/distribution.ts + pages/joint-payment)后端(miniapp_distribution.py L640-695,303b)判定
路径/api/miniapp/distribution/joint-payment/generate@router.post("/joint-payment/generate") + prefix /api/miniapp/distribution✅
方法POSTPOST✅
登录态request 公共层 Bearer 自动挂(299 已证)Depends(get_current_user)✅
请求体{ orderNo }(string)JointPaymentGenerateIn { orderNo: str }✅
响应解包request 公共层 {code:0,data} 自动解包{"code": 0, "data": {...}}✅
orderIdJointPaymentResult.orderIddata.orderId(int)✅
qrContent渲染+复制data.qrContent(https://c.kailashi.cn/pages/joint-payment/join?token=..&orderNo=..)✅
expiresAt渲染data.expiresAt(ISO 24h)✅
订单不存在catch→unavailable 空态404✅ 诚实降级
非本人订单catch→unavailable 空态403✅ 诚实降级
状态不允许catch→unavailable 空态409(仅 booked/pending_payment 可发起)✅ 诚实降级

二、页面自愈机制核验(299 预留 catch)

三、运行时拓扑(2026-09-13 12:0x)

环境探测结果判定
生产 api.kailashi.cnPOST generate(无登录态)404🔴 代码在 main 未部署生产
生产 doc.kailashi.cn/apiPOST generate404同上(同后端)
staging 100.64.1.230:8089GET /api/miniapp/products000沙箱不可达(本机绑定,已知环境事实)

四、结论

三、299 八页回归扫(2026-09-13 12:1x,生产拓扑)

端点状态判定
POST /pay/orders/{id}/prepay401✅ 路由在
POST /orders401✅
GET /orders401✅
GET /orders/{id}401✅
GET /reviews401✅
GET /stories401✅
GET /products200✅ 公开
GET /guides200✅ 公开

结论:8/8 健康零回归——生产部署 303b 后 joint-payment 一枪即 299 九页 9/9 关账。(注:初扫误用 /leaders 路径 404,实际前端用 /guides,非回归。)