修复独角数卡自动发货邮件订单时间不显示的Bug
问题起因
最近在运营独角数卡(Dujiaoka)站点时,留意到一个细节问题:用户购买自动发货商品并支付成功后,系统发送的通知邮件中(邮件模板标识为 card_send_user_email),“创建时间”这一栏竟然是空的。
作为一个强迫症,这种显示缺陷肯定不能忍。
排查心路历程
起初我以为是邮件模板的问题,但我检查了手动发货的商品订单,发现手动发货的邮件中,时间显示是完全正常的。
这就排除了邮件模板本身变量缺失的可能性,问题一定出在数据传递的环节。也就是说,在处理自动发货逻辑时,传给邮件模板的变量里,时间数据没有正确赋值。
顺藤摸瓜,我锁定了核心的订单处理服务文件:dujiaoka/app/Service/OrderProcessService.php。
定位 Bug
通过对比源码,我在该文件的第 509行 左右找到了自动发货邮件的数据组装逻辑。
错误代码如下:
1 | // 邮件数据 |
仔细一看,Laravel 模型中标准的创建时间字段通常是 created_at,而这里写成了 $order->create_at。
少了一个字母 d。
我又去看了下手动发货或者其他发货逻辑的代码(通常在文件的后半部分),发现它们用的都是正确的 $order->created_at。这显然是开发者手滑写错了字段名,导致取不到值,邮件里自然就显示为空了。
解决方案
修复方法非常简单,只需要把那个缺失的 d 补上即可。
修改后的代码:
1 | // 邮件数据 |
保存文件后,再次测试购买自动发货商品,邮件中的订单创建时间已经可以正常显示了。
总结
虽然只是一个字母的拼写错误,但在开源项目中通过对比正常逻辑(手动发货)和异常逻辑(自动发货)的代码差异,是快速定位 Bug 的有效手段。
希望这篇记录能帮到同样遇到这个显示问题的站长们,也希望独角数卡可以尽快修复。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Pleiadem's blog!
评论


