公司一个项目完成本地开发后,上测试环境部署,出现了收发短信业务签名不一致的情况,具体表现客户身份对应的父公司签名,收到短信签名确实子公司,一番排查后,结果却让人哭笑不得……
1、先看看腾讯云短信功能的签名和模版有没有失效
签名和模版状态都正常
2、克隆项目至本地,先本地跑起来再说
免责声明:代码不是俺写的,俺就是个救火的。
简单看了下函数逻辑,根据数据库中获取的客户信息,确认对应发送的短信类型 sendType
,再根据字典表确认 sendType
对应的场景值 sceneId
,每一个场景值对应着腾讯云短信服务的短信模版,决定了短信签名和内容。
打断点,本地环境下各项参数都没问题,收到的短信也正常,先重新打包扔到测试环境看看。
不出意外地出了意外,短信依然签名出错。
3、排查业务所在平台的短信发送记录
翻开对应的历史记录,顿觉大事不妙,为啥哥们本地的历史记录和测试环境不同啊,不都是从数据库里抓的吗?
等等,数据库!点开 git commit
,找到写这个功能的同事,薅来了测试数据库的账号密码,navicat
打开记录场景值的数据表一看,签名类型和场景值都没问题啊?总不能是判断没执行吧。
在代码的发送类型判断并赋值场景值埋了日志,如果进行赋值操作就打印,同时打印赋值前后的 sendType
和 sceneId
。
部署后往 rancher
里一蹲,md,一蹲一个不吱声( ‵o′)
测试环境下压根就没走判断 sendType
后对场景值赋值的语句,万能的群友提问,为什么日志中 sendType
值在第二行才打印,模版id的日志却在同一行?
特殊符号……
4、排查数据库
打开 navicat 对应单元格的文本内容,显示如下:
一切很明显了,SEND_TYPE
类型为 String
,可视化工具显示单元格内容的最后一行,实际值为 ‘\n311696’。
哪个开发,测试环境改数据加回车的……