重试服务与 BIN 服务:不放过每一笔订单

支付成功率是支付最核心的指标之一。前面讲的路由系统已经做了很多优化,但实际运营中还是有一些”漏网之鱼”——通道超限、通道异常、成本高的好通道用不上……重试服务和 BIN 服务就是用来解决这些精细化问题的。

重试服务:给失败的交易一次重来的机会

为什么需要重试

老王指定员工只从最好的供应商进货。结果供应商有时候货不够、有时候电话占线、有时候有个价格更低但送货稍慢的供应商一直当备胎。老王一反省,把”强制找最好的供应商”改成了”优先找最好的供应商”,允许员工同等条件下向多家供应商询价。

支付里也存在类似的问题:

问题一:通道限额。用户在通道 A 超过了单日限额,但在通道 B 并没有。如果只能尝试一次,用户就只能换卡或者次日再试。

问题二:通道异常。网络抖动导致收不到支付结果,只能告诉用户”请重新支付”。

问题三:好通道用不上。通道 A 成本低但质量差,通道 B 成本高但质量好。没有重试服务时,为了保证成功率只能一直用通道 B,白白浪费了通道 A 的成本优势。

有了重试服务,通道 B 给通道 A 做兜底,可以大胆先走通道 A,失败了自动切到通道 B。成功率没降,成本降了。

重试服务的核心原则

原则一:只有银行卡类交易参与重试。 微信、支付宝等账户类支付通道是唯一的,没有备份,重试没有意义。

原则二:鉴权类、风险类、人工置失败、出款类交易不参与重试。

  • 鉴权验证的是信息准确性,不同通道验证逻辑可能不同
  • 风险类交易安全第一,重试可能规避了风控
  • 人工置失败是有意为之
  • 出款交易重试可能导致重复出款造成资损——绝对不允许

原则三:响应码有要求。 短信验证码错误、卡过期、卡无效、余额不足这些明确是用户自身原因的,不重试。

响应码可以用白名单(只有配置的才能重试,安全但配置量大)或黑名单(配置的不能重试,配置少但有遗漏风险)管理。

原则四:重试前原通道交易需要有终态。 先冲正或查询确认原交易失败,再进行重试,否则会造成订单混乱。

重试服务怎么设计

重试规则的关键配置项:

  • 商户号/行业类型
  • 支付通道和支付品牌
  • 适用响应码
  • 允许重试次数(通常 2~3 次)
  • 系统等待最长时间(通常 10 秒)
  • 生效时间

路由如何配合重试

没有重试时,路由的目的是”告诉平台需要什么要素”,模式是”通道所需要素 > 用户提交要素”。

有了重试,路由的目的变成”根据现有要素找可用通道”,模式是”用户已有要素 > 通道所需要素”。

路由还需要额外做几件事:

  1. 缓存订单风险数据——一笔订单可能重试多次
  2. 挖掘系统已有数据——从常用卡服务中获取用户历史数据
  3. 鉴权未验证要素——确保要素正确才能重试
  4. 去重已失败通道——不重复尝试已失败的通道

什么通道类型可以参与重试

这取决于用户要素的验证情况:

验证情况 快捷协议 代扣/代付 无磁无密 需发短信的通道
全部验证正确 有协议号且不需短信可用 可用 可用 不可用
部分验证 不可用 不可用 有条件可用 不可用

核心逻辑是:不能让要素错误的交易通过重试变成成功交易。否则用户可以拒付,商户要担责。

BIN 服务:支付系统的基石

BIN 是什么

每张银行卡的卡号由三部分构成:发卡行标识码(BIN)+ 发卡行自定义位 + 检验码

以招行借记卡 6214851216547385 为例:

  • 前 6 位 621485 是 BIN,代表这是招商银行借记卡
  • 中间 9 位是招行分配给用户的标识
  • 最后 1 位是检验码

通过 BIN,系统可以识别出一张卡的所属银行、卡组织、卡类型、卡级别。这就是为什么你在网站上输入几位卡号,系统就能显示银行名称。

BIN 一般 6 位数字(2014 年 ISO 调整为 8 位)。第 1 位代表行业:4 和 5 是金融财务,6 是商业和金融,3 开头可能是美运通或 JCB。62 开头的是银联卡。

BIN 的分配链条:ISO → 卡组织 → 发卡行。2002 年银联成立后,国内银行发卡需要向银联申请 BIN。

BIN 表怎么设计

有两种方案:

方案一:不涉及通道。 只记录银行、卡种、卡类型、BIN 范围等信息。简单但有缺陷——同一个 BIN,通道 A 支持但通道 B 不支持,如果路由选了 B,交易就会失败。

方案二:涉及通道。 加上通道字段,记录每个通道支持哪些 BIN 范围。这样路由计算时能精确匹配,保证通道可用性。

举例:招行信用卡 BIN 全集是 620000~629998。银联通道支持 620000~629998,招行直连通道支持 620001~629999。用户卡号 BIN 是 620000,方案一会路由到费率更低的招行直连通道(不支持),导致交易失败;方案二直接识别出只有银联通道可用。

卡号的 Luhn 校验算法

Luhn 算法(模 10 算法)用于验证银行卡号是否有效,不是加密算法,是防止输错的校验机制。

规则:

  1. 从卡号最后一位开始,逆向将奇数位相加
  2. 逆向将偶数位数字乘以 2(结果是两位数就减 9),再求和
  3. 两个和相加,结果能被 10 整除就通过

以 6214851216547385 为例:

  • 奇数位之和:5+3+4+6+2+5+4+2 = 31
  • 偶数位乘2之和:7+5+1+2+2+7+2+3 = 29
  • 总和:31+29 = 60,能被 10 整除,校验通过

这个算法对所有大型卡组织发行的银行卡都有效。在用户输入完卡号之前,就可以提前判断卡号是否有效。

BIN 服务的价值

通过 BIN 可以做很多精细化的事情:

  • 提升支付成功率:精确匹配通道支持的 BIN 范围,避免无效交易
  • 提升支付收益:针对白金卡、金卡等高等级卡做支付营销
  • 事中路由:用户输入卡号后,根据 BIN 判断当前通道是否支持,不支持则自动切换
  • 安全识别:区分内卡外卡,避免内卡外抛

正如老子说的”九层之台,起于累土”,BIN 就是支付系统中最小的”累土”。只有正确管理 BIN,才能搭建起稳固的支付大厦。


重试服务和 BIN 服务都是提升支付成功率的精细化工具。最后一篇,我们来看支付的最后一个环节——清结算,也就是老王的账本。