/// <summary> /// 判断是否能够发送验证码,默认间隔60秒发一次 /// </summary> /// <param name="smsVerifyCode"></param> /// <returns></returns> private bool IsSendTooFast(SmsVerifyCode smsVerifyCode) { if (smsVerifyCode == null) { return(false); } long now = DateUtility.ConvertDateTimeLong(DateTime.UtcNow); if (now < smsVerifyCode.NextSendTime) { return(true); } return(false); }
/// <summary> /// 判断验证码是否超时 /// </summary> /// <param name="smsVerifyCode"></param> /// <returns></returns> private bool IsVerifyCodeTimeOut(SmsVerifyCode smsVerifyCode) { if (smsVerifyCode == null) { return(false); } long now = DateUtility.ConvertDateTimeLong(DateTime.UtcNow); if (now > smsVerifyCode.TimeOut) { return(true); } return(false); }
/// <summary> /// /// </summary> /// <param name="destMobile"></param> /// <param name="codeType">0-注册验证码</param> /// <returns>0-发送成功 1-1分钟内不能重复发送 2-今日发送达到上限 3-发送失败</returns> public int SendVerifyCode(string destMobile, int codeType) { string code = RandomUtil.GenerateVerfiyCode(); SmsVerifyCode smsVerifyCode = DataBase.Get <SmsVerifyCode>(e => e.Mobile == destMobile && e.CodeType == codeType); if (smsVerifyCode != null) { //判断有没有连续发送 bool isSendTooFast = IsSendTooFast(smsVerifyCode); if (isSendTooFast) { return(1); } //判断今天是否已经达到发送上限 bool isOverLimited = IsSendVerifyCodeLimited(smsVerifyCode); if (isOverLimited) { return(2); } string nowCurrentData = DateTime.Now.ToString("yyyy-MM-dd"); if (nowCurrentData == smsVerifyCode.CurrentDate) { smsVerifyCode.SendAmount += 1; } else { smsVerifyCode.SendAmount = 1; smsVerifyCode.CurrentDate = nowCurrentData; } smsVerifyCode.Code = code; smsVerifyCode.IsUsed = false; smsVerifyCode.UpdateDate = DateTime.Now; smsVerifyCode.TimeOut = DateUtility.ConvertDateTimeLong(DateTime.UtcNow.AddSeconds(MiddleTier.BusinessConfig.VerifyCodeTimeOut)); smsVerifyCode.NextSendTime = DateUtility.ConvertDateTimeLong(DateTime.UtcNow.AddSeconds(MiddleTier.BusinessConfig.VerifyCodeSendInterval)); DataBase.Update <SmsVerifyCode>(smsVerifyCode); } else { smsVerifyCode = new SmsVerifyCode(); smsVerifyCode.Code = code; smsVerifyCode.Mobile = destMobile; smsVerifyCode.CodeType = codeType; smsVerifyCode.CreateDate = DateTime.Now; smsVerifyCode.CurrentDate = DateTime.Now.ToString("yyyy-MM-dd"); smsVerifyCode.IsUsed = false; smsVerifyCode.SendAmount = 1; smsVerifyCode.TimeOut = DateUtility.ConvertDateTimeLong(DateTime.UtcNow.AddSeconds(MiddleTier.BusinessConfig.VerifyCodeTimeOut)); smsVerifyCode.NextSendTime = DateUtility.ConvertDateTimeLong(DateTime.UtcNow.AddSeconds(MiddleTier.BusinessConfig.VerifyCodeSendInterval)); smsVerifyCode.UpdateDate = DateTime.Now; DataBase.Save <SmsVerifyCode>(smsVerifyCode); } //提交到短信网关 try { SendSms(destMobile, code); } catch { return(3); } return(0); }