交易全流程流程图

从商户创建交易,到银行返回、MQ、结算入账、余额释放、出款、通知和对账闭环。
提示:建议先看总览版讲清主链,再切到明细流程版看完整 Mermaid;明细版支持缩放和拖拽。
这个版本把超长流程拆成 8 个阶段来讲,更适合你自己理解,也更适合面试时按顺序口述。你可以先把每个阶段讲顺,再切换到明细版看完整节点和兜底分支。
01

商户入口

  • 商户通过 `open-api`、`merchant-gateway` 或 checkout 创建 payment。
  • 交易先进入 trade,而不是直接进银行或结算。
  • 这一步只是在平台侧生成一笔待处理交易。
关键对象:`payment` 初始状态通常是 `pending + incomplete`。
02

创建主单

  • trade 生成 `paymentId`、`clientSecret` 并保存主单。
  • 同时落支付方式快照、billing、shipping、device、products 等上下文。
  • 如果只是 create,就先停在未确认状态。
关键对象:`payment` 是平台主视角,后面所有链路都围着它转。
03

确认与风控

  • confirm 时做参数校验、商户能力校验和 Redis 并发锁。
  • 初始化 `payment_bank`,准备记录银行侧交互结果。
  • 卡支付先过 risk-control,再决定是否送银行、是否建议 3DS。
关键点:风控在交易前做业务决策,挡住高风险单。
04

通道执行

  • bank-channel 根据支付方式、币种、路由、3DS、预授权能力选具体通道。
  • 统一适配各家银行报文、签名、回调、查单。
  • 银行可能返回成功、失败、处理中、预授权成功或 nextAction。
关键对象:`payment_bank` 承接银行单号、returnCode、nextAction。
05

状态回写

  • trade 根据同步返回、异步回调或查单结果推进状态机。
  • `status`、`statusDetail`、`actionStatus` 一起表达交易当前所处阶段。
  • 普通成功进入 complete,预授权则要 capture 后才进入成功主链。
关键点:pending 不直接判失败,后面还有回调、查单、对账修正。
06

异步通知与结算

  • complete 后并行发商户通知 MQ 和结算 MQ。
  • 发送失败先落 `mq_send_retry`,由定时任务补发。
  • settlement 消费 `SettleDTO`,按 `type + businessNo` 幂等入账。
关键点:trade 不直接改余额,账务靠 MQ 异步最终一致。
07

余额释放与出款

  • `charge` 先生成 `settle_transaction`,并把钱记到 pending。
  • 到 `availableOn` 后由任务把 pending 释放成 available。
  • payout 再从可用余额中归集、扣账、生成出款批次和后续通知。
关键对象:`settle_transaction`、`settle_balance`、`settle_payout`。
08

对账与补偿

  • 银行回调丢失、MQ 失败、账务不一致、payout 异常都要靠补偿和对账修复。
  • 能自动修的补状态、补 MQ、补反向流水。
  • 不能自动修的进入人工排查和调账。
关键点:支付系统价值不只在成功流程,更在异常闭环。