yeg
2026-09-17 c4baf2f1909ee78e610f371aad86df917839be5c
refs
用户 yeg <1347747024@qq.com>
星期四, 九月 17, 2026 18:13 +0800
提交者 yeg <1347747024@qq.com>
星期四, 九月 17, 2026 18:13 +0800
提交c4baf2f1909ee78e610f371aad86df917839be5c
目录 78d4d1d85aead4fc35ff4c2ceea6a7f8eab33775 目录 | zip | gz
parent 0c8ea845c81f25e29b1a1ec2727cc80328ce87c1 查看 | 对比
feat(payment): 接通关单查询,作废中的凭证不再交回客户端

真机复测(订单 544):「取消」已经很快,但反复「继续支付 → 关掉收银台」时每次都有一段「支付处理中」
——关单 18:06:03 答「处理中」,直到 18:07:15 才对账那一跳拿到结论,用户等了 72 秒。两条根因:

- 关单的查询对等物一直没接。汇付有专门的关单查询接口,文档写明「关单处理中应继续调用关单查询确认
结果」;我们只发关单、不问结论,结论只能等下一轮扫描,而通道几秒就关完了。副作用是快车道每次重发
关单都会让 close_attempts 增长,本属正常的记录会被判到上限,而「到上限」会顺手把订单取消。
- reusablePrepay 把 CLOSING/CANCEL_UNCONFIRMED 也算可复用(理由是「还可能被支付」),但那是我们
已经请通道关掉的凭证,通道可能早就关完了:交回去就换来微信收银台「订单状态异常,支付请求无效」。

改动:

- 新增 HuifuPaymentCloseQueryCommand 与 gateway.closeQueryMiniProgramPayment(SDK
V2TradePaymentScanpayClosequeryRequest,原交易定位信息与关单一致走 extend_info)。
- PaymentReconciliationService 新增 probeCloseConclusion/concludeUndecidedCloses:只有「关单成功」
算结论,落成 CLOSED 并结掉问题记录;还在处理中/关单失败/查询没答上来一律按「没有结论」处理。
- 三处调用:beginMiniProgramPayment(点继续支付时先问一次,关掉就当场建新凭证)、paymentStatus
(「刷新支付状态」真的能推进关单结论)、retryClose(先问再决定是否重发关单,不再重复计数)。
- reusablePrepay 只复用 PREPAY_CREATED。
- 「一张订单同时只有一张可被支付的凭证」没有放松:关单还没结论时支付接口仍返回 PAYMENT_PROCESSING,
不新建第二张(审计 §9 已复现过两张都能付的后果)。

回归三条:作废中的凭证关掉后立刻拿到新凭证、关单还在处理中时只等待且不新建、对账用关单查询拿结论
且不重发关单。全量 372 项,仅 testing.md 记录的 3 项基线失败。ADR-0004 的「查询对等物」清单补上这条。
1个文件已添加
6个文件已修改
214 ■■■■■ 已修改文件
.scratch/pending-order-payment-flow/issues/09-terminal-prepay-zombie-order.md 33 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
docs/adr/0004-active-query-is-authoritative.md 6 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/payment/HuifuPaymentService.java 19 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/payment/PaymentReconciliationService.java 47 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/payment/huifu/HuifuMiniProgramPaymentGateway.java 32 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/payment/huifu/HuifuPaymentCloseQueryCommand.java 12 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/test/java/com/talentcard/server/business/payment/PendingPaymentConfirmationTests.java 65 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史