网易首页 > 网易号 > 正文 申请入驻

支付新手高频易发的故障,如何应对?

0
分享至

在支付行业的技术领域,新手开发者常常会遇到各种技术挑战和故障。本文汇总了支付新手高频易发的故障,并提供了实用的应对策略,供大家参考。

———— / BEGIN / ————

一路走来,我犯过很多错,也引发过很多线上故障。在带团队后,也不断看到团队内的新人频繁出现各种线上故障。这些故障或多或少都对公司的业务和新人的心理造成了一定的负面影响。

这里汇总一些新手高频易发的故障,以及应对策略,少点故障,安心过年。主要包括:渠道返回码,乱序,三高(高并发、高性能、高可用),幂等,多币种等。

对外部渠道的返回码理解一知半解

无论是四方还是三方,大部分情况下都是调用外部渠道或银行做真实的扣款,而渠道对接是新手触发故障的高风险区。

首先就是渠道返回码的映射。最常见的就是把渠道返回“系统异常”、“订单不存在”、或调用超时,推进到失败。

我现在还记得我接入的第一个外部渠道,吭哧吭哧前后忙活了1个多月,终于上线,开量,稳定运行,非常开心。

有天财务小妹找到我,说我接的那个渠道有笔支付订单对账出了长款,我们的订单是失败的,但是渠道给的对账文件是成功的。我不敢大意,赶紧去查日志和数据库的数据,原来是渠道支付接口超时,查询接口返回“订单不存在”,被映射到了“失败”。

当时被老板被狠批一顿:“你怎么犯这种低级错误!怎么能把订单不存在映射成失败呢?”那时年轻,毫不客气地回敬道:“这是银行的问题哪,他都告诉我订单不存在了,我咋还不能推进到失败呢?我不推进到失败我推进到哪里?”

虽然嘴硬,心还是虚的。在网络环境下,数据包走不同的路由分发,银行内部多个系统之间有延时,最后导致查询比支付先到,或者查询时数据还没有落库,银行返回订单不存在,很正常的。

梳理出大致如下几条准则:

  • 只有明确成功,才能推进成功。

  • 只有明确失败,才能推进失败。

  • 结果不明确,默认全部是“未知”。

  • 支付场景谨慎推进到成功,退款、提现、商家打款等场景谨慎推进到失败。

  • 典型的结果不明确场景有:订单不存在,系统异常,内部错误等。


这部分在“渠道返回码映射设计与最佳实践”的那篇文章里写得更清楚明确,有兴趣的可以历史发文里面找一找。

缺少乱序的概念

人的大脑是顺序思维,但互联网世界是乱序的。

比如以前发生一个线上问题,财务小妹说和建行的对账对出了长款:银行支付成功,我方不是成功。一查,原来是渠道异步通知接口先返回了“成功”,单据先被推进到了成功,然后同步接口才返回“系统异常”,单据又被推进到了支付失败。

这里有两个问题:

1)不应该把系统异常映射到失败,这个在上面的返回码映射已经说得非常清楚。

2)成功是终态,不应该再变更。

第2个问题的解法非常简单,只需要设计好状态机就行。比如终态不可变,只有符合要求的初始状态+指定事件,才能推进到指定的状态。有兴趣的,可去找公号历史发文里面的“支付交易订单状态机设计与最佳实践”,写得非常详细。

不仅仅是外部渠道对接,现在互联网应用都是微服务架构,微服务之间除了api接口,还通过消息来传递数据,而大部分消息是不保证顺序性的。

我时不时听见一些新人质问消息发送方:“为什么你的数据没有顺序,你需要保证你的数据要有顺序,不然我处理不了!”。我只能哑然一笑。

群里也有小伙伴说某某消息中间件可以保证有序性。可是我们如果设计一个系统,不依赖中间件来保证顺序性,不是更好么?极端场景下,就算消息中间件能保证顺序性,但在分布式场景下,我们也无法保证一笔业务只在一台服务器上处理。

缺少三高的概念

“高并发、高可用、高性能”虽然很虚,却又很实在。不同数量级的并发,对系统的要求是截然不同的。“压死骆驼的最后一根稻草”在大规模交易场景下,不是一句笑话,而是真实存在的。

以前很长一段时间我分辨不出“高并发”和“高性能”之间区别,以为两者是一回事。事实不是,高并发是指同时能接多少请求,比如同时处理1百个请求,还是1万个请求,就是并发的概念。高性能是指一个请求需要处理多少时间,比如平均每个请求处理时间是500毫秒,性能就远好于平均处理时间1000毫秒。

