asp.net mvc 短信验证实例
九诺短信平台c#sdk
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.IO; using System.Xml; using System.Net; using System.Security.Cryptography; namespace Common { public class PhoneMessageCheck { string _userName = "***";//用户名 string _userPwd = "***";//经过md5加密后的密码。 string _urlSendSms = @"http://admin.9nuo.com/Interface_http/SendSms.aspx?userName={0}&pwd={1}&phone={2}¬e={3}"; string _urlGetBalance = @"http://admin.9nuo.com/Interface_http/GetBalance.aspx?userName={0}&pwd={1}"; string _urlGetReportDetail = @"http://admin.9nuo.com/Interface_http/GetReportDetail.aspx?userName={0}&pwd={1}&startDate={2}&endDate={3}"; string _urlGetReportTotalByDay = @"http://admin.9nuo.com/Interface_http/GetReportTotalByDay.aspx?userName={0}&pwd={1}&startDate={2}&endDate={3}"; //测试用 private string Md5Example() { string toCheckMd5Str = "***";//123456加密后的结果 toCheckMd5Str = EncryptByMd5(toCheckMd5Str).Replace("-", "").ToLower(); string md5Str = "***"; if (toCheckMd5Str != md5Str) { return "加密方法不正确"; } else { return "加密方法正确"; } } //MD5加密 string EncryptByMd5(string toMd5Str) { MD5 m = new MD5CryptoServiceProvider(); byte[] s = m.ComputeHash(UnicodeEncoding.UTF8.GetBytes(toMd5Str)); return BitConverter.ToString(s); } //获取账户余额 public string GetBalance() { int result = 0; try { string url = string.Format(_urlGetBalance, _userName, _userPwd); string postResult = PostData(url, Encoding.UTF8); int balance = Convert.ToInt32(DealWebSvcResultNoXml(postResult)); return "余额:" + balance; } catch (Exception ex) { throw ex; //return ex.ToString(); } } //发送短信 public DataSet SendSms(string phone,string message) { try { //string note = "测试http接口:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "[卓大师]"; string url = string.Format(_urlSendSms, _userName, _userPwd, phone, message); string postResult = PostData(url, Encoding.UTF8); DataSet dataResult = DealWebSvcResult(postResult); return dataResult; } catch (Exception ex) { return null; } } //获得详细报表 public DataSet ReportDetail(string startTime, string endTime) { try { string url = string.Format(_urlGetReportDetail, _userName, _userPwd, startTime, endTime); string postResult = PostData(url, Encoding.UTF8); DataSet dataResult = DealWebSvcResult(postResult); return dataResult; } catch (Exception ex) { DataSet ds = new DataSet(); return ds; } } //获得每天详细报表 public DataSet ReportTotalByDay(string startTime, string endTime) { try { string url = string.Format(_urlGetReportTotalByDay, _userName, _userPwd, startTime, endTime); string postResult = PostData(url, Encoding.UTF8); DataSet dataResult = DealWebSvcResult(postResult); return dataResult; } catch (Exception ex) { DataSet ds = new DataSet(); return ds; } } //get方法获得数据 public string PostData(string url, Encoding returnEncoding) { string result = string.Empty; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; // request.ContentType = "text/html;encoding=gb2312"; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { StreamReader sr = null; try { sr = new StreamReader(response.GetResponseStream(), returnEncoding); result = sr.ReadToEnd().Trim(); } finally { try { sr.Close(); sr.Dispose(); } catch { sr = null; } } } return result; } //将获得的xml转化为dataset private DataSet DealWebSvcResult(string resultXml) { DataSet dataResult = new DataSet(); if (resultXml.Length > 5) { string result = resultXml.Substring(0, 5).ToLower(); if (result == "error") { throw new Exception(resultXml.Substring(6)); } else { dataResult = ConvertXMLToDataSet(resultXml); } } else { throw new Exception("系统异常,请联系九诺客服人员"); } return dataResult; } //处理返回的xml private string DealWebSvcResultNoXml(string resultXml) { if (resultXml.IndexOf("error") == 0) { throw new Exception(resultXml.Substring(6)); } return resultXml; } //将xml转化为dateset private DataSet ConvertXMLToDataSet(string xmlData) { StringReader stream = null; XmlTextReader reader = null; try { DataSet xmlDS = new DataSet(); stream = new StringReader(xmlData); //从stream装载到XmlTextReader reader = new XmlTextReader(stream); xmlDS.ReadXml(reader); return xmlDS; } catch (System.Exception ex) { throw ex; } finally { if (reader != null) reader.Close(); } } } }
前台html
<div class="editor-label"> 请输入手机号码: </div> <div class="editor-field"> <input type="text" id="MobilePhoneNumber" name="phoneCheckNum" style="width:180px"/> <input type="button" id="Button1" onclick="CheckNum()" value="获取验证码" style="background:url(../images/phonemessage.jpg);height:26px; width:95px; border:none; cursor:pointer;"/> <span id="Span1"></span> </div> <div class="editor-label"> 请输入手机验证码: </div> <div class="editor-field"> <input type="text" id="Text1" name="phoneCheckNum" style="width:180px"/><span id="Span2" ></span> </div>
js
var i = 0; var int; function CheckNum() { var message = document.getElementById("successMessage"); message.innerHTML = ""; var phonenum = document.getElementById("MobilePhoneNumber"); if (phonenum.value == "") { $.messager.alert('操作提示', "手机号码为空!", 'warning'); } else { re = new RegExp("^[1][3-8]\\d{9}$"); if (re.test(phonenum.value)) { i = 0; var btn_checknum = document.getElementById("btn_checknum"); btn_checknum.disabled = true; SendMessage(phonenum.value); int = self.setInterval("xilou()", 1000); } else { //alert("手机号码格式不正确"); } } } function SendMessage(phonenum) { var message = document.getElementById("successMessage"); message.innerHTML = "<img src='../../Images/phonewait.gif' />"; $.post("../Organization/GetPhoneCheckNum", { phonenum: phonenum }, function (data) { if (data == "OK") { message.innerHTML = "<span style='color:Green'>验证码已成功发送</span>"; } else if (data == "exitphonenum") { btn_checknum.disabled = false; btn_checknum.value = "获取验证码"; int = window.clearInterval(int); message.innerHTML = "<span style='color:Red'>手机号码存在</span>"; } }); } function xilou() { var btn_checknum = document.getElementById("btn_checknum"); btn_checknum.value = "重新获取(" + i + ")"; if (i <= 60) { i++; } if (i > 60) { btn_checknum.disabled = false; btn_checknum.value = "获取验证码"; int = window.clearInterval(int); } } $(function () { $("#MobilePhoneNumber").keydown(function () { var message = document.getElementById("successMessage"); message.innerHTML = ""; }); $("#phoneCheckNum").blur(function () { var message = document.getElementById("checkSucess"); var checknum = document.getElementById("phoneCheckNum"); $.post("../Organization/CheckNum", { checknum: checknum.value }, function (data) { if (data == "OK") { message.innerHTML = "<img src='../../Images/tick-circle.png'/>"; } else { message.innerHTML = "<img src='../../Images/tick-close.png' height='16' width='16'/>"; } }); });
后台处理:
/// <summary> /// 获得手机验证码 /// </summary> /// <param name="phonenum"></param> /// <returns></returns> [HttpPost] [SupportFilter] public ActionResult GetPhoneCheckNum(string phonenum) { SysPersonBLL bll_sysperson = new SysPersonBLL(); if (!bll_sysperson.CheckPhoneNum(phonenum)) { PhoneMessageCheck phoneMessageCheck = new PhoneMessageCheck(); string message = ""; Random random = new Random(); for (int i = 0; i < 6; i++) { message += random.Next(0, 9); } Session["numm"] = message; Session["phonenum"] = phonenum; message += "(手验证码),如非本人操作,请忽略本短信。【验证码】"; DataSet ds = phoneMessageCheck.SendSms(phonenum, message); DataTable table = ds.Tables[0]; string value = table.Rows[0]["FResult"].ToString(); if (value == "发送成功") { return Content("OK"); } } else { return Content("exitphonenum"); } return View(); } /// <summary> /// 检测验证码 /// </summary> /// <param name="checknum"></param> /// <returns></returns> [HttpPost] [SupportFilter] public ActionResult CheckNum(string checknum) { if (Session["numm"] != null) { if (checknum == Session["numm"].ToString()) { return Content("OK"); } else { return Content("Faile"); } } else { return Content("Faile"); } }
注:在插入数据时要判断:
if (phoneCheckNum == Session["numm"].ToString().Trim() && entity.MobilePhoneNumber.ToString().Trim() == Session["phonenum"].ToString().Trim())