🎯 收款码智能路由
按客户 IP 归属地、权重自动选择最优收款码,提升支付成功率
功能简介
系统根据客户的 IP 归属地和您配置的 权重规则,自动从候选收款码中挑选一个展示给客户。
为什么需要?
- 📈 提升成功率:客户 IP 与收款码归属地一致,微信/支付宝风控更宽松
- ⚖️ 分担风险:多码加权随机,避免单码被风控
- 🔒 精准管控:哪个地区的客户走哪个码,一目了然
实测效果:地域匹配策略可提升支付成功率约 15~20%(尤其对微信商家码敏感)
工作原理
客户下单时的完整链路:
1. 客户点支付链接
↓
2. 系统获取客户 IP → 本地库查归属地(省/市/运营商)
↓
3. 匹配路由规则(按优先级从高到低)
↓
命中规则 → 从规则指定的候选码池中选码
↓
未命中 → 走原逻辑(本人码优先 → 下级码 BFS)
↓
4. 多个候选码时 → 按 weight 字段加权随机
↓
5. 展示收款码给客户
优先级顺序:路由规则 > 省份匹配 > 权重随机 > use_count 最少
IP 检测工具
位置:商户后台 → 收款工具 → 📍 IP 检测
用途:
- 查看当前访问 IP:显示你现在的 IP + 省份 + 城市 + 运营商(本地库)
- 验证 IP 归属地:一键跳 ip138 核对准确度
- 查询其他 IP:输入任意 IP,看它的归属地
页面元素
| 元素 | 说明 |
|---|---|
| 当前 IP | 红色大字,含 ip138 外链 |
| 省份/城市/运营商 | 本地库查询结果(ip2region.xdb) |
| 查询框 | 任意 IP → 查归属地 |
| 常用地区参考 | 34 个省级行政区列表 |
本地库识别不准? 点 ip138 外链人工核对,以官方为准。
绑定 IP(上传收款码时)
上传收款码时,可以给每个码绑定一个 IP,系统自动识别归属地。
操作步骤
1
打开上传弹窗收款工具 → 收款码管理 → 新增
2
找到「绑定 IP」字段在「归属地区」下方
3
点「🔍 用我的 IP」自动填你当前 IP
或手动输入 IP
或手动输入 IP
4
保存后自动入库系统把 IP 归属地写入
bind_province / bind_city匹配逻辑
下单时,系统会对比:
- 客户的 省份(IP 库实时查)
- 收款码的 region_province(手动填的归属地区)
- 收款码的 bind_province(从绑定 IP 自动识别的)
只要其中一个匹配,该码就是优先候选。
小技巧:绑定 IP 比手填省份更准,因为 IP 直接反映你手机在哪个地区收的款。
路由规则管理
位置:商户后台 → 收款工具 → 🎯 收款码路由
页面结构
- 规则列表:所有规则,按优先级排序
- 新增/编辑表单:选类型 + 配置匹配值 + 选候选码
规则字段
| 字段 | 说明 |
|---|---|
| 规则名 | 自己看的名字,如「广东优先」 |
| 优先级 | 数字,越小越先匹配(默认 100) |
| 匹配类型 | 省份 / 权重 / 全部(见下方) |
| 状态 | 启用 / 停用(一键切换) |
| 备注 | 选填 |
可用收款码
规则里能选的码 = 你 + 全部下级的收款码。这样你可以给下级码也配路由。
规则类型 · 按省份
适用场景:把某个省的客户单独分配给指定码(本地风控更松)
配置步骤
- 匹配类型选「按省份」
- 勾选一个或多个省份(可多选)
- 选择该规则的候选码(可以选多个)
- 保存
匹配逻辑
客户省份 ∈ 规则勾选的省份 → 命中
↓
从规则的候选码池里随机取(按 weight 加权)
省份识别不准? 见下方「常见问题 Q2」
规则类型 · 按权重
适用场景:所有客户按比例分流到多个码(不用管 IP)
配置步骤
- 匹配类型选「按权重」
- 勾选 2 个或更多收款码
- 每个码的 weight 字段决定被选中的概率
- 保存
举例:权重分流
| 码 ID | weight | 实际概率 |
|---|---|---|
| #119 | 60 | 60/(60+40)=60% |
| #120 | 40 | 40/(60+40)=40% |
命中规则后无条件使用(不管客户 IP)——这条规则通常放在列表最后,作为「兜底分流」。
规则类型 · 全部(兜底)
适用场景:指定一组"终极候选",其他规则都没命中时用
与权重的区别
| 类型 | 选码方式 |
|---|---|
| 权重 | 多个码 → 按 weight 加权随机 |
| 全部 | 多个码 → 也按 weight(跟权重一样) 单码 → 直接用 |
实际上「全部」和「权重」在匹配后行为一样,区别只在语义:
- 「全部」= 我不在乎分流比例,随便选一个可用的
- 「权重」= 我要精确控制每个码的比例
权重(weight)设置
pay_qrcode.weight 字段,默认 100。
如何修改?
目前没做前端界面,需要手动改数据库:
-- 修改某码权重为 200 UPDATE pay_qrcode SET weight=200 WHERE id=119; -- 批量: UPDATE pay_qrcode SET weight=60 WHERE id=119; UPDATE pay_qrcode SET weight=40 WHERE id=120;
后续版本会加上前端滑块,现在暂时改数据库。
权重规则
- 权重越大,被选中概率越高
- 权重为 0 或负数会当作 1 处理
- 多个码的权重之比 = 选中概率之比
实战案例
案例 1:广东省客户走 A 码,其他走 B 码
规则1:广东优先(优先级 10) 类型:按省份 省份:广东 候选码:#119(广东地区的码) 规则2:兜底(优先级 100) 类型:全部 候选码:#120(备用码)
效果:广东客户 → #119;其他省客户 → #120
案例 2:三码平均分流
规则1:均衡分流(优先级 100) 类型:按权重 候选码:#119 / #120 / #121 权重:#119=100, #120=100, #121=100 概率:#119 33.3%,#120 33.3%,#121 33.3%
案例 3:多级匹配
规则1:广东省 VIP(优先级 5) 类型:按省份,省份=广东 候选码:#119, #120(广东地区的两个码) 规则2:江浙沪(优先级 10) 类型:按省份,省份=江苏、浙江、上海 候选码:#121 规则3:兜底(优先级 999) 类型:全部 候选码:#119, #120, #121, #122
效果:广东 → #119/#120 随机;江浙沪 → #121;其他 → 全部码随机
常见问题
Q1:规则没生效?
- 检查规则是不是「启用」状态
- 检查优先级是不是最小的先匹配
- 检查候选码是不是「启用」状态
- 检查候选码的金额/日限额是否覆盖订单
Q2:省份识别不准?
- 本地库是 ip2region.xdb,覆盖率高但不是 100%
- CDN/代理 IP 可能识别成其他地区
- 手机 4G/5G 的 IP 可能跨省(运营商出口)
- 可以点 IP 检测页的「ip138 查看」人工核对
Q3:权重怎么设置最合理?
- 平均分流:所有码权重相等(如都是 100)
- 主备模式:主码 200,备码 100(约 2:1)
- 保护模式:新码权重小(如 50),老码权重大(如 200)
- 建议:不要单个码权重超过其他总和 3 倍以上,否则等同单码
Q4:能不能给下级码配路由?
- 可以。路由规则里能选所有下级码
- 但只有你能配,下级不能给自己配
- 下级也不需要配——他会告诉你他的码什么时候最活跃,你决定
Q5:绑定的 IP 变了怎么办?
- IP 归属地是上传时一次性识别的,之后 IP 变了不会自动更新
- 如果收款手机换地区,重新编辑该码、重新绑 IP 即可
- 也可以在「归属地区」手动选省份(优先级相同)
Q6:一条规则都不配会怎样?
- 系统走原逻辑:本人码优先 → 下级码(3 层 BFS)
- 多个候选时按 weight 加权随机
- 所以即使不配规则,也会按权重分流
Q7:绑定 IP 和手填省份冲突?
- 优先看
region_province(手填的),再看bind_province(IP 识别的) - 只要有一个匹配就算命中
- 建议只用一个,避免混乱