举几个例子:


  • 高性能:用户一般可以使用多个支付方式,比如余额、红包、满减、外部银行等,分别保存在不同的子应用中,没有经验的新人,就按顺序去各个应用中查数据。有经验的老人就知道,使用多线程同时去各子应用中查数据。这就是提高性能的方式。

  • 高可用:以前分享过一个故障,后台操作出现慢查询,在线业务去缓存查数据,击穿到数据库,数据库宕机,进而导致线上业务宕机。最后分析下来,在线业务对那个缓存数据是弱依赖,没有也能部分有损地处理业务。这就是高可用的部分。有兴趣的可以看看公号里的历史发文中的一些故障分享。

  • 高并发:高并发引发的问题太多了。比如代码new 一个大对象,小流量没事,流量一大,就会出现频繁full gc。比如数据库连接没有按预期释放,小流量也没事,流量一大,连接不够用,就会出现频繁报错。


这三块在网上有很多资料,边看边学边实践,没什么好办法。

4. 缺少幂等概念

在支付系统中,幂等极其重要,一旦出现幂等失败,经常导致资损,不是平台资损,就是用户资损。

常见有三种:


  1. 对外提供的接口升级,导致幂等失效。现在互联网应用对外的接口都会声明幂等字段,最怕就是内部做升级,不小心把幂等组合修改掉,比如原来使用订单号,后面使用订单号+日期,上游订单号没有变,日期变了,本应该是一笔订单,因为幂等失败,就成了两笔订单。

  2. 调用下游接口,把下游依赖的幂等字段内容修改了。比如下游依赖订单号+创建日期做幂等,上游在架构升级中,传入了订单号+当前日期,在跨零点的交易中,就可能出现幂等失败。

  3. 使用redis实现的分布式锁做幂等。redis的可靠性和持久存储是比不上关系数据库的,最起码需要使用关系数据库的唯一索引做幂等。


幂等在网上有很多资料,值得好好看看。更高阶的,还需要考虑异地多活的幂等场景,A机房挂了,去到B机房,会不会幂等失败。

缺少多币种或金额单位换算概念

在跨境交易中,必然是多币种的,不同的币种,最小单位是不一样的。人民币、美元都很标准,有元有分,但是日元最小单位就是元,印尼盾虽然最小单位是分,但是日常只会用到元。

在微服务框架中,如果一些子应用中使用分,一些子应用使用元,会出现什么情况?

新人还容易犯的一个错误就是手动加减乘除,容易出现金额放大缩小100倍,或者出现舍入不正确(舍入有:向下取整,向上取整,四舍五入、银行家算法等)。尤其是渠道对接时,以为内部使用的分,外部渠道接口要求是元,直接乘100,但实际上内部应用使用的是元,妥妥资损100倍。

解决方案在公号以前的发文“支付系统金额处理规范及最佳实践”中有详细说明,有兴趣可以去翻翻。

结束语

上面只是举了一些常见的例子,无法覆盖全部。

基本所有的新人都是踩着线上故障在成长。我们能做的,只是提供一些规范或案例,让新人能踩在前人的故障上成长,而不全是踩着自己的线上故障在成长。很多时候一不小心因为一个大故障而被清理门户,成长虽有,代价却过大,得不偿失。

本文来自微信公众号:隐墨星辰,作者:隐墨星辰。原标题:支付新手高频易发故障及应对

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
哪个大聪明想出来的,用瓶盖收纳鸡蛋!

哪个大聪明想出来的,用瓶盖收纳鸡蛋!

新住家居
2026-04-09 07:06:35
卡拉格吐槽利物浦后防太烂情绪过于激动,亨利直接躲起来了

卡拉格吐槽利物浦后防太烂情绪过于激动,亨利直接躲起来了

懂球帝
2026-04-10 12:08:15
地产狂人绝地求生,96亿美元债务清零背后,王者归来重返牌桌

地产狂人绝地求生,96亿美元债务清零背后,王者归来重返牌桌

一号位故事
2026-04-10 08:25:58
送走马蓉又迎来冯清,倒霉的王宝强,终究还是逃不过“女人坑”

送走马蓉又迎来冯清,倒霉的王宝强,终究还是逃不过“女人坑”

日落于西
2026-04-09 23:48:16
73岁迟重瑞近况:卖故宫旁自家房子,均价15万,陈丽华嫁他好福气

73岁迟重瑞近况:卖故宫旁自家房子,均价15万,陈丽华嫁他好福气

一娱三分地
2026-02-19 17:04:30
初中就辍学的小姑娘,后来咋样了?网友:回去上,混个大专也要混

初中就辍学的小姑娘,后来咋样了?网友:回去上,混个大专也要混

