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("验证码发送成功")); }
/// <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)); }
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("验证码发送成功")); }