首页 新闻 会员 周边 捐助

短信发送 验证码注册如何实现

0
悬赏园豆:20 [已解决问题] 解决于 2013-01-15 16:18

公司已经购买了短信的接口

要在页面上实现 

求思路,求代码

yellowshorts的主页 yellowshorts | 初学一级 | 园豆:162
提问于:2013-01-11 15:42
< >
分享
最佳答案
3

1.页面一个验证码文本输入框,后面跟一个“获取验证码”按钮,同时限制按钮的点击时间,一般是限制1分钟才能点击一次

2.点击按钮,将用户ID,生成的验证码,存入数据库,接下来调用短信发送接口将信息发送出去

3.表单提交时,判断该验证码是否正确(是否在表中存在同时验证码是否失效,一般是五分钟内失效)

收获园豆:8
Rich.T | 老鸟四级 |园豆:3440 | 2013-01-11 15:56

流程上了解了

现在不会写时间的失效限制代码

js 不是很冻

yellowshorts | 园豆:162 (初学一级) | 2013-01-11 17:39
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function () {
            $("#btnCode").click(function () {
                //执行获取验证码的操作
                GetNumber();
            });
        })

        var count = 5;
        function GetNumber() {
            $("#btnCode").attr("disabled", "disabled");
            $("#btnCode").val(count + "秒之后点击获取")
            count--;
            if (count > 0) {
                setTimeout(GetNumber, 1000);
            }
            else {
                $("#btnCode").val("点击获取验证码");
                $("#btnCode").attr("disabled", "");
            }
        }
    </script>
</head>
<body>
    <form>
        <input id="btnCode" type="button" value="点击获取验证码"/>
    </form>
</body>
</html>

 

@yellowshorts: 

Rich.T | 园豆:3440 (老鸟四级) | 2013-01-11 17:55

@Rich.T: 很感谢你的代码

yellowshorts | 园豆:162 (初学一级) | 2013-01-15 16:16
其他回答(8)
0

在页面上直接调用接口不就行了啊 

收获园豆:4
chenping2008 | 园豆:9836 (大侠五级) | 2013-01-11 15:46
0

1、使用一般处理文件(.ashx)生成一个字符串图片验证码返回到前端

2、在后台的时候使用Session记录这个验证码的字符串

3、当点发送的时候验证所填的验证码是否与Session相同

收获园豆:3
滴答的雨 | 园豆:3660 (老鸟四级) | 2013-01-11 15:46

好像搞错了,你是想实现  发送验证码到手机,由用户接收到验证码后填入。

    这样的话,服务器应该要搞个全局字典缓存,缓存电话号码和对应的验证码,并且定时进行删除过期的验证码。用户收到验证码进行确认注册的时候就在这个字典里面匹配验证。

支持(0) 反对(0) 滴答的雨 | 园豆:3660 (老鸟四级) | 2013-01-11 15:58

过期的验证码要如何实现比较好

支持(0) 反对(0) yellowshorts | 园豆:162 (初学一级) | 2013-01-11 17:41

@yellowshorts:

1、全局字典是应该是key为ID,值为对象(对象包含验证码+一个时间值)

2、使用System.Threading.Timer对象。定时遍历全局对象检查是否失效,失效的移除

支持(0) 反对(0) 滴答的雨 | 园豆:3660 (老鸟四级) | 2013-01-11 22:08

@滴答的雨: 我用xml来存取了

支持(0) 反对(0) yellowshorts | 园豆:162 (初学一级) | 2013-01-15 16:17
0