解读热点事件
2026-03-09 00:05:06
妮可·基德曼顶3斤假发亮相,Schiaparelli高定秒变淘宝

妮可·基德曼顶3斤假发亮相,Schiaparelli高定秒变淘宝

热搜摘要官
2026-04-10 08:02:47
她在柬埔寨7天被轮奸9次,被大陆解救,回台湾后立马抹黑大陆

她在柬埔寨7天被轮奸9次,被大陆解救,回台湾后立马抹黑大陆

福建平子
2026-02-10 11:50:33
成语“床笫之欢”的“笫”不读“dì ”,不是“第”!到底该咋读,是什么意思?

成语“床笫之欢”的“笫”不读“dì ”,不是“第”!到底该咋读,是什么意思?

每日一首古诗词
2026-04-01 06:05:25
沪游双周报|电竞“苏超”揭幕,电竞“川超”举办研讨会

沪游双周报|电竞“苏超”揭幕,电竞“川超”举办研讨会

澎湃新闻
2026-04-09 11:06:26
装都懒得装了!全红婵刚报完警,更恶心的就来了,而且不止一个

装都懒得装了!全红婵刚报完警,更恶心的就来了,而且不止一个

东方不败然多多
2026-04-10 12:21:56
泽连斯基回怼万斯:乌克兰领土不是“几平方公里可以讨价还价”

泽连斯基回怼万斯:乌克兰领土不是“几平方公里可以讨价还价”

桂系007
2026-04-10 02:39:51
郑丽文抵达北京,入住酒店与马英九待遇一致,两岸关系开启新时代

郑丽文抵达北京,入住酒店与马英九待遇一致,两岸关系开启新时代

徐慍解说
2026-04-10 08:33:48
破案!卢鹏羽故意当裁判面撞翻张宁真正原因找到,球迷说出大实话

破案!卢鹏羽故意当裁判面撞翻张宁真正原因找到,球迷说出大实话

后仰大风车
2026-04-10 08:10:23
CBA第36轮最佳阵容:王浩然33分生涯纪录率深圳11连胜 赵继伟入选

CBA第36轮最佳阵容:王浩然33分生涯纪录率深圳11连胜 赵继伟入选

醉卧浮生
2026-04-10 11:00:10
一场战争彻底把中国打醒!美军作战最毒的是什么?中国用30年看清

一场战争彻底把中国打醒!美军作战最毒的是什么?中国用30年看清

共工之锚
2026-04-08 00:29:52
如果当初中国不改革开放,今天仍是全球最落后的国家之一吗?

如果当初中国不改革开放,今天仍是全球最落后的国家之一吗?

掠影后有感
2026-04-10 09:58:45
惹了事还恶人先告状?眼见事闹大,巴拿马找补:无意与中国摩擦

惹了事还恶人先告状?眼见事闹大,巴拿马找补:无意与中国摩擦

清沐执笔
2026-04-10 12:54:10
堕落的“清纯女星”酒井法子,这张腿间蝴蝶背后,隐藏着的故事

堕落的“清纯女星”酒井法子,这张腿间蝴蝶背后,隐藏着的故事

七阿姨爱八卦
2026-03-29 10:12:33
三野名将不听粟裕调遣,出言不逊后甩手离去,主席:立刻撤职 

三野名将不听粟裕调遣,出言不逊后甩手离去,主席:立刻撤职 

纪实文录
2025-05-10 17:45:35
2026-04-10 13:32:49
人人都是产品经理社区 incentive-icons
人人都是产品经理社区
想要成为大牛先从学做产品开始
64617文章数 311583关注度
往期回顾 全部

科技要闻

程序员惊喜,每月100美元!OpenAI推新套餐

头条要闻

再次"一肩挑"的苏林 将中国作为出访的首个国家

头条要闻

再次"一肩挑"的苏林 将中国作为出访的首个国家

体育要闻

17岁赚了一百万美元,25岁被CBA裁员

娱乐要闻

夏克立婚内出轨 曾参加《爸爸去哪儿》

财经要闻

爱尔眼科一院长被指猥亵 总部:已被停职

汽车要闻

全新一代理想 L8 五座旗舰+5C增程系统 三季度交付

态度原创

手机
数码
本地
游戏
公开课

手机要闻

摩托罗拉Edge 70 Pro手机渲染图曝光:3种配色,6500mAh电池

数码要闻

2026年第一季度全球PC出货量增长3% 联想份额破25%

本地新闻

12吨巧克力有难,全网化身超级侦探添乱

《灵魂面甲》正式版上线 灵犀互娱持续深耕国产游戏出海

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版