1.项目中创建一个Remote类库,添加一个第三方的类:TenXunYunSMS.cs
添加后在引用的NuGet包管理器中的浏览搜索qcloudsms_csharp下载
public class TenXunYunSMS
{
//appId
//public int appId =
//appKey
//public string appKey =""
//短信模板ID
private int tmplateId = 379257;
//签名内容
private string smsSign = "7hhhcn";
/// <summary>
/// 验证码
/// </summary>
public int Code { get; set; }
/// <summary>
/// 发送验证码
/// </summary>
/// <param name="phone"></param>
/// <returns></returns>
public void SetSMS(string phone)
{
Random random = new Random();
int code = random.Next(100000, 999999);
try
{
SmsSingleSender ssender = new SmsSingleSender(appId, appKey);
var result = ssender.sendWithParam("86", phone,
tmplateId, new[] { code.ToString() }, smsSign, "", ""); // 签名参数未提供或者为空时,会使用默认签名发送短信
}
catch (JSONException ex)
{
throw;
}
catch (HTTPException ex)
{
throw;
}
catch (Exception ex)
{
throw;
}
Code = code;
}
}
2.在数据库中创建一个表来存储用户接收到的验证码
CREATE TABLE [dbo].[Users](
[userId] [int] IDENTITY(1,1) NOT NULL,
[userName] [varchar](30) NOT NULL,
[userPwd] [varchar](20) NOT NULL,
[userTel] [bigint] NOT NULL,
[userEmail] [varchar](30) NOT NULL,
[userDate] [datetime] NOT NULL,
[userTime] [datetime] NOT NULL,
3.在MVC中的Web.config里配置第三方提供的appId值和appKey值
<add key="appId" value"************"/>
<add key="appKey" value="*********************"/>
4.在项目中添加一个实体Code类
public class Code
{
public int Id { get; set; }
public String codes { get; set; }
public DateTime cTime { get; set; }
public DateTime out_time { get; set; }
public Code(){ }
public Code(int id,String codes,DateTime cTime, DateTime out_time)
{
this.Id = id;
this.codes = codes;
this.cTime = cTime;
this.out_time = out_time;
}
}
5.UI层 在网页中的"获取验证码"按钮添加一个click事件
$("#btn1").click(function () {
if (D) {
$.ajax({
type: "post",
url: "/Yzm3/Yzm32?tel=" + $("#tel").val(),
success: function (result) {
if (result.Success) {
alert("验证码发送成功!");
yzm();
} else {
alert("验证码发送失败!");
}
},
})
6.
在Login控制器中添加两个方法
Sms_Gain(string tel)方法:向数据库添加一条消息
Sms_Gains(string tel)方法:从数据库查询用户是否已有验证码
//是否获取到验证码
public JsonResult Sms_Gain(string tel)
{
//调用Operate 对象(Operate类只有一个属性bool类型的Success)
Operate op = new Operate();
//调用业务层的SmsGain类
SmsGain s = new SmsGain();
//调用业务层的SmsGain类的Sms_Gain(string tel)方法
op.Success =s.Sms_Gain(tel);
//返回结果
return Json(op);
}
//是否已有验证码
public JsonResult Sms_Gains(string tel)
{
//调用Operate 对象(Operate类只有一个属性bool类型的Success)
Operate op = new Operate();
//调用业务层的SmsGain类
SmsGain s = new SmsGain();
//调用业务层的SmsGain类的Sms_Gain(string tel)方法
op.Success = s.Sms_Gains(tel)>0;
//返回结果
return Json(op);
}
7.在业务层的中添加Sms_Gain(string tel)方法和Sms_Gains(string tel)方法
public class Yzm2
{
public bool Yzmtel2(String tel)
{
TenXunYunSMS aa = new TenXunYunSMS();
Yzm1 lt = new Yzm1();
try
{
aa.SetSMS(tel);
}
catch (Exception e)
{
return false;
}
lt.Yzmtel(Convert.ToString(aa.Code));
return true;
}
public bool SelectYam2(String codes)
{
Yzm1 lt = new Yzm1();
if (lt.Selectyzm(codes)>0)
{
return true;
}
return false;
}
}
8.数据访问层的SSmsInfo的insetsmsInfo(SmsInfo s)方法和 selectsmss(string tel)方法
public class Yzm1
{
public void Yzmtel(String code)
{
Code A = new Code();
string sql = @"insert into dbo.Code(codes, cTime, out_time)values(@codes,@cTime,@out_time)";
SqlHelper bd = new SqlHelper();
SqlParameter[] parameters = {
new SqlParameter()
{
DbType = DbType.String,
ParameterName = "@codes",
Value = code
},
new SqlParameter()
{
DbType = DbType.DateTime,
ParameterName = "@cTime",
Value = DateTime.Now
},
new SqlParameter()
{
DbType = DbType.DateTime,
ParameterName = "@out_time",
Value = DateTime.Now.AddMinutes(2)
}
};
bd.ExcuteNoQuery(sql, parameters);
}
public int Selectyzm(String codes)
{
Code A = new Code();
SqlHelper bd = new SqlHelper();
String sql = "select COUNT(1) from dbo.Code where codes =@codes and out_time > @cTime";
SqlParameter[] parameters = {
new SqlParameter()
{
DbType = DbType.String,
ParameterName = "@codes",
Value = codes
},
new SqlParameter()
{
DbType = DbType.DateTime,
ParameterName = "@cTime",
Value = DateTime.Now
}
};
int read = bd.ExecuteReader(sql,parameters);
return read;
}
}
9.工具类sqlHelper
public class SqlHelper
{
int i = 0;
string config = ConfigurationManager.AppSettings["sql"];
SqlConnection conn = null;
public int ExcuteNoQuery(string sql, SqlParameter[] parameters) {
try
{
//1:创建连接
conn = new SqlConnection(config);
//2:打开连接
conn.Open();
//3;创建SqlCommand对象
SqlCommand comm = new SqlCommand(sql, conn);
//4:预处理
if (parameters != null)
{
comm.Parameters.AddRange(parameters);
}
//5:执行sql语句 (ExcuteNonQuery)
i= comm.ExecuteNonQuery();
//6:处理返回结果、
return i;
}
catch (Exception ex)
{
return i;
}
finally {
conn.Close();
}
}
public int ExecuteReader(string sql, SqlParameter[] parameters)
{
try
{
//1:创建连接
conn = new SqlConnection(config);
//2:打开连接
conn.Open();
//3;创建SqlCommand对象
SqlCommand comm = new SqlCommand(sql, conn);
//4:预处理
if (parameters != null)
{
comm.Parameters.AddRange(parameters);
}
//5:执行sql语句 (ExcuteNonQuery)
i =Convert.ToInt32(comm.ExecuteScalar());
//6:处理返回结果、
return i;
}
catch (Exception ex)
{
return i;
}
finally
{
conn.Close();
}
}