不注重开发细节,活该你忙!
今天运营反映了一个问题:用户在微信小程序端提交实名认证信息时,提示“不支持信用卡”。
直觉告诉我们,既然提示是“不支持信用卡”,那看来用户输入的银行卡号是信用卡。接下来直接去auth生产库的卡bin表查证,却发现此卡是借记卡。
显然,是程序出了问题。
我们看如下用户实名信息提交的处理时序,可见,卡bin验证的链路涉及到bosskg-api、bosskg-rpc-provider、auth-gateway、auth-channel四个服务。其中,bosskg-rpc-provider、auth-gateway、auth-channel还都是双节点。查找原因要从每个服务的log文件来定位。
一顿查询后,原来竟然是由于卡号带有空格导致的。如下是auth-channel程序最终执行的sql。因为这个空格,导致未能检索到那条卡bin数据。
SELECT card_bin_id, card_bin, card_bin_len, card_len, card_bin_st, card_type, bank_code, iss_ins_cd, iss_ins_nm, card_nm, operator, reg_time, mod_time FROM card_bin WHERE card_bin = SUBSTRING('6214922000037188 ',1,card_bin_len) AND card_len=LENGTH('6214922000037188 ') LIMIT 1;
接着,再来看bosskg-api的请求log,果然,用户输入的卡号末尾包含了一个空格字符!而bosskg-rpc-provider的在接收到auth响应之后的判断逻辑是:如果 !"01".equals(cardBin.cardType),则返回“不支持信用卡”,而并没有判断cardBin.cardType是否为空值。这样的逻辑,最终误导了我们对问题的判断。
真相大白了!
我们有理由抱怨用户的“粗心”吗?
运营人员可以跟客户反馈,别输入空格。
之于我们程序员,之于我们的程序,我经常强调,还是要兼容用户的输入。就拿卡号来说,首先一定要先做trim处理,其次,要兼容卡号中间带有空格的情况。另一个同样不容忽视的改进点,是上面的对响应结果的判断逻辑。
否则,当我们在排查问题时,对于复杂的分布式系统,往往会非常耗费时间。
easier said than done. 这些与你的技术水平无关,日常开发中,稍加严谨一些,这些不必要的问题都可避免。
《漂洋过海来看你》 填 词:李宗盛 谱 曲:李宗盛 为你我用了半年的积蓄 飘洋过海的来看你 为了这次相聚 我连见面时的呼吸都曾反复练习 言语从来没能将我的情意 表达千万分之一 为了这个遗憾 我在夜里想了又想不肯睡去 记忆它总是慢慢的累积 在我心中无法抹去 为了你的承诺 我在最绝望的时候 都忍着不哭泣 陌生的城市啊 熟悉的角落里 也曾彼此安慰 也曾相拥叹息 不管将会面对什么样的结局 在漫天风沙里 望着你远去 我竟悲伤得不能自己 多盼能送君千里 直到山穷水尽 一生和你相依
相关文章
- Django Web开发基础知识
- Python 内置界面开发框架 Tkinter入门篇 甲
- 实现了一个基于 OneBot v11 的开发框架,聊聊其中的细节
- 【开发环境】Ubuntu 安装 Visual Studio Code 开发环境 ( 下载 Visual Studio Code 安装器 | Ubuntu 安装 deb 包 )
- PhpStorm 2022 for Mac(PHP集成开发)
- 直播|大数据平台开发论坛 预约报名中
- SQL开发知识:mysql where中如何判断不为空的实现
- Android方法数methods超过65536详解手机开发
- 自定义Interpolator详解手机开发
- iOS之Runtime原理解读详解手机开发
- MongoDB安装以及java开发入门详解大数据
- Linux开发工程师:有高薪,有充足待遇(linux开发工程师待遇)
- Spring Security开发调试记录详解编程语言
- 深入Linux下串口驱动开发实战(linux下串口驱动开发)
- 教程 MongoDB实战视频教程:学习NoSQL数据库开发(mongodb实战视频)
- 红色内存Redis项目开发指南(redis项目开发使用)
- 测试开发之网络篇-IP地址