执行时间:2026-10-13 02:39:47(微信侧到账时间)
发起人:义父(Lean)指示 · 执行:波波
结果:成功,已原路退回
| 项 | 值 |
|---|---|
| 订单号 | KL00006337(orders.id = 6337) |
| 商品 | 冈仁波齐纪念徽章(order_type = retail) |
| 金额 | ¥39.00(3900 分) |
| 原支付流水号 | KL0000633708279(微信侧 SUCCESS,支付于 10-10 12:58:13) |
| 微信退款单号 | 50303708752026101361009655849 |
| 我方退款单号 | RF-6337-1;库内 refund_no = RFN-6337-20261013-001 |
| 退款渠道 | ORIGINAL(原路退回) |
| 到账账户 | 中国银行借记卡 |
| 手续费 | 21 分(商户侧承担) |
status = SUCCESS,payer_refund = 3900trade_state = REFUNDrefunded/refund_records.status = executed(executed_amount_fen = 3900)order_events 已记录 refund_executed义父在 A 端点退款,后端返回 404。但路由确实存在(POST /api/admin/orders/{order_id}/refund/execute),
404 是 handler 内部抛的:
rec = SELECT ... FROM refund_records WHERE order_id = 6337 AND status = 'approved'
if not rec:
raise HTTPException(404, "无已审核通过的退款记录") # ← 命中的是这个
直接原因:refund_records 表全库 0 行。这套「客人申请 → 商户审批 → 平台执行」的退款流程
从上线起一次都没自发跑通过;订单的 refunding 状态是被直接改出来的
(order_events 里只有 created / paid,没有退款申请事件)。
本次处置:补一条 refund_records(status='approved', approved_amount_fen=3900, cash_refund_fen=3900),
再调用执行接口 —— 平台主动退款目前只能这样走。
| 项 | 实测 |
|---|---|
| 微信侧这笔钱 | trade_state=SUCCESS,¥39 确实收了 |
| 是否已退过 | RF-6337-1/2 微信侧均 RESOURCE_NOT_EXISTS ⇒ 未退过 |
| 凭据齐备 | is_configured()=True(mchid 1111804382,私钥存在) |
| 退款通知地址 | 已单独配置 …/pay/refund-notify ⇒ 不会单边账 |
| 状态机 | refunding → refunded(refund_complete/system)is_allowed=True |
| 租户隔离 | destinations 仅 1 条且 active,订单 destination_id 为 NULL ⇒ 不会撞 409 |
| 事务保护 | 整个 execute 在 conn.transaction() 内 |
执行纪律:先跑干跑(不带 --commit)确认 admin 鉴权与全部前置条件,
写操作数 = 0 之后才带 --commit 真执行。
前端传 { amount_fen, reason }(body),而后端 admin_execute_refund 不接受任何 body,
只按 refund_records.approved_amount_fen 退 ⇒ 填了也不生效,UI 在骗人。
refund_records 才走得通。 根治方向:让 admin_execute_refund 支持无 approved 记录时按传入金额直接退。
「钱退了、订单状态没变」的单边账。本次未发生;兜底是 notify_url 已配,
/refund-notify 会补状态。
/srv/kailash/secrets/ 未触碰/tmp 中含明文密码的 _reset_pw_inner.py 均已删除并复核/tmp 以明文形式短暂停留(现已清除)。按义父 10-04 口径,波波不主动轮换密钥——如需更换请另行指示