请教一下,关于后台发送短信验证信息的问题。

2018-08-03 10:35:42 +08:00
 ukipoi

我的想法是 前台传入手机号。后台收到手机号后调用第三方接口发送短信。 如果调用成功。把用户手机号和验证码以及发送时间存入缓存。 但是想到一个问题,如果发送短信后,存入缓存出错了怎么办?

2688 次点击
所在节点    程序员
13 条回复
Mysqto
2018-08-03 10:41:32 +08:00
能容忍的话直接给前台返回失败,让用点重新发送 或者直接不给前台返回,给个倒计时,时间一到 让用户直接重新发送
sarices
2018-08-03 10:44:07 +08:00
一般都是存到 session 的,真的保存不到的情况,应该直接报错,还有现在的短信验证都有验证接口的,根本无需本地保存
WuwuGin
2018-08-03 10:45:39 +08:00
所以不都是有个 60s 重新发送吗?
ytmsdy
2018-08-03 10:47:26 +08:00
所以需要把手机号码和验证码做持久化!
T110E5
2018-08-03 10:47:48 +08:00
颠倒一下咋样?先存缓存,存失败直接返回 或者异常捕获重试,发送失败清理刚才的缓存
chocotan
2018-08-03 10:50:19 +08:00
我们是直接存到 session,不过 session 是放 redis 里的
cyssxt
2018-08-03 10:51:34 +08:00
前台做一个限制吧,就拿我用 redis 做缓存来说,这个缓存失败的概率是微乎其微的
dorothyREN
2018-08-03 10:56:38 +08:00
缓存成功的话再去调用短信接口。话说楼主要不要考虑我们家的短信接口。
aniskin
2018-08-03 10:57:12 +08:00
写入缓存失败的概率应该比调用第三方短信接口的失败概率还低。
我们的做法是直接返回成功,然后异步调用第三方短信接口,如果失败则 retry,再失败就不管了。
最后加一个预警,如果单位时间失败次数过高会通知开发
jianpanxia
2018-08-03 11:10:26 +08:00
我是先放 redis,ok 了发短信。
如果用户再次发送,会先生成一个新的覆盖 redis 再发送。
vjnjc
2018-08-03 12:35:50 +08:00
我觉得调接口发短信失败几率更大点,所以跟你一样先存再发
laball
2018-08-03 13:03:23 +08:00
短信验证码,不一定能保证完全发送到的,可以考虑 60 倒计时,没有收到,允许用户重新发起;同时,后台,也可以适当重试,比如,如果失败,则重试 3 次,一般都是调用第三方的短信接口,不一定能保证没底调用都没有问题;
交互上,需要产品稍微设计一下;
Light3
2018-08-03 13:49:36 +08:00
先存再发 检查时间 没过 60 秒 就还用这个发
别发送成功 再存 感觉很蠢。。
还有记得加 验证什么的 要不然被刷了 好惨

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/476504

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX