Esempio n. 1
0
        public ApiResult SendSmsCodeLogin([FromBody] RequestMsgCodeMobileDto request)
        {
            #region 校验:是否是允许的短信类型
            if (request.TemplateID != "6")
            {
                return(EnumApiStatus.BizError.ToApiResultForApiStatus("不支持的类型"));
            }
            #endregion

            var shortMessageService = new SysShortMessageService();

            //获取模板
            var template = shortMessageService.GetTemplate(request.TemplateID);
            if (template == null)
            {
                return(EnumApiStatus.BizError.ToApiResultForApiStatus($"短信模板不存在,TemplateID={request.TemplateID}"));
            }
            int outMinute = 30;
            int codeNum   = new Random().Next(100000, 999999);


            request.IDNumber = request.IDNumber.Substring(0, request.IDNumber.Length - 4) + "****";

            //短信内容
            string msgContent = string.Format(template.TemplateContent,
                                              codeNum.ToString(),
                                              outMinute.ToString(),
                                              "aaa",
                                              request.IDNumber);

            //短信参数
            //string msgParms = string.Format("{0},{1},{2},{3}",
            //    Service.Infrastructure.SecurityHelper.LoginUser.UserCNName,
            //    request.IDNumber,
            //    codeNum,
            //    outMinute);

            var msgParms = new List <string>();
            msgParms.Add(codeNum.ToString());
            msgParms.Add(outMinute.ToString());
            msgParms.Add("aaa");
            msgParms.Add(request.IDNumber);

            //模板编号
            var TemplateID = template.TemplateID;

            var evt = new RequestSendSMSDTO()
            {
                MsgParms   = msgParms,
                Content    = msgContent,
                TemplateID = TemplateID,
                Title      = codeNum.ToString(),
                Mobile     = request.Mobile,
                OutTime    = DateTime.Now.AddMinutes(outMinute),
            };
            var result = shortMessageService.SendMsg(evt);

            if (result.Status != EnumApiStatus.BizOK)
            {
                return(EnumApiStatus.BizError.ToApiResultForApiStatus(result.Msg));
            }

            return(EnumApiStatus.BizOK.ToApiResultForApiStatus("验证码发送成功"));
        }