看短信接口API,我公司底层是这样的

        private static string smsurl = ConfigurationManager.AppSettings["SMSUrl"];
        private static string smsuser = ConfigurationManager.AppSettings["SMSUser"];
        private static string smspwd = ConfigurationManager.AppSettings["SMSPwd"];

  /// <summary>
        /// 发送短信
        /// </summary>
        /// <param name="url">网关URL</param>
        /// <param name="u">用户名</param>
        /// <param name="p">密码</param>
        /// <param name="mobile">手机号,最多100个,以“;”分割</param>
        /// <param name="msg">短息内容,不超过60个字</param>
        /// <param name="dtime">时间为空为立即发送,格式:2007-12-01 00:00:00</param>
        /// <returns></returns>
        public static string SendSMS(string mobile,string msg,string dtime)
        {
            string url = "{0}?uid={1}&pwd={2}&mobile={3}&msg={4}&dtime={5}";
            url = String.Format(url,smsurl, smsuser, smspwd, mobile, HttpUtility.UrlEncode(msg,      Encoding.GetEncoding("GB2312")), dtime);
            return getContent(url);
        }

        private static string getContent(string Url)
        {
            string strResult = "";
            //try
            //{
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
                //声明一个HttpWebRequest请求  
                request.Timeout = 30000;
                //设置连接超时时间  
                request.Headers.Set("Pragma", "no-cache");
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream streamReceive = response.GetResponseStream();
                Encoding encoding = Encoding.GetEncoding("GB2312");
                StreamReader streamReader = new StreamReader(streamReceive, encoding);
                strResult = streamReader.ReadToEnd();
                streamReader.Close();
                response.Close();
            //}
            //catch
            //{
            //    throw;
            //}
            return strResult;
        }

收获园豆:5
truename | 园豆:168 (初学一级) | 2013-01-11 15:49

接口这部分我到时会写

就前台的时间限制 不懂如何操作

支持(0) 反对(0) yellowshorts | 园豆:162 (初学一级) | 2013-01-11 17:40

@yellowshorts: 我也没有短信验证这方面的经验。

我的想法是利用时间戳验证,不知道可不可以。我认为利用js验证是不合理的,客户端的都能更改。

 1. 点击的时候发送一个验证码,同时在数据库记录一下发送时间 和验证码有效时间。

 2. 当他发送验证码过来的时候,验证是不是在数据库记录的时间段内。

 3. 同时利用数据库记录的数据,验证防止他狂点获取验证码浪费短信资源。

支持(0) 反对(0) truename | 园豆:168 (初学一级) | 2013-01-11 17:54

@truename: 谢谢你的思路哈 

后来我用xml文件来存取验证码跟手机

支持(0) 反对(0) yellowshorts | 园豆:162 (初学一级) | 2013-01-15 16:17
0

为啥要用短信验证注册啊,感觉很奇怪.需求能写具体些吗?

idoku | 园豆:267 (菜鸟二级) | 2013-01-11 17:34

之前是用验证码 

现在改成用手机验证 

支持(0) 反对(0) yellowshorts | 园豆:162 (初学一级) | 2013-01-11 17:37
0

其实短信验证码和图片验证码原理和流程都是一样的,只是展示的方式换一下而已,简单来说就是换一下UI而已,你已经拿到短信接口,那生成验证码后直接通过短信发送到手机上就可以了。

I,Robot | 园豆:9783 (大侠五级) | 2013-01-12 10:21
0

首选你看一下短信公司给的接口文档,对应着做开发,当你平台上触发了验证码直接往短信接口给的推送地址上推送,然后就是短信平台的事了,你就不用管了。当用户收到短信后短信平台 还会产品一个回执,也就是短信发送报告,会相应的推送给你,你这时候就需要按原路径做一个接收。(当然如果你不需要状态报告的话可以忽略)那么至此这个流程也就完了

undelive | 园豆:202 (菜鸟二级) | 2016-10-29 07:53
0

才学的菜鸟,第一次做短信接口的登陆   求大神的代码

心里住在太阳 | 园豆:202 (菜鸟二级) | 2017-12-04 19:08
0

直接调用接口,或者让短信验证码商给你接入。

创蓝253就有多个语言的短信接入接口。

创蓝253 | 园豆:212 (菜鸟二级) | 2018-04-18 17:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册