博主是调用第三方【棒子云】短信接口进行发送验证码的,然后也可以调用别的,方法都是大同小异的。
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; ////// 构造函数 /// /// /// /// 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; } /// /// 默认charset为UTF-8 /// /// /// /// 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】调用接口进行测试。可以看出是发送成功的~