Ejemplo n.º 1
0
        /// <summary>
        ///     发送密码修改成功短信--解志辉
        /// </summary>
        /// <param name="mobile">手机号</param>
        protected void SendMsg(string mobile)
        {
            #region 发送密码修改成功短信

            var smstype   = (int)Enum.Parse(typeof(SmsType), SmsType.修改密码.ToString());
            var messageId = 17;                                     //密码修改成功
            var smsEntity = _logic.GetSmsEmailEntity(1, messageId); // 获取密码修改成功内容
            if (smsEntity != null)
            {
                var cnt = smsEntity.SEContext.Replace("#DATATIME#", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                //  var rx = SmsHelper.Send(mobile, cnt);
                var pm = new SmsRecordEntity
                {
                    phone_number = mobile,
                    sendtime     = DateTime.Now,
                    senduserid   = 0,
                    smstype      = smstype,
                    smscontext   = cnt,
                    orderid      = 1,
                    vcode        = "",
                    ip           = Settings.Instance.ClientIp
                };
                _recordLogic.AddRecord(pm);
            }

            #endregion
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 获取3分钟之内 历史发送记录.
        /// </summary>
        /// <param name="mobile">The client ip.</param>
        /// <param name="t1">The t1.</param>
        /// <param name="t2">The t2.</param>
        /// <returns>SmsRecordEntity.</returns>
        public SmsRecordEntity SelectHistory(string mobile, int t1, int t2)
        {
            string sql = "select top 1 sms_record_id,smscontext,phone_number,hits from hx_td_SMS_record where ( smstype=" + t1 + "  or  smstype=" + t2 + " ) and phone_number='" + mobile + "' and  DATEDIFF(MINUTE,sendtime,getDate())<3  order by sms_record_id desc";

            var ds = DbHelper.Query(sql);

            if (DataSetIsNotNull(ds))
            {
                var se = new SmsRecordEntity
                {
                    smscontext    = ds.Tables[0].Rows[0]["smscontext"].ToString(),
                    hits          = ConvertHelper.ParseValue(ds.Tables[0].Rows[0]["hits"], 0),
                    sms_record_id = ConvertHelper.ParseValue(ds.Tables[0].Rows[0]["sms_record_id"], 0)
                };
                return(se);
            }
            return(null);
        }
Ejemplo n.º 3
0
        /// <summary>
        ///
        /// </summary>
        public async Task SaveLog(int appId, string content, ValidationType type, string phone, string ip,
                                  bool isSuccess, string code, int expiresMinute, string smsMsgId, string smsMsg)
        {
            var smsRecordEntity = new SmsRecordEntity
            {
                SendTime   = DateTime.Now,
                ClientId   = appId,
                Content    = content,
                SendType   = type.ToString(),
                Receiver   = phone,
                IpAddress  = ip,
                SendResult = isSuccess,
                Remark     = isSuccess ? $"发送成功,msg_id:{smsMsgId}" : $"发送失败,错误描述:{smsMsg},msg_id:{smsMsgId}"
            };
            await _smsRecordRepository.InsertAsync(smsRecordEntity);

            await _unitOfWork.SaveChangesAsync();
        }
Ejemplo n.º 4
0
        public Int32 AddRecord(SmsRecordEntity srEntity)
        {
            StringBuilder strSql = new StringBuilder();

            strSql.Append("insert into hx_td_SMS_record(");
            strSql.Append("senduserid,phone_number,smscontext,smstype,sendtime,orderid,vcode,ip)");
            strSql.Append(" values (");
            strSql.Append("@senduserid,@phone_number,@smscontext,@smstype,@sendtime,@orderid,@vcode,@ip)");
            strSql.Append(";select @@IDENTITY");
            SqlParameter[] parameters =
            {
                new SqlParameter("@senduserid",   SqlDbType.Int,          4),
                new SqlParameter("@phone_number", SqlDbType.VarChar,     11),
                new SqlParameter("@smscontext",   SqlDbType.VarChar,   4000),
                new SqlParameter("@smstype",      SqlDbType.Int,          4),
                new SqlParameter("@sendtime",     SqlDbType.DateTime),
                new SqlParameter("@orderid",      SqlDbType.Decimal,     28),
                new SqlParameter("@vcode",        SqlDbType.VarChar,     50),
                new SqlParameter("@ip",           SqlDbType.VarChar, 50)
            };
            parameters[0].Value = srEntity.senduserid;
            parameters[1].Value = srEntity.phone_number;
            parameters[2].Value = srEntity.smscontext;
            parameters[3].Value = srEntity.smstype;
            parameters[4].Value = srEntity.sendtime;
            parameters[5].Value = srEntity.orderid;
            parameters[6].Value = srEntity.vcode;
            parameters[7].Value = srEntity.ip;

            var obj = DbHelper.GetSingle(strSql.ToString(), parameters);

            if (obj == null)
            {
                return(0);
            }
            return(Convert.ToInt32(obj));
        }
Ejemplo n.º 5
0
 /// <summary>
 /// 更新发送记录.
 /// </summary>
 /// <param name="ent">The ent.</param>
 public void UpdateRecord(SmsRecordEntity ent)
 {
     _dal.UpdateRecord(ent);
 }
Ejemplo n.º 6
0
 public Int32 AddRecord(SmsRecordEntity srEntity)
 {
     return(_dal.AddRecord(srEntity));
 }
Ejemplo n.º 7
0
        ///// <summary>
        ///// 获取绑定手机号验证码短信接口--解志辉
        ///// </summary>
        ///// <param name="reqst">The reqst.</param>
        ///// <returns>ResultInfo&lt;System.String&gt;.</returns>
        /////  创 建 者:解志辉
        /////  创建日期:2016-05-25 16:25:37
        //[HttpPost]
        //public ResultInfo<string> GetBindMobileCode(RequestParam<SmsEntity> reqst)
        //{
        //    var ri = new ResultInfo<string>("99999");
        //    try
        //    {
        //        var mobile = reqst.body.mobile;

        //        if (string.IsNullOrEmpty(mobile))
        //        {
        //            ri.code = "1000000000";
        //        }
        //        else if (!ValidateHelper.IsHandset(mobile))
        //        {
        //            ri.code = "1000000001";
        //        }
        //        else if (!_logic.CheckMobile(mobile))
        //        {
        //            ri.code = "1000000010"; //未找到相关记录
        //        }
        //        else
        //        {
        //            #region 发送修改密码短信

        //            var res = SendSms(mobile, 1, 25);
        //            return res;

        //            #endregion
        //        }
        //        ri.message = Settings.Instance.GetErrorMsg(ri.code);
        //        return ri;
        //    }
        //    catch (Exception ex)
        //    {
        //        LoggerHelper.Error(ex.ToString());
        //        LoggerHelper.Error(JsonHelper.Entity2Json(reqst)); ri.code = "500";
        //        ri.message = Settings.Instance.GetErrorMsg(ri.code);
        //        return ri;
        //    }
        //}
        ///// <summary>
        ///// 获取修改手机号验证码短信接口--解志辉
        ///// </summary>
        ///// <param name="reqst">The reqst.</param>
        ///// <returns>ResultInfo&lt;System.String&gt;.</returns>
        /////  创 建 者:解志辉
        /////  创建日期:2016-05-25 16:20:03
        //[HttpPost]
        //public ResultInfo<string> GetModifyMobileCode(RequestParam<RequestBindMobileEntity> reqst)
        //{
        //    var ri = new ResultInfo<string>("99999");
        //    try
        //    {
        //        var userId = ConvertHelper.ParseValue(reqst.body.userId, 0);
        //        var mobile = _logic.SelectUserMobileByUserId(userId);//当前用户手机号

        //        if (string.IsNullOrEmpty(reqst.body.mobile))
        //        {
        //            ri.code = "1000000000";
        //        }
        //        else if (!ValidateHelper.IsHandset(reqst.body.mobile))
        //        {
        //            ri.code = "1000000001";
        //        }
        //        else if (mobile != reqst.body.mobile)
        //        {
        //            ri.code = "1000000013";
        //        }
        //        else
        //        {
        //            #region 发送短信

        //            var res = SendSms(mobile, 1,35);
        //            return res;

        //            #endregion
        //        }
        //        ri.message = Settings.Instance.GetErrorMsg(ri.code);
        //        return ri;
        //    }
        //    catch (Exception ex)
        //    {
        //        LoggerHelper.Error(ex.ToString());
        //        LoggerHelper.Error(JsonHelper.Entity2Json(reqst)); ri.code = "500";
        //        ri.message = Settings.Instance.GetErrorMsg(ri.code);
        //        return ri;
        //    }
        //}


        /// <summary>
        ///  发送短信--解志辉
        /// </summary>
        /// <param name="mobile"></param>
        /// <param name="type"></param>
        /// <param name="messageId"></param>
        /// <returns></returns>
        protected ResultInfo <string> SendSms(string mobile, int type, int messageId)
        {
            var ri = new ResultInfo <string>("99999");

            try
            {
                #region 防止短信过度频繁发送

                #region First 60之内不能再次发送短信

                var cacheKey = "reg_member_get_code_time_" + mobile;
                var cv       = CacheHelper.GetSystemCache(cacheKey);

                if (cv == null)
                {
                    CacheHelper.SetCache(cacheKey, DateTime.Now, 1);
                }
                else
                {
                    var dte = ConvertHelper.ParseValue(cv, DateTime.MinValue);
                    if (dte != DateTime.MinValue)
                    {
                        var sec = Settings.Instance.DateDiff("Second", dte, DateTime.Now);
                        if (sec > 60)
                        {
                            CacheHelper.ClearCache(cacheKey);
                        }
                        else
                        {
                            ri.code = "1000000005"; //短信发送太频繁!请稍后再试
                        }
                    }
                }

                #endregion

                #region Second 同IP间隔60S之后才能再次发送 同时一个IP最多发送8条注册短信

                var t1 = (int)Enum.Parse(typeof(SmsType), SmsType.短信验证码.ToString());

                var t2 = (int)Enum.Parse(typeof(SmsType), SmsType.语音短信验证码.ToString());
                if (!_recordLogic.CheckInOneMinute(Settings.Instance.ClientIp, t1, t2))
                {
                    ri.code = "1000000005"; //短信发送太频繁!请稍后再试
                }

                #endregion

                #region Third 同一IP最多发送8条同类型短信

                if (_recordLogic.CheckIpSendTimes(Settings.Instance.ClientIp, t1, t2) >= 8)
                {
                    ri.code = "1000000006"; //短信发送太频繁!请与客服联系
                }

                #endregion

                #endregion

                #region 验证3分钟之内有没有验证码记录,有则发送

                var ent = _recordLogic.SelectHistory(mobile, t1, t2);
                if (ent != null)
                {
                    if (ent.hits < 4)
                    {
                        ent.orderid = SendSMS.Send(mobile, ent.smscontext);
                        _recordLogic.UpdateRecord(ent);
                    }
                    else
                    {
                        ri.code = "1000000006"; //短信发送太频繁!请与客服联系
                    }
                }
                else //不存在记录,生成新验证码
                {
                    #region 生成验证码 发送短信并记录发送日志

                    var vcode = Utils.RndNum(6);
                    var ebt   = _logic.GetSmsEmailEntity(type, messageId); // 获取验证码邮件内容
                    var sbsms = new StringBuilder(ebt.SEContext);

                    sbsms = sbsms.Replace("#CODE#", vcode);

                    var pm = new SmsRecordEntity
                    {
                        phone_number = mobile,
                        sendtime     = DateTime.Now,
                        senduserid   = 0,
                        smstype      = t1,
                        smscontext   = sbsms.ToString(),
                        orderid      = SendSMS.Send(mobile, sbsms.ToString()),
                        vcode        = vcode,
                        ip           = Settings.Instance.ClientIp
                    };
                    _recordLogic.AddRecord(pm);

                    #endregion

                    ri.code = "1000000099";
                    ri.body = vcode;
                }

                #endregion

                ri.message = Settings.Instance.GetErrorMsg(ri.code);
                return(ri);
            }
            catch (Exception ex)
            {
                LoggerHelper.Error(ex.ToString());
                LoggerHelper.Error("send phone:" + mobile + "type:" + type + " messageId:" + messageId); ri.code = "500";
                ri.message = Settings.Instance.GetErrorMsg(ri.code);
                return(ri);
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 更新发送记录.
        /// </summary>
        /// <param name="ent">The ent.</param>
        public void UpdateRecord(SmsRecordEntity ent)
        {
            var sql = "update hx_td_SMS_record set orderid=" + ent.orderid + ",hits=hits+1 where sms_record_id=" + ent.sms_record_id;

            DbHelper.ExecuteSql(sql);
        }