渠道路由源码流程图

这张图不是泛泛谈“按商户、币种、支付方式路由”,而是把项目源码里真实的执行链画出来:交易侧如何发起路由、路由层如何分支、信用卡规则如何匹配、Recurring 如何复用通道、最后又怎样把结果回写到银行通道信息。
规则页 ≠ 最终渠道页 源码版 DPAN / 本地支付 / 信用卡 规则组 + 通道能力 面试可直接复述
你的后台截图不是“最终路由结果页”,而是 route_rules 规则条件页。它配置的是持卡人国家、3D 豁免金额、3D 触发金额、风控分数这些命中条件;真正选到哪个渠道,还要继续经过规则组优先级、商户绑定关系和渠道能力过滤。
流程图 建议先从左到右看主干,再重点看三处:`channelRouteSelect` 的分流、信用卡规则匹配、`supplementLogic` 的兜底。
渠道路由源码流程图

你可以怎么理解

  • 你截图里的查询条件,和 RouteRuleDTO / RouteRulePageRQ 里的字段是一一对应的,所以这页本质上是在维护路由命中条件,不是在直接维护最终渠道结果。
  • 真正决定最终渠道的,不只是 route_rules,而是 route_rule_bind 先把商户和卡组绑定到规则组,再由 route_rule_group_detailpriority 排序,最后通过 route_rule_group_channel 找到挂在规则下的具体渠道。
  • 交易模块不自己拍板选通道,而是由 `BasePaymentServiceImpl.acquireChannelRoute(...)` 组装 `ChannelRouteDTO` 后,统一交给 `RouteService.channelRouteSelect(...)`。
  • 路由先按 `DPAN 卡 / 本地支付 / 信用卡` 三条支线拆开,这一步已经说明不是所有支付方式走一套规则。
  • 信用卡路由的核心,是先查“商户绑定规则组 + 系统默认规则组”,再按 `priority` 从高到低匹配,而不是简单按通道列表轮询。
  • 规则命中后也不一定是固定某一条通道,同一条 `ruleId` 下如果挂了多个通道,源码会随机选一个,等于在规则层面做了流量分摊。
  • Recurring 明显优先“复用首笔或最近成功通道”,这比每次都重新路由更稳,也更符合支付链路的一致性思路。
  • 如果商户规则没有命中,代码不会立刻失败,还会进入 `supplementLogic`,用商户默认规则或系统默认规则做兜底。
面试时别只说“我们有路由规则”。更像源码的说法是:后台先维护规则条件,再把规则编进规则组,再把规则组绑定到商户卡组,交易进来后由统一 RouteService 做条件匹配、优先级判断、通道能力过滤和默认兜底。