V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ukipoi
V2EX  ›  程序员

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

  •  
  •   ukipoi · 2018-08-03 10:35:42 +08:00 · 2816 次点击
    这是一个创建于 2296 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    13 条回复    2018-08-03 13:49:36 +08:00
    Mysqto
        1
    Mysqto  
       2018-08-03 10:41:32 +08:00
    能容忍的话直接给前台返回失败,让用点重新发送 或者直接不给前台返回,给个倒计时,时间一到 让用户直接重新发送
    sarices
        2
    sarices  
       2018-08-03 10:44:07 +08:00
    一般都是存到 session 的,真的保存不到的情况,应该直接报错,还有现在的短信验证都有验证接口的,根本无需本地保存
    WuwuGin
        3
    WuwuGin  
       2018-08-03 10:45:39 +08:00
    所以不都是有个 60s 重新发送吗?
    ytmsdy
        4
    ytmsdy  
       2018-08-03 10:47:26 +08:00
    所以需要把手机号码和验证码做持久化!
    T110E5
        5
    T110E5  
       2018-08-03 10:47:48 +08:00
    颠倒一下咋样?先存缓存,存失败直接返回 或者异常捕获重试,发送失败清理刚才的缓存
    chocotan
        6
    chocotan  
       2018-08-03 10:50:19 +08:00
    我们是直接存到 session,不过 session 是放 redis 里的
    cyssxt
        7
    cyssxt  
       2018-08-03 10:51:34 +08:00
    前台做一个限制吧,就拿我用 redis 做缓存来说,这个缓存失败的概率是微乎其微的
    dorothyREN
        8
    dorothyREN  
       2018-08-03 10:56:38 +08:00
    缓存成功的话再去调用短信接口。话说楼主要不要考虑我们家的短信接口。
    aniskin
        9
    aniskin  
       2018-08-03 10:57:12 +08:00
    写入缓存失败的概率应该比调用第三方短信接口的失败概率还低。
    我们的做法是直接返回成功,然后异步调用第三方短信接口,如果失败则 retry,再失败就不管了。
    最后加一个预警,如果单位时间失败次数过高会通知开发
    jianpanxia
        10
    jianpanxia  
       2018-08-03 11:10:26 +08:00
    我是先放 redis,ok 了发短信。
    如果用户再次发送,会先生成一个新的覆盖 redis 再发送。
    vjnjc
        11
    vjnjc  
       2018-08-03 12:35:50 +08:00
    我觉得调接口发短信失败几率更大点,所以跟你一样先存再发
    laball
        12
    laball  
       2018-08-03 13:03:23 +08:00
    短信验证码,不一定能保证完全发送到的,可以考虑 60 倒计时,没有收到,允许用户重新发起;同时,后台,也可以适当重试,比如,如果失败,则重试 3 次,一般都是调用第三方的短信接口,不一定能保证没底调用都没有问题;
    交互上,需要产品稍微设计一下;
    Light3
        13
    Light3  
       2018-08-03 13:49:36 +08:00
    先存再发 检查时间 没过 60 秒 就还用这个发
    别发送成功 再存 感觉很蠢。。
    还有记得加 验证什么的 要不然被刷了 好惨
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2194 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:37 · PVG 08:37 · LAX 16:37 · JFK 19:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.