Esempio n. 2
0
        /// <summary>
        /// 发送短信
        /// </summary>
        /// <param name="evt"></param>
        /// <returns></returns>
        public ApiResult SendMsg(RequestSendSMSDTO evt)
        {
            string reason = "发送失败";

            try
            {
                using (var db = new DBEntities())
                {
                    UserShortMessageLog model = new UserShortMessageLog()
                    {
                        ShortMessageLogID = Guid.NewGuid().ToString("N"),
                        MsgLogType        = evt.MsgType,
                        UserID            = evt.UserID ?? "",
                        TelePhoneNum      = evt.Mobile,
                        MsgTitle          = evt.Title ?? "",
                        MsgContent        = evt.Content ?? "",
                        OutTime           = evt.OutTime.HasValue ? evt.OutTime.Value : DateTime.MaxValue,
                        IsDeleted         = true //代表未生效
                    };

                    #region  校验:短信发送频率控制 (本系统缓存控制)
                    var smsCheckResult = CheckSendRate(evt.Mobile, evt.TemplateID);
                    var Reason         = GetSendRateMessage(smsCheckResult);
                    if (!string.IsNullOrEmpty(Reason))
                    {
                        model.MsgContent = Reason;
                        db.UserShortMessageLogs.Add(model);
                        db.SaveChanges();
                        return(EnumApiStatus.BizSMSOverclock.ToApiResultForApiStatus("您获取验证码太过频繁,请稍后再试"));
                    }
                    #endregion

                    db.UserShortMessageLogs.Add(model);
                    var i = db.SaveChanges();

                    if (i > 0)
                    {
                        var flag = SMSHelper.SendSMS(evt.Mobile, evt.TemplateID, BuildSMSParaStr(evt.MsgParms, evt.SMSVender), evt.SMSVender, out reason);
                        if (!flag)
                        {
                            if (!string.IsNullOrEmpty(reason))
                            {
                                model.MsgContent = reason;
                                db.SaveChanges();
                                //return new ApiResult() {  Status = EnumApiStatus.BizSMSOverclock, Msg = "该手机号短信发送频率太高,请稍候重试"};
                            }
                            //接口返回失败的话 暂时都认为是超频。前端便于做是否重试控制
                            return(new ApiResult()
                            {
                                Status = EnumApiStatus.BizSMSOverclock, Msg = "您获取验证码太过频繁,请稍后再试"
                            });
                        }
                        else
                        {
                            //生效
                            model.IsDeleted = false;
                            db.SaveChanges();

                            UpdateSendRate(evt.Mobile, smsCheckResult);

                            if (evt.OutTime.HasValue)
                            {
                                StringCacheKey cacheKey = new StringCacheKey(StringCacheKeyType.SYS_SMSVerifyCode, $"{evt.Mobile}/{evt.MsgType}/{evt.Title}");
                                model.ToCache(cacheKey, evt.OutTime.Value - DateTime.Now);
                            }
                            return(true.ToApiResultForBoolean());
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                XuHos.Common.LogHelper.WriteError(ex);
            }

            return(reason.ToApiResultForObject(EnumApiStatus.BizError, reason));
        }
Esempio n. 3
0
        public ApiResult SendSmsCode([FromBody] RequestMsgCodeMobileDto request)
        {
            var appToken            = CurrentOperatorApp;
            var userService         = new BLL.User.Implements.UserService();
            var shortMessageService = new SysShortMessageService();

            #region 校验:图像验证码
            if (!string.IsNullOrEmpty(request.VerifyCode))
            {
                if (!userService.CheckVerifyCode(request.VerifyCode, appToken.Token))
                {
                    return(EnumApiStatus.BizError.ToApiResultForApiStatus("验证码过期或不正确"));
                }
            }
            #endregion

            #region  校验:用户注册短信 对不起此手机号已经注册
            if (request.TemplateID == "1")
            {
                var userInfo = userService.GetUserInfoByMobile(request.Mobile, request.userType);
                if (userInfo != null)
                {
                    return(EnumApiStatus.BizError.ToApiResultForApiStatus("对不起此手机号已经注册"));
                }
            }
            #endregion

            #region 校验: 找回密码短信 对不起此手机号尚未注册
            if (request.TemplateID == "2")
            {
                var userInfo = userService.GetUserInfoByMobile(request.Mobile, request.userType);
                if (userInfo == null)
                {
                    return(EnumApiStatus.BizError.ToApiResultForApiStatus("对不起此手机号尚未注册"));
                }
            }
            #endregion

            #region 校验:绑定手机号码短信 对不起此手机号已经注册
            if (request.TemplateID == "4")
            {
                var res = userService.ExistsMobile(request.Mobile);
                if (res == true)
                {
                    return(EnumApiStatus.BizError.ToApiResultForApiStatus("对不起此手机号已经注册"));
                }
            }
            #endregion

            #region 默认值:机构编号
            if (string.IsNullOrEmpty(request.OrgID))
            {
                request.OrgID = appToken.OrgID;
            }
            #endregion


            //获取模板
            var template = shortMessageService.GetTemplate(request.TemplateID);
            if (template == null)
            {
                return(EnumApiStatus.BizError.ToApiResultForApiStatus($"短信模板不存在 TemplateID={request.TemplateID}"));
            }
            var outMinute  = 30;
            var codeNum    = new Random().Next(100000, 999999);
            var msgContent = string.Format(template.TemplateContent, codeNum, outMinute);
            //var msgParms = string.Format("{0},{1}", codeNum, outMinute);
            var msgParms = new List <string>();
            msgParms.Add(codeNum.ToString());
            msgParms.Add(outMinute.ToString());

            var evt = new RequestSendSMSDTO()
            {
                MsgParms   = msgParms,
                Content    = msgContent,
                TemplateID = template.TemplateID,
                Mobile     = request.Mobile,
                Title      = codeNum.ToString(),
                OutTime    = DateTime.Now.AddMinutes(outMinute),
            };


            var result = shortMessageService.SendMsg(evt);
            if (result.Status != EnumApiStatus.BizOK)
            {
                return(EnumApiStatus.BizError.ToApiResultForApiStatus(result.Msg));
            }

            return(EnumApiStatus.BizOK.ToApiResultForApiStatus("验证码发送成功"));
        }