【资损】资损防控的系统规范之渠道网关类服务设计
📫 作者简介:小明Java问道之路,专注于研究 Java/ Liunx 内核/ C++及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。
📫 热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。
🏆 InfoQ 签约作者、CSDN 专家博主/后端领域优质创作者/内容合伙人、阿里云专家/签约博主、51CTO 专家 🏆
🔥 如果此文还不错的话,还请👍关注 、点赞 、收藏三连支持👍一下博主~
本文导读
大型互联网金融公司是如何保证资金万无一失的?本文从系统架构层面整体的资损防控的规范,详细介绍服务接口类——渠道网关类服务的 9 点资损防控需要的注意事项。
一、 资损防控系统设计资损防控规范
从系统架构层面整体来看,支付公司的系统可以抽象为如下结构:
一、对外部商户提供收单服务类的系统
二、连通支付公司与各金融渠道的网关类系统
三、支付公司的内部业务处理系统
四、消息、调度等中间件系统
五、数据库、缓存等存储平台
从系统架构与业务架构上来讲,各个结构连接的地方最容易出现资损。因此我们将从接口服务层面与系统设计层面对资损进行分析并总结相关规范。
二、服务接口类设计概述
按照上述系统抽象架构所示,支付公司接口服务可以分为三类服务:
1、渠道网关类服务
2、收单类服务
3、内部系统接口服务结果。
下面按照各类服务风险又高到底进行分类介绍。
三、服务接口类——渠道网关类服务
常见资损风险
渠道网关是连通支付公司与各金融渠道的网关类应用,处于资金处理的最后一个环节。渠道网关类服务是最容易发生资损的服务。
1、返回码的处理
返回码的处理是渠道端最容易出现资损的部分。
我方系统会对渠道的返回码做映射,当映射错误,或渠道返回系统异常等未知错误我方处理不合适,或我方系统流水勾兑异常等情况发生时,容易造成资损。如我们在和渠道方无特殊约定的情况下,将无此交易处理成失败就会导致资损。
2、调用渠道使用的流水号产生重复
如果流水号重复时候,渠道报一个流水重复,我们置为处理中;当我方调单查询的时候,查到了被重复的上一笔交易,状态勾兑为成功,就会发生资损。
常见的重复有如下场景:
1、 流水号设计不合理发生重复(如商户号+8 位 sequence,一年后开始重复;日期+6 位流水号,交易量超百万,一天开始重复);
2、 流水号使用不合理发生重复(我方不同业务,渠道同一接口,使用不同 sequence 出现重复;同一业务的不同交易之间使用不同 sequence,导致重复)
3、 升级迁移导致重复(生成规则升级,结果和历史数据重复;业务迁移拆分时,新建了 sequence,和原有的重复)
3、调用渠道方流水号的产生与使用机制不合理
如我方在报文发送时生成流水号或对流水号做二次处理均可能导致渠道方自身的幂等失效。
4、渠道服务接口中金额单位的处理
内部金额单位和外部系统金额单位不一致,转换出问题。
内部单位为忽(*1000000),渠道接口单位为分、为份额,漏转换或转换错误;币种参数传递错误,导致对方按错误币种处理;交互接口金额格式特殊,转换出错(如银行部分接口前补 0)。
5、渠道日切的处理
由于银行有日切问题,金融渠道也有交易日日切等问题。当涉及跨日问题时,处理不当(如查询用自然日期而非约定的渠道交易日期),容易导致资损。
此外,日切处理不当还会导致清结算差错处理的问题。
6、不同金融机构对接细节尤其关键的幂等控制细节不清楚
不同的渠道存在着不同的幂等性控制,想当然的去进行渠道对接容易出现幂等性问题进而资损。
7、和渠道对接,未严格遵从渠道端的信息安全规范
如果报文未签名、加密或安全级别不够,或使用了不合适的第三方 jar 包,可能导致信息被篡改,或导致其他争议。
8、渠道网关接口连错环境
由于渠道端测试联通测试不方便,经常需要修改代码进行测试、或者我方测试环境连对方生产环境;如果代码提交生产或者测试队生产进行了错误的交易,极易导致资损。
9、调用渠道接口先发后至、后发先至和响应乱序
由于我方和渠道费连接的网络环境或网络连通方式比较复杂,极易导致先发后至、后发先至和响应乱序等情况。
比如渠道方是反交易比正交易先到、查询请求比交易先到,处理不到就会造成资损;极端情况下,还可能出现响应乱序情况,即我方发出的 A 请求,收到的 B 请求的。
总结
大型互联网金融公司是如何保证资金万无一失的?本文从系统架构层面整体的资损防控的规范,详细介绍服务接口类——渠道网关类服务的 9 点资损防控需要的注意事项。
版权声明: 本文为 InfoQ 作者【小明Java问道之路】的原创文章。
原文链接:【http://xie.infoq.cn/article/f3cc3428249a4c4765e5d99f1】。文章转载请联系作者。
评论