信息时代,无论是电商还是网络营(chuan)销(xiao)都希望得道更多的用户信息。所以很多的网站注册上用到了手机验证码功能。网上有很多的SMS接口提供商。在选择的时候无非就是考虑到1、发送速度;2、短信价格;3、运营商服务以及技术支持。

找了几个感觉这个提供商还不错(http://www.pcf.cn/)。首先是发送的速度,因现在是过年时期短信也应该输入高峰期吧,这种情况下短信几乎是五秒内送达。其次是价格,从5分到1角不等,因会员等级不同价格不同。不过对于一般小网站的土(diao)豪(si)站长也是可以接受的。

写了一个HTTP POST的发送信息类,当然了官网也提供了相应的下载。手贱就愿意自己写,直接贴。说不定那天我也成为未来某某门户网站的BOSS那。。。

 using System;

    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Text;
    using System.Net;
    using System.IO;

    namespace SMS
    {
        public class CSMS
        {
            private string strUrl = "http://sms.106jiekou.com/utf8/sms.aspx";
            private string strAccount = "";    // 用户登录名称 This is Login Name
            private string strPassWord = "";        // 短信接口密码(非登录密码) This is Interface PassWord(Not Longin PassWord)

            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="strAccount">登录用户帐号</param>
            /// <param name="strPassWord">短信接口密码</param>
            public CSMS(string strAccount, string strPassWord)
            {
                this.strAccount = strAccount;
                this.strPassWord = strPassWord;
            }

            /// <summary>
            /// 发送信息
            /// </summary>
            /// <param name="strTelNum">目标电话号码</param>
            /// <param name="strContent">短信内容,必须为短信模版中审核通过</param>
            /// <returns></returns>
            public bool SendSMS(string strTelNum, string strContent, out string strError)
            {
                bool bResult = false;
                strError = "";
                string strPostData = "account={0}&password={1}&mobile={2}&content={3}";
                UTF8Encoding utfEncoding = new UTF8Encoding();
                byte[] bPostData = utfEncoding.GetBytes(string.Format(strPostData, this.strAccount, this.strPassWord, strTelNum, strContent));

               try
                {
                    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(this.strUrl);
                    myRequest.Method = "POST";
                    myRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
                    myRequest.ContentLength = bPostData.Length;

                    Stream stream = myRequest.GetRequestStream();
                    // 发送数据 Send the data.
                    stream.Write(bPostData, 0, bPostData.Length);
                    stream.Flush();
                    stream.Close();

                    HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
                    if (myResponse.StatusCode == HttpStatusCode.OK)
                    {
                        int iResult = -1;
                        StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
                        string strResult = reader.ReadToEnd();
                        int.TryParse(strResult, out iResult);
                        switch (iResult)
                        {
                            case -1:
                                strError = "Error:服务器返回值转换错误、" + strResult;
                                bResult = false;
                                break;
                            case 100:
                                strError = "";
                                bResult = true;
                                break;
                            default:
                                bResult = false;
                                strError = "Error:服务器拒绝发送、请查看官方API返回值信息;错误代码(" + iResult + ")";
                                break;
                        }
                    }
                }
                catch (Exception ex)
                {
                    bResult = false;
                    strError = "Error:" + ex.Message;
                }

                return bResult;
            }
        }
    }

  

 返回发送的状态码说明:

状态码     说明

100         发送成功

101         验证失败

102         手机号码格式不正确

103         会员级别不够

104         内容未审核

105         内容过多

106         账户余额不足

107         Ip受限

108         手机号码发送太频繁,请换号或隔天再发

109         帐号被锁定

110         手机号发送频率持续过高,黑名单屏蔽数日

120         系统升级
  
 注:由于某些网民的特殊爱好可能回去你网站捣乱,所以短信验证的时候要加上验证、IP地址限制、ID限制、手机号限制以及短信通帐号密码安全保护。毕竟这花的是站长的血(guang)汗(gao)钱。当然了土豪例外。。。

【API】短信通106端口验证短信的实现的更多相关文章

  1. 企业短信通 C# HTTP接口 发送短信

    /* 功能: 企业短信通 C# HTTP接口 发送短信 修改日期: 2014-09-01 说明: http://api.cnsms.cn/?ac=send&uid=用户账号&pwd=M ...

  2. [工具开发] 一信通 Web 短信发送客户端

    一.简介 为了协助公司运营部对几家短信平台进行测试,我根据各自的接口文档编写了几个简单的短信发送客户端: 下面是一信通 Web 短信发送客户端,使用 HTTP GET 方法. 二.效果图 1. 首页 ...

  3. 基于SMS短信平台给手机发送短信

    JAVA发送手机短信,我知道的有三种方式,恰逢项目需求,自己整理了基于SMS的短信发送,其他两种这里就说说一下 使用webservice接口发送手机短信,这个可以使用sina提供的webservice ...

  4. 从iMessage到微信,QQ离线短信服务,米聊,易信

    把iMessage.米聊.QQ离线短信服务.微信.易信放到一下,毫无疑问大家能够看出他们的共同点,iMessage与米聊我们就不用说了,有雷布斯的存在就有米聊的存在,QQ离线短信服务是提供给QQ会员的 ...

  5. Delphi阿里云短信【支持短信发送、短信批量发送和查询短信发送记录】

    作者QQ:(648437169) 点击下载➨Delphi阿里云短信             阿里云api文档 [Delphi 阿里云短信]是最新的阿里云短信接口,不是阿里大于短信接口,支持SendSm ...

  6. 【免费】iPhone上最好用的短信群发软件: 高速短信4.1

    免费的最新的联系人.群组.多人发送短信软件短信群发4.1已经出炉.欢迎下载! *归属地信息让你时时记着好友的地方,让陌生号码变得不陌生:  *您能够选择最经常使用的联系人然后发送高速短信; *群联系人 ...

  7. 4、下行短信发送WebService、下行短信发送服务 -功能详细设计 --短信平台

    3.  下行短信发送WebService 开发一个WebService,供第三方系统调用,用于发送短信.WebService接收数据后,将信息存储入数据库的短信发送数据表中. WebService参数 ...

  8. java实现发短信功能---腾讯云短信

    目录 java实现发短信功能 前言 开发环境 腾讯云 ---短信 代码 效果 结束语 java实现发短信功能 前言 如今发短信功能已经成为互联网公司的标配,本篇文章将一步步实现java发送短信 考察了 ...

  9. G客短信平台开发,资源短信功能使用说明

    短信平台使用资源短信操作顺序  联系微信:290615413 1:登录客户端 2:点击左侧 发送短信中的,资源短信 3:资源短信申请操作 3.1:选择相应的省市 会显示资源数量. 3.2:然后输入申请 ...

随机推荐

  1. 在Kibana上格式化字段,更好的在dashboard上展示

    一.为什么要格式化? 接着之前的文章-利用 ELK系统分析Nginx日志并对数据进行可视化展示.下面是http访问的日志,里面有一个字段,bytes 传输的字节,如下图: 绿色框框内选中的就是本次请求 ...

  2. 关于DOM树的常见增删操作

    //具体关于DOM的内容可参考我的另外一篇文章"文本对象模型(Document Object Model)". 案例要点:     1.创建并增加元素节点     2.判断是否存在 ...

  3. SQLServer获取临时表所有列名或是否存在指定列名的方法

    获取临时表中所有列名 select name from tempdb.dbo.syscolumns where id=object_id( '#TempTB') 判断临时表中是否存在指定列名 if c ...

  4. C#学习笔记(1) --简叙.net体系结构

    1 C#与.NET的关系 (1) C#是专门为与Microsoft的.Net Framework一起使用而设计的. (2) C#是一种基于面向对象设计方法的的语言. (3) 需要注意的是,C#就其本身 ...

  5. SQL Server中@@ROWCOUNT的用法

    SQL Server中@@ROWCOUNT返回受上一语句影响的行数,返回值类型为 int 整型. 如果行数大于 20 亿,则需要使用 ROWCOUNT_BIG. @@ROWCOUNT和@@ERROR变 ...

  6. yii2.0用户登录,退出判断(摘录)

    文章来源:http://blog.sina.com.cn/s/blog_88a65c1b0101ix13.html 判断用户是否登录 在 Yii2.0 里面,判断用户是否已经登录,我们用下面的代码即可 ...

  7. .NET Core 和 ASP.NET 5 RC1 发布

    昨天微软发布了 .NET Core 和 ASP.NET 5 候选版本,支持 Windows,Linux 和 OS X 平台,版本 License 为 "Go Live",,也就是说 ...

  8. windows临界区

    临界区: 临界区是一种轻量级机制,在某一时间内只允许一个线程执行某个给定代码段.通常在多线程修改全局数据时会使用临界区.事件.信号量也用于多线程同步,但临界区与它们不同,并不总是执行向内核模式的切换, ...

  9. Eclipse 出现Some sites could not be found. See the error log for more detail.错误 解决方法

    Eclipse 出现Some sites could not be found.  See the error log for more detail.错误 解决方法 Some sites could ...

  10. nodejs连接mysql并进行简单的增删查改

    最近在入门nodejs,正好学习到了如何使用nodejs进行数据库的连接,觉得比较重要,便写一下随笔,简单地记录一下 使用在安装好node之后,我们可以使用npm命令,在项目的根目录,安装nodejs ...