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;
        }
    }
}

	测试结果:

在这里插入图片描述

如果大家还有其他的实现方式欢迎交流,如果有永久免费的接口给推荐下更好。

posted @ 2020-10-29 15:15  康世行  阅读(58)  评论(0编辑  收藏  举报