支付系统开发(六):风控系统基础

支付系统做到最后,绕不开风控。之前几篇把支付核心链路、对账、退款都跑通了,但没有风控的支付系统等于在裸奔。这篇聊聊我在支付系统中搭建的基础风控模块——从交易风控的定位到规则引擎的设计思路。

风控在支付链路中的位置

风控不是一个独立系统,它嵌在支付的各个环节里。按介入时机可以分三类:

交易前风控(Pre-transaction):在用户发起支付之前就进行校验。比如登录设备异常检测、账户状态校验、收款方黑名单过滤。这一步成本最低,拦截效果最好。

交易中风控(In-transaction):支付请求提交后、真正扣款前的那个窗口期。这是风控的核心战场——规则引擎在这里跑。需要在毫秒级完成判断,不能拖慢支付体验。

交易后风控(Post-transaction):交易已完成,但还可以做事后分析。比如 T+1 的批量规则扫描、异常交易汇总、可疑账户标记。这一步主要是为了发现规则引擎漏掉的case。

我的实现里,交易中风控是重点。在支付服务调用渠道下单之前,插入一个风控决策节点:

用户下单 → 创建支付单 → 【风控决策】→ 调用渠道 → 回调处理
                            ↓
                     通过 / 拒绝 / 人工审核

风控决策的输入是一个"风控上下文",包含用户信息、交易信息、设备信息、历史行为等。输出是一个决策结果:PASS(通过)、REJECT(拒绝)、REVIEW(转人工审核)。

规则引擎设计

风控的核心是规则引擎。简单说就是把一系列规则跑一遍,每条规则给出一个风险分数,最后汇总做决策。

规则分类

我按风险维度把规则分成了几组:

1. 黑名单规则

最简单也最有效。维护几张黑名单表:

  • 用户黑名单:被标记过的欺诈用户
  • 设备黑名单:关联过欺诈行为的设备ID
  • IP黑名单:已知的代理/机房IP段
  • 收款方黑名单:高风险商户

命中黑名单直接返回REJECT,不走后续规则。

2. 频率规则

统计时间窗口内的交易行为:

  • 同一用户 1 小时内支付次数 > 10 次
  • 同一设备 24 小时内关联用户数 > 3
  • 同一银行卡 1 小时内支付次数 > 5

频率规则需要一个高性能的计数器,我用Redis的滑动窗口来实现。用 sorted set 存时间戳,ZRANGEBYSCORE 做窗口统计。

3. 金额规则

针对交易金额的异常检测:

  • 单笔金额超过用户历史最高金额的 N 倍
  • 日累计金额超过阈值
  • 首次交易金额异常偏高
  • 交易金额命中特定模式(比如反复试探 999.99 这种刚好在限额以下的金额)

4. 设备指纹规则

设备指纹是比较有效的反欺诈手段。采集的信息包括:

  • 设备型号、操作系统版本
  • 屏幕分辨率、时区
  • 是否root/越狱
  • 是否使用模拟器
  • 网络环境(WiFi/蜂窝/代理)

综合这些信息生成一个设备ID,再看这个设备ID的历史行为。设备指纹的采集我放在客户端SDK里,每次支付请求带上来。

风险评分模型

每条规则被触发后会产生一个风险分数。分数的设计:

规则类型 触发分数
黑名单命中 100(直接拒绝)
高频交易 30-50
金额异常 20-40
设备异常 20-60
新设备+大额 40

最终把所有触发规则的分数累加,根据总分做决策:

  • 总分 < 30:PASS
  • 30 ≤ 总分 < 70:REVIEW(进入人工审核队列)
  • 总分 ≥ 70:REJECT

阈值是可以动态调整的,放在配置中心里。业务上线初期可以把REVIEW的范围放宽一些,观察一段时间再收紧。

决策结果处理

三种决策结果的处理逻辑不同:

PASS:正常走支付流程,无感知。

REJECT:返回给用户一个模糊的错误("支付异常,请稍后重试"),不要告诉用户被风控拦截了。记录拒绝原因到风控日志,供后续分析。

REVIEW:支付先挂起(状态设为 RISK_REVIEWING),推到审核队列。运营在风控后台看到这笔交易的详情和触发规则,手动决定放行还是拒绝。要注意设置审核超时——比如 30 分钟没处理就自动拒绝。

常见欺诈场景

做风控之前,先了解对手在干什么:

盗卡交易:用偷来或买来的银行卡信息发起支付。特点是新设备 + 新用户 + 大额 + 收货地址与持卡人不符。

薅羊毛:批量注册小号,利用新用户优惠。特点是同一设备/IP关联大量账号,交易模式高度相似。

洗钱:通过大量小额交易将非法资金合法化。特点是高频、固定金额、快进快出。

退款欺诈:正常支付后发起恶意退款(声称未收到货等)。需要结合物流信息和历史退款率来判断。

试探攻击:用小额交易测试卡号是否有效,验证通过后再大额盗刷。特点是短时间内连续小额交易。

针对每种场景,规则引擎里都有对应的规则组合来应对。

架构层面的考虑

风控系统对性能要求很高——交易中风控的决策延迟要控制在 50ms 以内。几个关键设计:

  • 黑名单用 Redis + 本地缓存双层,热数据放内存
  • 频率统计全部走 Redis,不查数据库
  • 规则引擎用责任链模式,命中黑名单可以提前终止
  • 风控日志异步写入,不阻塞主流程
  • 规则配置通过配置中心下发,支持热更新

小结

这篇只是风控的基础部分。实际生产环境中,基于规则的风控只是起步——后面还有基于机器学习的实时风控模型、关联图谱分析、用户行为序列建模等等。但对于一个中小规模的支付系统来说,把规则引擎做好,已经能覆盖绝大部分风险场景了。

支付系统这个系列到这里告一段落。从支付核心流程、渠道对接、对账、退款到风控,基本把一个支付系统该有的模块都过了一遍。后面如果有新的实践再继续补充。