选渠道时最容易达成共识的是费率,搭系统时最容易先动手的是页面。这两件事恰好都做在了末端:费率只是通道能力的一张报价单,页面只是整条资金链路最外面的一层。
前面几篇,我们把法币入金拆成了三条链路(卡支付、银行转账、本地支付)、三层风控(KYC、AML、交易风控)和一条异常确认链。这些讲的都是一笔钱怎么走完流程。
这一篇往前退一步,回答三个更上层的问题:
- 国家和渠道多起来之后,系统怎么搭才不会配置失控(11)
这三件事有先后关系:先选对通道,再搭好底座,最后才是按顺序实现。反过来做,会在第二步推倒第一步。
1|法币入金渠道怎么选
核心问题
渠道选择为什么不能只看费率?一个国家到底应该接几个渠道?
选渠道的会上,最容易达成共识的是费率。一行数字就能投票,也最容易向上汇报。
代价通常在半年后浮现。费率低一点的那家,只覆盖三个国家的卡收单,银行转账没接;回调之外没有查单接口,丢一单就得让客服手工核对;退款要走工单,平均两天;同样的用户结构下,拒付率是主通道的两倍。
费率是通道能力的报价单,不是通道能力的清单。 真正决定一条入金通道能不能长期跑的,是报价单背后那一整套东西。
十四个维度,四组验收人
下面这十四个维度可以归成四组。分组的意义在于:它们分别由不同角色负责验收。覆盖能力是产品和商务的事,资金能力是财务的事,风控合规是合规与风控的事,工程和运营能力是技术的事。
| | |
|---|
| | 能服务哪些国家的用户,是否需要为每个国家再单独找一条 |
| | 卡收单、银行转账、本地钱包、现金网络的差别,直接决定转化率 |
| | |
| | |
| | 单笔、单日、单月,是否按用户维度,限额以什么币种计 |
| | |
| | |
| | 百分比之外还有固定费用,小额订单下固定费用往往更致命 |
| | 能不能退款、退款是否回调、拒付由谁承担、争议如何举证 |
| | |
| | |
| | 回调之外有没有主动查询接口,决定异常时你有没有退路 |
| | API、SDK、托管页的完整度,以及文档能否照着做 |
| | 出问题时多久有人响应,有没有后台、报表和人工处理入口 |
最容易被跳过的四项
结算币种。 订单以美元提交、结算以另一种货币到账时,金额字段的口径必须提前定死:回调里的金额是下单金额还是扣款金额,折算发生在哪一步。定不下来,对账时就只能靠通道单号关联,金额本身无法解释差异。
限额的币种口径。 限额按韩元计而你按美元下单,超限判定就是一个黑盒。用户在下单时才被拒,而你无法在下单前复现这个判断,这类问题排查成本极高。
退款与拒付。 选型时几乎没人问,出事时才知道通道能不能退款、退款多久回来、拒付举证周期多长、损失由谁承担。
只有 Webhook 没有查单。 这相当于把全部异常处理押在回调的送达率上。回调在三次重试之后仍然丢失时,你没有别的手段把这笔单推到终态。
八个能力,八个必须问出口的问题
评估表的意义不是打分,而是强迫每个问题被问出来。
实际沟通过程中,答复的确定性比内容更重要。同一个问题,若对方只能给出"应该可以",就应当视为尚未确认,写进对接清单等书面回复。通道的能力边界在合同签署前后口径往往不同,越早把含糊项变成书面项,后面返工越少。
图 1|把八个能力维度做成一张评分表,费率只占其中一格;分数的作用不是选出最优通道,而是让每个维度都被问过一遍。
一个国家接几个渠道
这个问题没有通用答案,但有一个稳定的判断顺序:先看这个国家对收入的贡献,再看用户对支付方式的偏好分散程度,最后看你承担得起多少对账成本。
| | |
|---|
| | |
| | 双份对接与双份对账,金额、状态、时间口径都要能对齐 |
| | |
多渠道往往不是为了冗余,而是为了覆盖不同的人:小额高频走卡收单,大额走银行转账或虚拟账户,本地钱包覆盖没有卡的人群,现金网络覆盖最后一层。
但对账能力必须先行。两个渠道意味着两套状态命名、两套时间戳、两套金额字段。如果账务和状态机没有统一抽象,第二个渠道的接入成本会远高于第一个。
路由方式决定故障时的表现
路由不是接入之后才考虑的事。它决定了当一条通道开始异常时,系统是自动绕开,还是继续把用户送进去失败。
路由策略通常是组合使用:先按规则确定候选集,再在候选集内按成功率与成本排序。无论用哪种,都要明确写下切换条件。没有切换条件的路由,只是把流量随机分配而已。
五类异常,五种降级
降级最容易做错的一点是只做单向切换。通道恢复之后,流量需要能回去,否则降级会变成永久迁移。
前四类影响的是交易能否完成,第五类影响的是成本与用户体验。它们的共同点是:监控必须按通道、按国家、按支付方式拆分,否则总量正常会掩盖单点异常。
成功率要拆开看
总体成功率是监控面板上最不具指导性的一个数字。它由所有维度的加权平均构成,任何一个环节恶化,都会被其他环节的增长稀释掉。
拆开之后,至少要看这些维度:
同一个通道的总成功率可能稳定在九成以上,但某个发卡行的通道成功率只有六成,或者某个金额区间因为限额规则大量失败。这类问题在总量指标上不可见,在拆解后一目了然。
拆解还解决一个协作问题。通道方给出的成功率口径通常比你的乐观,因为他们只统计提交到他们之后的环节。把口径对齐到"从用户点击到订单终态",双方才在讨论同一件事。
结尾判断
渠道选择是支付产品、资金管理、风控和运营共同参与的决策。费率表只回答了其中一个角色的问题,其余三个角色的答案,藏在结算周期、退款规则、回调机制和异常处理流程里。
一个可用的收尾检查项:如果这条通道明天开始成功率下降两成,你的系统会怎么做。答得上来,说明这次选型是完整的。
2|多国家多币种入金系统怎么搭
核心问题
当交易所支持多个国家、多个法币和多个支付渠道时,系统如何避免配置失控?
接第一个国家的时候,国家是一个常量,写在哪里都不出错。
接第三个国家的时候,它变成了一串散落在代码里的条件判断。接第七个国家的时候,已经没人能说清一笔订单到底走了哪条规则。
多渠道多币种系统的失控,很少是因为技术能力不够。更多时候是配置没有地方放,于是散落到代码、表格和某位同事的记忆里。等到要排查一笔异常订单,才发现整条链路没有一处是完整的。
九个维度,复杂度来自交叉
这九项之间是乘法关系。国家数量乘以法币数量,再乘以支付方式与渠道的组合,才是需要维护的规则总量。从第 1 个国家到第 2 个国家,规则翻了一倍;从第 2 个国家到第 5 个国家,规则数量通常已经不是人力能覆盖的了。
所以要设计的是承载这些组合的地方,而不是逐个国家写判断。
七层分工
把系统分成七层,价值不在于分层本身,而在于每一层都有明确的职责边界。边界清晰之后,新增一个国家应当只改动配置层,交易处理层的代码不需要重新打开。
第三层是多数团队缺的一层。当路由逻辑直接写在下单接口里,新增一条通道就意味着修改核心链路;把路由抽成独立一层后,改动集中在规则配置上,主链路保持稳定。
第六层要守住一个边界:对账发现问题时,处理方式是生成差异单并走核销流程,而不是直接改状态或改余额。一旦允许对账流程反向写业务数据,资金的审计链条就断了。
图 2|国家、币种、法律实体、渠道、账务账户与钱包资产之间的关系,以及配置中心在路由层与账务层之间的位置。
多币种账户:六类余额
一个法币账户在任一时刻只显示一个可用余额,是很多问题的起点。
在途与待结算的区分最容易被省略,也最容易在排查时付出代价。 用户在浏览器上完成了支付,我方已向下游发起请求但未收到确认,这笔钱在系统里既不是可用也不是冻结,而是在等待一个未知的结果。当渠道回调迟迟不来,只有把这类金额单独记账,才能回答"今天到底有多少笔单悬在半空"。
多个币种同时存在时,还要额外约定两件事:各法币的金额精度与舍入规则,以及余额不足时的扣减顺序(可用余额与冻结余额谁先扣)。这两项一旦不一致,跨币种的对账差异永远收敛不了。
汇率不是一个数,是一条链
一笔入金从用户看到价格到资产入账,汇率会经过多个时点,每个时点的职责不同。
关键要求是每个时点都落库,并保留来源标记。只记录最终的入账汇率,等于放弃了对中间任何一个时点异常的追溯能力。当用户投诉"我看到的和到账的不一样",能拿出来的只有最终结果,无法还原差异产生的环节。
汇率的有效期也需要显式处理。报价过期后,系统是按新汇率重新报价,还是拒绝这笔订单,属于产品决策,但必须写进状态机,不能靠超时逻辑自然发生。
多时区,六个时间
跨境业务里,"今天"不是一个概念。
统一存储 UTC 是基础要求,真正需要决策的是业务上的日切点:限额按用户地区当地日切,还是按 UTC 日切;日报按哪个时区统计。这两个选择会直接改变限额判定与结算口径,必须在设计阶段定下来,并贯穿到所有报表。
渠道时间与账务时间之间的偏差也需要被允许存在。渠道侧记录的时间属于对方系统,落到我方账务时通常会有偏移。用渠道时间直接作为账务时间,会让日终对账出现跨日差异。
多法律实体
用户归属实体与收单实体可以不同,但一旦不同,用户的合同主体、资金路径、税务处理都会随之分化。这类结构性问题在业务初期图省事而合并处理,后期拆分时往往要重建账务主体关系。
多渠道配置中心
配置中心要能承接八类配置。
判断一个配置中心是否合格,有三个可验证的标准:
- 配置不改代码。 新增一个国家、调整一条路由,通过配置发布完成,不涉及发版。
- 配置可回溯。 任何一次变更都能查到变更人、变更时间、变更前后的值,以及当时生效的交易范围。否则事故复盘时无法判断是规则变了还是数据变了。
- 配置可灰度。 新规则先对部分用户或部分流量生效,观察指标后全量。没有灰度的配置系统,每次调整都是一次全站风险。
此外需要处理配置与在途订单的关系。规则变更时,已处于处理中的订单应当继续使用下单时的规则快照,而不是按新规则重新判定。这也是为什么配置需要在订单上留一份快照。
八个要看住的运营指标
这些指标的共同要求是可按维度下钻。总量指标用于看趋势,下钻指标用于定位问题。当支付成功率下降时,需要在一到两个操作内知道是哪个国家、哪种支付方式、哪条通道出了问题。
结尾判断
全球法币入金的复杂度,来自国家、币种、实体、渠道和监管规则的交叉组合。这个组合数量增长得很快,靠人力维护规则一定会失控。
配置中心和账务模型必须在业务规模扩大之前搭好。先想清楚一笔钱会经过哪些状态、落在哪个账户、由哪条规则决定走向,再去看页面要做成什么样。
3|从 0 到 1 设计 Web3 交易所法币入金系统
核心问题
如果从零开始建设法币入金能力,产品经理应该按照什么顺序设计?
第一次做入金,绝大多数团队的路径是一样的:先做页面。选法币、填金额、点支付、跳转、显示成功。两周就能跑通,演示效果也不错。
返工发生在后面。等到要接第二个渠道、第一次遇到回调丢失、第一次和渠道对账出现差额,才发现真正需要提前设计的东西一个都没设计:账务模型、状态机、异常处理、对账口径。
页面是用户看到的部分,它决定产品好不好用。状态、账务、异常和对账是没人看见的部分,它决定系统能不能活下去。
图 3|从用户流程、核心对象、状态机到账务账户的四层结构,页面只是最上面那一层,下面三层决定了资金能否被准确记录和追溯。
先划业务范围
范围决定架构,所以在画原型之前先回答六个问题,每个问题都对应一处后续的设计压力。
| |
|---|
| |
| |
| 是否需要在支付成功后立刻触发兑换,以及两条账务链路 |
| |
| |
| |
银行转账这一项值得单独提醒。它的失败模式与卡完全不同:用户可能少付、多付、用了别人的账户、备注写错。这些情况在系统里表现为"钱到了但配不上订单",需要有专门的挂账与人工认领流程。如果一开始把它当成和卡一样的同步支付来设计,第一次遇到就会卡住。
再定合规边界
合规决定了哪些用户可以用、能用多少、出问题时的可逆性。
最后一项是入金业务里最棘手的组合:用户支付成功、资产已兑换并提到外部地址,随后发卡行发起拒付。此时资金已经离开平台,回收手段有限。这类风险要在限额、冷静期和兑换触发时点的设计上提前考虑,而不是等拒付发生后再补规则。
用户流程
流程本身不复杂,复杂的是每一步失败后停在哪里。
设计流程时要为每一步定义一个明确的等待态和超时后的处理方式。"等待渠道确认"与"风控审核"这两个环节最容易变成黑洞:用户看不到进展,客服也无法解释,因此它们需要有可查询的状态和可承诺的时长。
核心对象
对象之间的关系决定了数据模型的稳定性。法币入金至少涉及十一个对象。
这里有一个需要提前确认的层级关系:入金订单是用户的意图,支付交易是具体尝试,渠道订单是某条通道的一次请求。 把三者压成一个对象,会导致用户换一种支付方式重试时,无法区分是同一笔意图的第二次尝试,还是两笔独立订单。这个区分直接影响限额的累计口径与对账的匹配方式。
状态机
入金系统的状态有六类,它们的推进速度与责任方各不相同,因此不适合合并成一个订单状态。
分开维护的原因是它们的终态判定条件不同。支付交易成功不代表入金订单完成,中间还隔着风控与兑换;兑换完成也不代表资产已经入账。若只用一个订单状态描述全过程,任何一个环节的重试都会让状态反复横跳。
状态机还需要两条强制规则:状态只能单向推进,不允许从终态回退;每次跃迁都要记录触发来源,区分是回调、主动查询还是人工操作。
渠道接入
渠道对接的技术要点集中在九处,任何一处缺失都会在运营期变成手工成本。
| |
|---|
| |
| |
| |
| |
| |
| 以业务单号与渠道单号双重去重,覆盖重复下单与重复回调 |
| |
| |
| |
这九项里,错误码映射常被忽略。渠道返回的错误码往往粒度很细,但用户能理解的类别只有几种:可重试、需换支付方式、需补充信息、永久失败。没有映射表,前端就只能把原始错误码展示出来,或者统一提示"支付失败"。
账务
账务设计的检验标准是:任何一笔钱,都能从用户账户一路追到渠道账户,中间不缺环。
按复式记账的方式组织这七个账户,借与贷必须平衡。这不只是财务规范,也是排错手段:当某笔交易的方向或金额写错时,借贷不平会立刻暴露;而在单式记账下余额仍然显示正常,错误要等到对账时才出现。
汇兑损益账户在多币种场景中尤其重要。 用户以美元支付、结算以另一种币种到账时,中间存在汇率敞口,这部分差额需要有归属,不能长期挂在在途账户里。
异常
异常处理的能力决定系统的可用性下限。八类场景需要在设计阶段就有明确的处理路径。
| |
|---|
| 不重复下单,先按业务单号查单确认,再决定重试或关单 |
| 定时任务按订单维度补偿查询,补偿频率与订单年龄相关 |
| 以业务单号与渠道单号双重识别,多付部分进入人工退款流程 |
| 进入挂账池,按金额与备注尝试自动匹配,失败转人工认领 |
| |
| |
| |
| 生成差异单,区分方向与类型,走核销流程而非直接改数 |
前四项属于支付链路,中间两项属于运营流程,后两项属于资金安全。它们的共同要求是每类异常都能在后台被检索到,并有明确的当前状态与下一步动作。没有状态的异常,最终都会变成客服工单。
运营后台
后台不是内部工具,它直接决定了异常发生时能多快恢复。至少需要八项能力。
"重发回调"这一项容易被认为多余,因为它本应自动完成。实际运营中,重新投递是恢复一笔卡住订单最快的手段,比等待补偿任务快得多,也更容易向用户解释。
审计日志则需要覆盖所有人工写操作。人工越过自动化流程修改资金或状态时,必须留下可追溯的记录,这是资金类系统的底线要求。
监控指标
指标的作用是让人在问题扩大之前发现它,因此需要覆盖链路的不同阶段。
所有指标都要能按国家、币种、支付方式和渠道下钻。只看总量的问题在第 10 节已经说过:总量正常会掩盖单点异常,而单点异常往往就是用户集中投诉的地方。
最小可行版本
MVP 的范围应当小到能在真实业务中跑通一整条闭环,包括对账。
最后两个部分最容易在 MVP 阶段被砍掉,但它们的成本很低,缺席的代价很高。支付类系统的异常处理能力与业务规模无关:一个渠道也会丢回调,一笔订单也会对不上账。
后续扩展
这些扩展有一个共同的依赖:账务与状态模型的抽象程度。抽象做得好,扩展是加配置和加账户;抽象没做好,每一次扩展都要改动核心链路,同时影响已经在跑的通道。
结尾判断
设计法币入金时,应先确定资金和合规边界,再设计支付流程和页面。页面两周就能做出来,账务模型和状态机一旦做错,就要带着线上数据返工。
一个可用的检验顺序是:能不能说清一笔钱从用户发出到资产入账,会经过哪些状态、落在哪些账户、由哪条规则决定下一步。答得上来,剩下的部分都只是实现工作。
结语:先选对通道,再搭好底座,最后才是页面
三篇讲下来,其实是三个递进的动作:
- 选通道(10):把费率放回它该在的位置,用十四项能力、八个问题、五种降级和拆解后的成功率,判断一条通道值不值得长期跑。
- 搭底座(11):用九项配置维度和七层分工,把国家、币种、实体、渠道的组合收进配置中心,让新增市场只改配置而不动主链路。
- 按顺序落地(12):先定业务范围和合规边界,再定状态机、账务与异常处理,页面放在最后。
这三件事的顺序不能颠倒。通道选错了,底座再稳也跑不出量;底座没搭,第二个渠道就会拖垮对账;顺序错了,返工的成本会由财务和客服共同承担。
法币入金这件事,用户看到的永远只是一个页面。决定这个页面能不能长期存在的,是它背后那套能选、能配、能记、能追的体系。