博主是調用第三方【棒子雲】短信接口進行發送驗證碼的,然后也可以調用別的,方法都是大同小異的。
1.棒子雲官網:http://smsow.zhenzikj.com/
2進行【注冊】操作
3.在官網點擊【個人登陸】進行操作。登錄后可以看到自己的后台,自己可以設置短信模板什么的。系統會默認送你【10次】發送驗證碼的機會。然后就需要買了,最低充值10元,10元能發270條短信,大概就是0.03元一條咯,感覺也不是很貴~
4.點擊【詳情】可以獲取應用的AppId、AppSecret,在調用的時候要用到的。
可以在官網自行看API文檔,下載SDK源碼
然后正式開始吧~~
5.新建一個程序就不用我說了吧,Windows窗體應用程序/ASP.NET Web應用程序都行,博主新建的是一個WebApi程序。。然后新建一個Class類,用來封裝發送驗證碼的。可在官網SDK下載Coty。博主給出源碼,注意修改命名空間。
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Web; using System.Security.Cryptography.X509Certificates; using System.Net.Security; namespace 短信驗證碼.Models { public class TaoTaoClient { private static readonly string DEFAULT_CHARSET = "UTF-8"; private static readonly int CONNECTION_TIMEOUT = 20 * 1000; private static readonly int READ_TIMEOUT = 20 * 1000; private String apiUrl = ""; private string appId; private string appSecret; /// <summary> /// 構造函數 /// </summary> /// <param name="apiUrl"></param> /// <param name="appId"></param> /// <param name="appSecret"></param> public TaoTaoClient(string apiUrl, string appId, string appSecret) { this.apiUrl = apiUrl; this.appId = appId; this.appSecret = appSecret; } public String Send(Dictionary<string, string> parameters) { parameters.Add("appId", appId); parameters.Add("appSecret", appSecret); var result = DoPost(apiUrl + "/sms/send.do", parameters, DEFAULT_CHARSET, CONNECTION_TIMEOUT, READ_TIMEOUT); return result; } public String Balance() { var parameters = new Dictionary<string, string>(); parameters.Add("appId", appId); parameters.Add("appSecret", appSecret); var result = DoPost(apiUrl + "/account/balance.do", parameters, DEFAULT_CHARSET, CONNECTION_TIMEOUT, READ_TIMEOUT); return result; } public String FindSmsByMessageId(string messageId) { var parameters = new Dictionary<string, string>(); parameters.Add("appId", appId); parameters.Add("appSecret", appSecret); parameters.Add("messageId", messageId); var result = DoPost(apiUrl + "/smslog/findSmsByMessageId.do", parameters, DEFAULT_CHARSET, CONNECTION_TIMEOUT, READ_TIMEOUT); return result; } private string DoPost(string url, Dictionary<string, string> parameters, string charset, int connectionTimeout, int readTimeout) { var ret = string.Empty; var contentType = "application/x-www-form-urlencoded;charset=" + charset; var encoding = BuildEncoding(charset); var query = BuildQuery(parameters, encoding); var queryBytes = encoding.GetBytes(query); var httpRequest = BuildRequest(url, contentType, queryBytes); var requestStream = httpRequest.GetRequestStream(); requestStream.Write(queryBytes, 0, queryBytes.Length); using (var rsp = httpRequest.GetResponse()) { using (var rspStream = rsp.GetResponseStream()) { using (var streamReader = new StreamReader(rspStream)) { ret = streamReader.ReadToEnd(); } } } return ret; } private Encoding BuildEncoding(string charset) { var encoding = Encoding.UTF8; if (!string.IsNullOrEmpty(charset)) { encoding = Encoding.GetEncoding(charset); } return encoding; } private HttpWebRequest BuildRequest(string url, string contentType, byte[] queryBytes) { HttpWebRequest httpRequest = null; if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { //ServicePointManager.SecurityProtocol = spt; //不指定,使之自動協商/適應, 避免指定的版本與服務器不一樣反而連不上 ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); httpRequest = WebRequest.Create(url) as HttpWebRequest; httpRequest.ProtocolVersion = HttpVersion.Version10; } else { httpRequest = WebRequest.Create(url) as HttpWebRequest; } httpRequest.Method = "POST"; httpRequest.ContentType = contentType; httpRequest.Accept = "text/xml,text/javascript,text/html"; httpRequest.ContentLength = queryBytes.Length; return httpRequest; } /// <summary> /// 默認charset為UTF-8 /// </summary> /// <param name="parameters"></param> /// <param name="charset"></param> /// <returns></returns> public String BuildQuery(Dictionary<string, string> parameters, Encoding encoding) { if ((parameters == null) || (parameters.Count == 0)) { return string.Empty; } var query = new StringBuilder(); var hasParam = false; foreach (var kvp in parameters) { String name = kvp.Key; String value = kvp.Value; if (!string.IsNullOrEmpty(name)) { if (hasParam) { query.Append("&"); } else { hasParam = true; } query.Append(name).Append("=").Append(HttpUtility.UrlEncode(value, encoding)); } } return query.ToString(); } private bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; //總是接受 } } }
6.然后新建一個控制器【TestController】,在這個控制器中調用剛剛封裝的【TaoTaoClient.cs】類,調用方法發送驗證碼。(注意:博主這里寫的是API)
7.博主使用【postman】調用接口進行測試。可以看出是發送成功的~