/// <summary> /// 插入发送短信验证码信息 /// </summary> /// <param name="sms"></param> /// <returns></returns> public async Task <int> InsertSmsCodeAsync(tsms sms) { const string sql = "insert INTO public.tsms(pkid,fphone,fvcode,fsendtime,finvalidtime,ftype)values(@pkid,@fphone,@fvcode,@fsendtime,@finvalidtime,@ftype)"; return(await ExecuteEntityAsync(sql, sms)); }
/// <summary> /// TODO 发送短信验证码 /// </summary> /// <param name="sms"></param> /// <returns></returns> public async Task <SmsVD> SendSmsCodeAsync(SmsModel sms) { DateTime date = DateTime.Now; DateTime beforedate = date.AddMinutes(-10); DateTime before1Mdate = date.AddMinutes(-1); DateTime invaliddate = date.AddMinutes(10); // 失效时间为10分钟 // 获取十分钟内已发送验证码列表 var codeList = await _schoolBusRepository.GetSmsListBySendTimeAsync(sms.phoneNum, sms.verificationCodeType, beforedate, date); // 验证发送次数 if (codeList.Count >= 5) { return(new SmsVD { msg = "短时间发送短信过多" }); } // 发送间隔1分钟判断 if (codeList.Any() && codeList.First().fsendtime > before1Mdate) { return(new SmsVD { msg = "验证码已失效" }); } // 生成6位随机数验证码 Random ran = new Random(); string code = ran.Next(100000, 999999).ToString(); #if DEBUG var smsresult = new AliSmsModel { Code = "OK" }; #else var smsresult = Tools.SendSms(sms.phoneNum, code); #endif switch (smsresult.Code) { case "scfaile": return(new SmsVD { msg = smsresult.Message }); case "OK": { tsms tsms = new tsms { fphone = sms.phoneNum, fvcode = code, fsendtime = date, finvalidtime = invaliddate, ftype = sms.verificationCodeType }; await _schoolBusRepository.InsertSmsCodeAsync(tsms); return(new SmsVD { status = 1, msg = "发送成功" }); } default: return(new SmsVD { msg = "发送失败" }); } }