3. 支付订单领域分析:识别支付订单上下文与核心业务能力
在支付系统中,支付订单并非简单的交易记录,而是承载了资金流转、状态机演进、对账与风控的核心聚合。本章从领域驱动设计视角,对支付订单进行领域分析,明确其限界上下文边界,并提炼出支撑支付业务的核心能力。
3.1 支付订单的限界上下文
支付订单处于多个上下文的交汇点。为避免概念混淆,必须将交易订单(业务订单)与支付订单(资金订单)严格分离。下表展示了二者的核心差异:
| 维度 | 交易订单上下文 | 支付订单上下文 |
|---|---|---|
| 核心职责 | 管理商品、数量、价格、用户地址 | 管理支付金额、支付方式、渠道、状态机 |
| 生命周期 | 从创建到完成/取消 | 从待支付到支付成功/失败/退款 |
| 金额可变性 | 可修改(优惠、运费调整) | 一旦创建,支付金额不可变(幂等关键) |
| 对账粒度 | 按订单行对账 | 按支付单号+渠道流水对账 |
| 典型聚合根 | Order(订单) | PaymentOrder(支付订单) |
领域边界原则:支付订单上下文只关注“谁付了多少钱、通过什么渠道、当前状态是什么”,不关心用户买了什么商品。商品信息通过交易订单ID关联,但不在支付上下文中展开。
3.2 支付订单上下文的核心业务能力
通过事件风暴与业务专家访谈,我们识别出支付订单上下文必须提供的六项核心业务能力:
- 支付订单创建 —— 接收交易订单发起的支付请求,生成唯一支付单号,锁定支付金额与渠道。
- 支付执行 —— 调用第三方支付渠道(、支付宝、银联),发起扣款请求,并记录渠道返回的流水号。
- 支付结果通知 —— 处理异步回调(同步/异步),更新支付订单状态,并通知交易订单上下文。
- 支付状态查询 —— 提供幂等的状态查询接口,支持交易系统、用户端、对账系统轮询。
- 支付超时处理 —— 定时扫描超时未支付的订单,执行自动取消或降级处理。
- 退款处理 —— 基于原支付订单发起退款,生成退款子单,保证退款金额不超过原支付金额。
设计提示:支付执行与结果通知之间通常存在“最终一致性”窗口。建议在支付订单聚合中维护一个支付尝试记录(PaymentAttempt)值对象,用于追踪每次渠道调用的请求与响应,便于对账与问题排查。
3.3 支付订单聚合模型(核心结构)
下图展示了支付订单聚合的内部结构,包含聚合根、实体、值对象以及它们之间的关系:
3.4 核心业务能力与聚合方法的映射
将六项核心业务能力映射到聚合方法,形成清晰的领域接口:
| 业务能力 | 聚合方法 | 输入参数 | 输出/事件 |
|---|---|---|---|
| 支付订单创建 | createPaymentOrder() |
交易订单ID、金额、渠道 | PaymentOrderCreatedEvent |
| 支付执行 | executePayment() |
支付订单ID、渠道参数 | PaymentExecutedEvent |
| 支付结果通知 | handlePaymentResult() |
渠道流水、支付结果 | PaymentSucceededEvent / PaymentFailedEvent |
| 支付状态查询 | getPaymentStatus() |
支付订单ID | 当前状态 + 最后尝试记录 |
| 支付超时处理 | markAsTimedOut() |
支付订单ID | PaymentTimedOutEvent |
| 退款处理 | createRefund() |
支付订单ID、退款金额 | RefundCreatedEvent |
常见误区:不要在支付订单聚合中直接调用第三方渠道的HTTP接口。渠道调用应通过领域服务(Domain Service)或防腐层(Anti-Corruption Layer)封装,聚合只负责状态判断与事件记录,保持领域模型的纯净。
3.5 支付订单状态机
支付订单的状态演进是领域建模的核心约束。下图展示了完整的状态转换路径:
幂等设计关联:状态机中的每个状态转换都对应一个幂等Key。例如,“支付中→支付成功”的转换必须携带渠道返回的渠道流水号作为幂等Key,防止重复回调导致状态错误。
3.6 领域事件清单
支付订单上下文通过领域事件与外部上下文通信。以下是关键事件列表:
- PaymentOrderCreatedEvent —— 支付订单创建后发布,交易订单上下文监听后更新关联状态。
- PaymentSucceededEvent —— 支付成功时发布,包含支付订单ID、渠道流水、成功时间。
- PaymentFailedEvent —— 支付失败时发布,包含失败原因、渠道错误码。
- PaymentTimedOutEvent —— 超时取消时发布,交易订单上下文据此恢复库存。
- RefundCreatedEvent —— 退款申请创建后发布,对账系统开始跟踪退款状态。
领域分析结论:支付订单上下文是一个高内聚、低耦合的限界上下文。其核心聚合PaymentOrder通过严格的状态机、不可变的金额值对象、以及幂等的渠道调用记录,为支付系统提供了可靠的基础。下一章将基于此模型,深入讲解幂等Key的生成规则,确保支付操作在分布式环境下的精确一次语义。