/// <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));
        }
Exemple #2
0
        /// <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 = "发送失败"
                });
            }
        }