1:创建一个项目用来调用第三方的类,右键Nuget添加第三方的引用类库 qcloudsms_csharp
2:把第三方的公共类放入到我们的项目里
using qcloudsms_csharp;
using qcloudsms_csharp.httpclient;
using qcloudsms_csharp.json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MiShop.Remote
{
/// <summary>
///
/// </summary>
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)
{
Console.WriteLine(ex.Message);
}
catch (HTTPException ex)
{
Console.WriteLine(ex.Message);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Code = code;
}
}
}
3:创建一张短信发送记录表
Create table CordInfo(
Id INT identity primary key ,
Cord INT,
TelPhone BIGINT,
CreateDate DATETIME,
USefulTime DATETIME
)
4:数据访问层写插入短信信息表方法
/// <summary>
/// 添加数据
/// </summary>
/// <param name="CordInfo"></param>
/// <returns></returns>
public int AddCordInfo(CordInfo CordInfo)
{
string sql = @"INSERT INTO [MiShop].[dbo].[CordInfo]
([Cord]
,[TelPhone]
,[CreateDate]
,[USefulTime])
VALUES
(@Cord
,@TelPhone
,@CreateDate
,@USefulTime)";
SqlParameter[] parameters = {
new SqlParameter(){
DbType = DbType.Int32,
ParameterName="@Cord",
Value = CordInfo.Cord
},
new SqlParameter(){
DbType = DbType.Int64,
ParameterName="@TelPhone",
Value = CordInfo.TelPhone
},
new SqlParameter(){
DbType = DbType.DateTime,
ParameterName="@CreateDate",
// Value =null
Value =DateTime.Now
},
new SqlParameter(){
DbType = DbType.DateTime,
ParameterName="@USefulTime",
//Value =null
Value = DateTime.Now.AddMinutes(1)
}
};
sqlHelper sqlHelp = new sqlHelper();
return sqlHelp.ExcuteNoQuery(sql, parameters);
}
4:业务层:先引用第三方项目,先调用第三方类,发送验证码,然后将验证码存储到短信信息对象,最后调用数据访问层的插入短信的方法。
public bool CordInfo(string Tel)
{
TenXunYunSMS tenXunYunSMS = new TenXunYunSMS();
try
{
//值
tenXunYunSMS.appKey = "####";//key值
tenXunYunSMS.appId = ####;//ID值
tenXunYunSMS.SetSMS(Tel);
//插入
CordInfo cordInfo = new CordInfo();
cordInfo.TelPhone = Convert.ToInt64(Tel);
cordInfo.Cord = Convert.ToInt32(tenXunYunSMS.Code);
CordInfoRepository cordInfoRepository = new CordInfoRepository();
cordInfoRepository.AddCordInfo(cordInfo);
}
catch (Exception)
{
return false;
}
return true;
}
5:控制器写一个JsonResult的发送验证码方法需要接收手机号
/// <summary>
/// 查询Cord
/// </summary>
/// <param name="cordInfo"></param>
/// <returns></returns>
public JsonResult ExuctCord(CordInfo cordInfo)
{
Operate operate = new Operate();
CordInfoService cordInfoService = new CordInfoService();
operate.Success = cordInfoService.ExuctCord(cordInfo)>0;
return Json(operate);
}
6:控制器写一个JsonResult的校验验证码方法需要接收短信信息对象
/// <summary>
/// 查询Cord
/// </summary>
/// <param name="cordInfo"></param>
/// <returns></returns>
public JsonResult ExuctCord(CordInfo cordInfo)
{
Operate operate = new Operate();
CordInfoService cordInfoService = new CordInfoService();
operate.Success = cordInfoService.ExuctCord(cordInfo)>0;
return Json(operate);
}
/// <summary>
/// 查询有效时间
/// </summary>
/// <param name="cordInfo"></param>
/// <returns></returns>
public JsonResult ExuctUseFulTime(CordInfo cordInfo)
{
Operate operate = new Operate();
CordInfoService cordInfoService = new CordInfoService();
operate.Success = cordInfoService.ExuctUseFulTime(cordInfo);
return Json(operate);
}
7:页面点击获取验证码按钮:先禁用按钮,然后ajax post提交到控制器对应的发送验证码方法,传入手机号,然后success处理返回的结果。
//发验证码及倒计时插入数据到Cord表
$("#btnzc").click(function () {
var Tel = $("#UserTel").val();
$.ajax({
url: "/Cord/CordValue/?Tel=" + Tel,
type: "post",
success: function (operate) {
if (operate.Success) {
alert("插入成功")
//倒计时
$("#btnzc").attr("disabled", "disabled");
var time = 60;
$("#btnzc").val(time + "s");
var timer = setInterval(function () {
if (time > 0) {
time--;
$("#btnzc").val(time + "s");
} else {
$("#btnzc").removeAttr("disabled");
clearInterval(timer);
}
}, 1000)
}
}
})
})
8:点击注册按钮,写一个校验验证码的方法,校验通过之后才能注册。
//矫正验证码
//1.查询cordInfo表内验证码输入是否正确
$("#Cord").blur(function () {
var data = {};
data.Cord = $("#Cord").val();
$.ajax({
url: "/Cord/ExuctCord",
data: data,
type: "post",
success: function (result) {
if (result.Success) {
CordCheak = true;
} else {
$("#sms").css("color","red")
$("#sms").val("验证码错误")
CordCheak = false;
}
}
})
})
//2.查询验证码是否是有效时间
$("#Cord").blur(function () {
var data = {};
data.Cord = $("#Cord").val();
data.TelPhone = $("#UserTel").val();
$.ajax({
url: "/Cord/ExuctUseFulTime",
data: data,
type: "post",
success: function (result) {
if (result.Success) {
$("#sms").css("color","green")
UseFulTime = true;
} else {
$("#sms").css("color","red")
$("#sms").val("验证码有效时间过期")
UseFulTime = false;
}
}
})
//2.如果正确CordCheak等于true否则等于false
})
//判断注册是否成功
var CordCheak = false;
var UseFulTime = false;
//注册
$("#submit").click(function () {
if (UserNameCheak && UserPwdCheak && UserRePwdCheak && UserTelCheak && CordCheak && UseFulTime) {
var userInfo = {};
userInfo.userName = $("#UserName").val();
userInfo.userpwd = $("#UserPwd").val();
userInfo.userTel = $("#UserTel").val();
$.ajax({
url: "/Register/SaveUserInfo",
data: userInfo,
type: "post",
success: function (operate) {
if (operate.Success) {
alert("注册成功");
}
else {
alert("注册失败");
}
}
})
} else {
alert("请认真填写你的信息!")
}
});