前言

最近,我们公司的一个项目在完成本地开发并部署到测试环境后,遇到了一个棘手的问题:收发短信业务签名出现了不一致的情况。具体来说,客户身份对应的应该是父公司的签名,但收到的短信签名却是子公司的。经过一番排查,最终发现的原因却让人哭笑不得……

解决过程

1、🔍 检查腾讯云短信功能

首先,我检查了腾讯云短信功能的签名和模版是否有效。结果显示,签名和模版状态都正常。

2、💻 本地调试

免责声明:代码不是俺写的,俺就是个救火的。

将项目克隆到本地进行测试,简单看了下函数逻辑,根据数据库中获取的客户信息,确认对应发送的短信类型 sendType,再根据字典表确认 sendType 对应的场景值 sceneId,每一个场景值对应着腾讯云短信服务的短信模版,这决定了短信签名和内容。

打断点,本地环境下各项参数都没问题,收到的短信也正常,先重新打包扔到测试环境看看。

不出意外地出了意外,短信依然签名出错。

3、📋 排查业务所在平台的短信发送记录

翻开对应的历史记录,顿觉大事不妙,为啥哥们本地的历史记录和测试环境不同啊,不都是从数据库里抓的吗?

等等,数据库!点开 git commit,找到写这个功能的同事,薅来了测试数据库的账号密码,navicat 打开记录场景值的数据表一看,签名类型和场景值都没问题啊?总不能是判断没执行吧。

在代码的发送类型判断并赋值场景值埋了日志,如果进行赋值操作就打印,同时打印赋值前后的 sendTypesceneId

部署后往 rancher 里一蹲,md,一蹲一个不吱声( ‵o′)

测试环境下压根就没走判断 sendType 后对场景值赋值的语句,万能的群友提问,为什么日志中 sendType值在第二行才打印,模版id的日志却在同一行?

特殊符号……

4、🔎 排查数据库

打开 navicat 查看具体单元格的文本内容,显示如下:

一切很明显了,SEND_TYPE 类型为 String ,可视化工具显示单元格内容的最后一行,实际值为 ‘\n311696’。

哪个开发,测试环境改数据加回车的……