c#——完美实现短信验证

       短信验证,诸如大型的网站注册验证,都避免不了手机短信的验证工作。且越来越多的企业开始利用短信平台开展各种短信增值业务。下面就和大家分享一下我的实践过程。

       短信验证,是需要第三方的短信接口平台支撑的,当然是要付费的,要不咱怎么可能平白无故就是手机联系起来还发短信呢?对吧!我是通过申请的测试账号来实践的。

        我是使用Http协议,c#开发语言,UTF-8编码格式实践的。

        废话不多,先看代码:我再解释:

 protected void Button3_Click(object sender, EventArgs e)
        {
            //定义参数:参数格式为:key=value(userID=1&password=123456)结构。
            string param = "action=send&userid=5581&account=ZK03&password=zk123456&content=" + TextBox2.Text + "&mobile=" + TextBox1.Text;
            if (CheckBox1.Checked)//是否定时发送
            {
                param = param + TextBox4.Text; //格式 yyyymmddhhnnss
            }
            byte[] bs = Encoding.UTF8.GetBytes(param);
            //HttpWebRequest post提交方式通过在页面内容中填写参数的方法来完成数据的提交:参数格式为:key=value(userID=1&password=123456)结构。
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://xtx.telhk.cn:8080/sms.aspx");
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            req.ContentLength = bs.Length;
            //HttpWebRequest.getRequestStream() :返回用于发送HttpWebRequest数据的流。返回stream实例后,可以通过使用stream。write方法发送带有httpwebrequest的数据。
            //注意:检索流之前必须先设置contentlength属性的值
            using (Stream reqStream = req.GetRequestStream())
            {
                //Stream.Write(Byte[] buffer,Int32 offset,Int32 count):此方法是指从offset处开始将count个字节从buffer复制到当前流
                //向当前流中写入字节序列,并将此流中的当前位置提升写入的字节数:
                reqStream.Write(bs, 0, bs.Length);
            }
            using (WebResponse wr = req.GetResponse())
            {
                //这里对接收到的页面内容进行处理
                StreamReader sr = new StreamReader(wr.GetResponseStream(), System.Text.Encoding.Default);
                string xml = sr.ReadToEnd().Trim();
                byte[] buffer = Encoding.GetEncoding("GBK").GetBytes(xml);
                TextBox3.Text = Encoding.UTF8.GetString(buffer); 
             
            }
        }

【解释】

         1·请求地址:

       请求地址是客户接口程序调用时请求的url地址,采用的是httppost 接口,地址是

客户端地址+sms.aspx例如:http://xtx.telhk.cn:8080/sms.aspx;

入口地址一般不会发生变化,当发生变化的时候,会通知接口用户  

http://xtx.telhk.cn:8080/sms.aspx?action=send&userid=5581&account=ZK03&password=zk123456&mobile=13833611187&content=内容&sendTime=&taskName=本次任务描述&checkcontent=1&mobilenumber=10&countnumber=12&telephonenumber=2

        2·请求地址带的参数说明:

参数名称

含义

说明

userid

企业id

企业ID

account

发送用户帐号

用户帐号,由系统管理员

password

发送帐号密码

用户账号对应的密码

mobile

全部被叫号码

发信发送的目的号码.多个号码之间用半角逗号隔开

content

发送内容

短信的内容

sendTime

定时发送时间

为空表示立即发送,定时发送格式2010-10-24 09:08:10

action

发送任务命令

设置为固定的:send

checkcontent

是否检查内容包含非法

关键字

当设置为1时表示需要检查,默认0为不检查

taskName

任务名称

本次任务 描述100个字以内  可以为空

countnumber

号码总数量

本次提交的号码总数量

mobilenumber

手机号码数量

本次提交的手机号码数量

telephonenumber

小灵通或座机号码数

本次提交的小灵通或座机号码数数量

          3·返回值说明:

在接收到客户端发送的http请求后,返回以xml的方式返回处理结果。格式为:

<?xml version="1.0" encoding="utf-8" ?>
<returnsms>
<returnstatus>status</returnstatus> ---------- 返回状态值:成功返回Success 失败返回:Faild
<message>message</message> ---------- 返回信息:见下表
<remainpoint> remainpoint</remainpoint> ---------- 返回余额
<taskID>taskID</taskID>  -----------  返回本次任务的序列ID
<successCounts>successCounts</successCounts> --成功短信数:当成功后返回提交成功短信数
</returnsms>

返回信息提示

说明

ok

提交成功

用户名或密码不能为空

提交的用户名或密码为空   +

发送内容包含sql注入字符

包含sql注入字符

用户名或密码错误

表示用户名或密码错误

短信号码不能为空

提交的被叫号码为空

短信内容不能为空

发送内容为空

包含非法字符:

表示检查到不允许发送的非法字符

对不起,您当前要发送的量大于您当前余额

当支付方式为预付费是,检查到账户余额不足

其他错误

其他数据库操作方面的错误

最后看一下效果图吧:

 
c#——完美实现短信验证_第1张图片



       

你可能感兴趣的:(短信验证)