C#实现调用第三方接口进行短信验证码验证
前言:
最近在做一个收费系统,正好有实现短信验证码进行验证的需求。因为收费系统的业务涉及到用户注册,忘记密码。尤其是忘记用户密码这个功能如果没有限制,任何人都可以对任意一个人的密码进行从新设置。不只是不安全的问题,而且大大的降低了用户的体验度。
下图是我对短信验证的理解,通过下面这个图可以很清晰的看清楚短信验证的逻辑。
实现流程图
界面
代码
UI(窗体代码)
string code = "";//接受返回的验证码,用与对比。
获取验证码按钮
//获取短信验证码
SMSPhone sMSPhone = new SMSPhone();
code= sMSPhone.getSMSCode(textBox1.Text);//接受生成的验证码,用于和用户收到的验证码进行对比。
验证按钮
//判断验证码是否正确
if (code.Equals(textBox2.Text)) {
MessageBox.Show("验证码正确");
}
else
{
MessageBox.Show("验证码错误");
}
*SMSPhone(类)*
/**
* Namespace: 手机验证码测试
*
* Function: N/A
* Name: SMSPhone
*
* Ver Time Author
* 0.10 2020/10/29 10:52:50 康世行
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net;
using System.Windows.Forms;
namespace 手机验证码测试
{
public class SMSPhone
{
//存放验证码
string yzm = "";
string a = "1234567890";//用于生成随机验证码的源
private string url = "http://106.ihuyi.com/webservice/sms.php?";//接口地址
private string strUid = "在第三方接口网站申请";//用户ID
private string strKey = "在第三方接口网站申请之后获得"; //开发者密钥,用于和用户ID配合去调用接口
/// <summary>
/// 获取验证码
/// </summary>
/// <param name="phone"></param>
/// <returns></returns>
public string getSMSCode(string phone) {
//生成验证码
//实例化一个随机数
Random random = new Random();
//循环六次得到一个随机的六位的验证码
for (int i = 0; i <6; i++)
{
yzm = yzm + a.Substring(random.Next(0,a.Length),1);
}
//判断手机号是否为空
if (phone.Trim() != "") {
//需要调用的链接和发送的内容
url = "http://106.ihuyi.com/webservice/sms.php?method=Submit&account=" + strUid + "&password=" + strKey + "&mobile=" + phone + "&content=" + "您的验证码是:"+yzm+"。请不要把验证码泄露给其他人。";
//调用请求接口的方法
string Result = GetHtmlFromUrl(url);
//判断是否发送成功
MessageBox.Show(Result);
}
return yzm;
}
/// <summary>
/// get方式请求http接口
/// </summary>
/// <param name="url">接口地址</param>
/// <returns></returns>
public string GetHtmlFromUrl(string url)
{
string strRet = null;
//判断链接是否为空或者null
if (url == null || url.Trim().ToString() == "")
{
return strRet;
}
//定义目标链接
string targeturl = url.Trim().ToString();
try
{
//http的特定实现,用于访问http接口
HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl);
hr.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
//设置请求方法
hr.Method = "GET";
//验证码的有效时间30分钟
hr.Timeout = 30 * 60 * 1000;
WebResponse hs = hr.GetResponse();
Stream sr = hs.GetResponseStream();
StreamReader ser = new StreamReader(sr, Encoding.UTF8);
strRet = ser.ReadToEnd();
}
catch (Exception ex)
{
strRet = null;
}
return strRet;
}
}
}
测试结果:
如果大家还有其他的实现方式欢迎交流,如果有永久免费的接口给推荐下更好。
欢迎访问csdn的博客:
https://blog.csdn.net/kangshihang1998?spm=1010.2135.3001.5343