最近在做一个学校短信项目,使用了第三方提供的短信接口,现将本次封装好的短信接口帮助类分享一下:

下面是发送界面,还未美化完,支持学校各种形式的短信发送功能。

下面是封装好的方法,支持余额查询,批量发送等多种功能。

    /// <summary>/// 短信接口帮助类/// /// /// 修改纪录/// /// 2016-07-02 版本:1.0 SongBiao 创建文件。/// /// <author>///     <name>SongBiao</name>///     <date>2016-07-02</date>/// </author>/// </summary>public class MobilleMessageHelper{/// <summary>/// 短信服务地址/// </summary>const string Url = "http://XXXX.com/api/MsgSend.asmx";/// <summary>/// 短信账号/// </summary>const string UserCode = "xxxxx";/// <summary>/// 短信密码/// </summary>const string UserPass = "yyyyy";/// <summary>/// 签名/// </summary>public const string Signature = "【宜宾鸿辉】";/// <summary>/// 通道号/// </summary>const string  Channel="178";/// <summary>/// 扩展号/// </summary>const string  ExeNo="扩展号";#region http 请求及加密/// <summary>/// http get请求/// </summary>/// <param name="url"></param>/// <param name="data"></param>/// <returns></returns>public static string HttpGet(string url, string data){try{HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + "?" + data);request.Method = "GET";request.ContentType = "text/html;charset=UTF-8";HttpWebResponse response = (HttpWebResponse)request.GetResponse();Stream myResponseStream = response.GetResponseStream();StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));string retString = myStreamReader.ReadToEnd();myStreamReader.Close();myResponseStream.Close();return retString;}catch (Exception ex){return ex.Message;}}/// <summary>///  http post请求/// </summary>/// <param name="url"></param>/// <param name="data"></param>/// <returns></returns>public static string HttpPost(string url, string data){try{HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);request.Method = "POST";request.ContentType = "application/x-www-form-urlencoded";byte[] info = Encoding.UTF8.GetBytes(data);using (Stream stream = request.GetRequestStream()){stream.Write(info, 0, info.Length);}HttpWebResponse response = (HttpWebResponse)request.GetResponse();Stream myResponseStream = response.GetResponseStream();StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));string retString = myStreamReader.ReadToEnd();myStreamReader.Close();myResponseStream.Close();return retString;}catch (Exception ex){return ex.Message;}}/// <summary>/// DES加密/// </summary>/// <param name="str"></param>/// <param name="key"></param>/// <returns></returns>public static string EncodeStr(string str, string key) {try{DESCryptoServiceProvider provider = new DESCryptoServiceProvider();provider.Key = Encoding.ASCII.GetBytes(key.Substring(0, 8));provider.IV = Encoding.ASCII.GetBytes(key.Substring(0, 8));byte[] bytes = Encoding.GetEncoding("GB2312").GetBytes(str);MemoryStream stream = new MemoryStream();CryptoStream stream2 = new CryptoStream(stream, provider.CreateEncryptor(), CryptoStreamMode.Write);stream2.Write(bytes, 0, bytes.Length);stream2.FlushFinalBlock();StringBuilder builder = new StringBuilder();foreach (byte num in stream.ToArray()){builder.AppendFormat("{0:X2}", num);}stream.Close();return builder.ToString();}catch (Exception ex) { return ex.Message; }}/// <summary>/// //SHA1加密/// </summary>/// <param name="strSha1In"></param>/// <returns></returns>public static string SHA1Hash(string strSha1In){SHA1 sha1 = new SHA1CryptoServiceProvider();byte[] bytesSha1In = UTF8Encoding.Default.GetBytes(strSha1In);byte[] bytesSha1Out = sha1.ComputeHash(bytesSha1In);string strSha1Out = BitConverter.ToString(bytesSha1Out);strSha1Out = strSha1Out.Replace("-", "");return strSha1Out;}#endregion/*返回值类型string成功返回值返回用户金额的数字失败返回值返回带负号的失败代码*/#region 余额查询/// <summary>/// POST方式请求 余额查询/// </summary>/// <returns></returns>public static string GetBalanceByPost(){StringBuilder sb = new StringBuilder();sb.Append("userCode="+UserCode+"&");sb.Append("userPass="+UserPass);string result = HttpPost(Url + "/GetBalance", sb.ToString());return result;}/// <summary>/// Get方式请求 余额查询/// </summary>/// <returns></returns>public static string GetBalanceByGet(){StringBuilder sb = new StringBuilder();sb.Append("userCode="+UserCode+"&");sb.Append("userPass="+UserPass);string result = HttpGet(Url + "/GetBalance", sb.ToString());return result;}//private void getbalance()//{//    TopenServiceReference.MsgSendSoapClient topen = new TopenServiceReference.MsgSendSoapClient();//    string userName = "用户名";//    string passWord = "密码";//    string sendResult = topen.GetBalance(userName, passWord);//    //然后,根据返回的sendResult作相应处理//} #endregion/*返回值类型string成功返回值返回本次提交的批次号(如:2114355899380234221),(或叫序列号、流水号等,提交一次返回一个)失败返回值返回带负号的失败代码*/#region 短信发送/// <summary>/// POST方式请求 短信发送 手机号码,多个号码用英文半角逗号分隔例如:13900000000,13900000001每次提交不多于500个号码 /// </summary>/// <param name="desNo"></param>/// <param name="msg"></param>/// <returns>返回本次提交的批次号(如:2114355899380234221),(或叫序列号、流水号等,提交一次返回一个) ;失败返回值 返回带负号的失败代码</returns>public static string SendMsgByPost(string desNo, string msg){StringBuilder sb = new StringBuilder();sb.Append("userCode="+UserCode+"&");sb.Append("userPass="+UserPass+"&");sb.Append("DesNo="+desNo+"&");sb.Append("Msg="+msg+Signature+"&");sb.Append("Channel="+Channel);string result = HttpPost(Url + "/sendMes", sb.ToString());return result;}/// <summary>/// Get方式请求 短信发送 手机号码,多个号码用英文半角逗号分隔例如:13900000000,13900000001每次提交不多于500个号码 /// </summary>/// <param name="desNo"></param>/// <param name="msg"></param>/// <returns>返回本次提交的批次号(如:2114355899380234221),(或叫序列号、流水号等,提交一次返回一个) ;失败返回值 返回带负号的失败代码</returns>public static string SendMsgByGet(string desNo, string msg){StringBuilder sb = new StringBuilder();sb.Append("userCode="+UserCode+"&");sb.Append("userPass="+UserPass+"&");sb.Append("DesNo="+desNo+"&");sb.Append("Msg="+msg+Signature+"&");sb.Append("Channel="+Channel);string result = HttpGet(Url + "/sendMes", sb.ToString());return result;}/// <summary>/// /POST方式请求 加密短信发送 手机号码,多个号码用英文半角逗号分隔例如:13900000000,13900000001每次提交不多于500个号码 /// </summary>/// <param name="desNo"></param>/// <param name="msg"></param>/// <returns>返回本次提交的批次号(如:2114355899380234221),(或叫序列号、流水号等,提交一次返回一个) ;失败返回值 返回带负号的失败代码</returns>public static string SendMsgEncryptByPost(string desNo, string msg){string encryptCode =EncodeStr("userPass=" + UserPass + "&DesNo=" + desNo + "&Msg=" + msg + Signature + "&Channel=" + Channel,SHA1Hash(UserPass));StringBuilder sb = new StringBuilder();sb.Append("userCode="+UserCode+"&");sb.Append("submitInfo="+encryptCode);string result = HttpPost(Url + "/sendMsgByEncrypt", sb.ToString());return result;}/// <summary>/// Get方式请求 加密短信发送 手机号码,多个号码用英文半角逗号分隔例如:13900000000,13900000001每次提交不多于500个号码 /// </summary>/// <param name="desNo"></param>/// <param name="msg"></param>/// <returns>返回本次提交的批次号(如:2114355899380234221),(或叫序列号、流水号等,提交一次返回一个) ;失败返回值 返回带负号的失败代码</returns>public static string SendMsgEncryptByGet(string desNo, string msg) {string encryptCode=EncodeStr("userPass="+UserPass+"&DesNo="+desNo+"&Msg="+msg+Signature+"&Channel="+Channel,SHA1Hash(UserPass));StringBuilder sb = new StringBuilder();sb.Append("userCode="+UserCode+"&");sb.Append("submitInfo="+encryptCode);string result = HttpGet(Url + "/sendMsgByEncrypt", sb.ToString());return result;}/// <summary>///  POST方式请求 个性化短信发送/// 例如,需发送如下短信/// 13800000000 王某某,明天记得要开会【123】/// 13800000000 张某某,明天记得要开会【123】/// 13800000000 李某某,明天记得要开会【123】/// 最终拼接url如下:http://yes.itissm.com/api/IndividualSm.aspx?account=admin1&pwd=123&channel=37&msg=13800000000|!|王某某,明天记得要开会【123】|^|13900000000|!|张某某,明天记得要开会【123】|^|18600000000|!|李某某,明天记得要开会【123】/// </summary>/// <param name="msg">短信内容为utf-8编码每条个性化短信以英文|^|分割,号码与短信内容以英文|!|分割</param>/// <returns>返回本次提交的批次号(如:2114355899380234221),(或叫序列号、流水号等,提交一次返回一个) ;失败返回值 返回带负号的失败代码</returns>public static string IndividUalsmByPost(string msg){StringBuilder sb = new StringBuilder();sb.Append("account="+UserCode+"&");sb.Append("pwd="+UserPass+"&");sb.Append("Channel="+Channel+"&");//sb.Append("Msg=手机号|!|短信内容【签名】|^|手机号|!|短信内容【签名】|^|");sb.Append("Msg="+msg);string result = HttpPost(Url,sb.ToString());return result;}//private void SendSms() //webservice请求方式//{//    TopenServiceReference.MsgSendSoapClient topen = new TopenServiceReference.MsgSendSoapClient();//    string userName = "用户名";//    string passWord = "密码";//    string mobiles = "13900000000,13800000000,13100000000,……";//    string msgContent = "短信内容(含签名)";//    string channel = "由拓鹏给您的通道编号";//    string sendResult = topen.sendMes(userName, passWord, mobiles, msgContent, channel); //此处的sendMes可能因接口文档不同而不同,请注意。返回批次号,可保存下来,作为获取发送报告凭据//    //然后,根据返回的sendResult作相应处理//} #endregion#region 短信扩展发送/// <summary>///  POST方式请求 短信扩展发送/// </summary>/// <returns></returns>public static string SendMsgExtByPost(string desNo,string msg){StringBuilder sb = new StringBuilder();sb.Append("userCode="+UserCode+"&");sb.Append("userPass="+UserPass+"&");sb.Append("DesNo="+desNo+"&");sb.Append("Msg="+msg+Signature+"&");sb.Append("Channel="+Channel+"&");sb.Append("ExeNo="+ExeNo);string result = HttpPost(Url + "/sendMesExt", sb.ToString());return result;}/// <summary>///  Get方式请求 短信扩展发送/// </summary>/// <returns></returns>public static string SendMsgExtByGet(string desNo,string msg){StringBuilder sb = new StringBuilder();sb.Append("userCode="+UserCode+"&");sb.Append("userPass="+UserPass+"&");sb.Append("DesNo="+desNo+"&");sb.Append("Msg="+msg+Signature+"&");sb.Append("Channel="+Channel+"&");sb.Append("ExeNo="+ExeNo);string result = HttpGet(Url + "/sendMesExt", sb.ToString());return result;}#endregion#region 获取状态报告/// <summary>///  POST方式请求 获取状态报告/// </summary>/// <returns></returns>public static string GetReport2ByPost(){StringBuilder sb = new StringBuilder();sb.Append("userCode="+UserCode+"&");sb.Append("userPass="+UserPass);string result = HttpPost(Url + "/GetReport2", sb.ToString());return result;}/// <summary>///  Get方式请求 获取状态报告/// </summary>/// <returns></returns>public static string GetReport2ByGet(){StringBuilder sb = new StringBuilder();sb.Append("userCode="+UserCode+"&");sb.Append("userPass="+UserPass);string result = HttpGet(Url + "/GetReport2", sb.ToString());return result;} /// <summary>/// POST方式请求加密 获取状态报告/// </summary>/// <returns></returns>public static string GetReport2EncryptByPost(){string encryptCode=EncodeStr("userPass="+UserPass,SHA1Hash(UserPass));StringBuilder sb = new StringBuilder();sb.Append("userCode="+UserCode+"&");sb.Append("submitInfo="+encryptCode);string result = HttpPost(Url + "/GetReport2ByEncrypt", sb.ToString());return result;}/// <summary>/// Get方式请求加密 获取状态报告/// </summary>/// <returns></returns>public static string GetReport2EncryptByGet() {string encryptCode=EncodeStr("userPass="+UserPass,SHA1Hash(UserPass));StringBuilder sb = new StringBuilder();sb.Append("userCode="+UserCode+"&");sb.Append("submitInfo="+encryptCode);string result = HttpGet(Url + "/GetReport2ByEncrypt", sb.ToString());return result;}#endregion#region 获取回复/// <summary>/// POST方式请求 获取回复/// </summary>/// <returns></returns>public static string GetMo2ByPost(){StringBuilder sb = new StringBuilder();sb.Append("userCode="+UserCode+"&");sb.Append("userPass="+UserPass);string result = HttpPost(Url + "/GetMo2", sb.ToString());return result;}/// <summary>///  Get方式请求 获取回复/// </summary>/// <returns></returns>public static string GetMo2ByGet(){StringBuilder sb = new StringBuilder();sb.Append("userCode="+UserCode+"&");sb.Append("userPass="+UserPass+"&");string result = HttpGet(Url + "/GetMo2", sb.ToString());return result;}/// <summary>/// POST方式请求 获取回复(加密)/// </summary>/// <returns></returns>public static string GetMo2EncryptByPost(){string encryptCode=EncodeStr("userPass="+UserPass,SHA1Hash(UserPass));StringBuilder sb = new StringBuilder();sb.Append("userCode="+UserCode+"&");sb.Append("submitInfo="+encryptCode);string result = HttpPost(Url + "/GetMo2ByEncrypt", sb.ToString());return result;}/// <summary>/// Get方式请求 获取回复(加密)/// </summary>/// <returns></returns>public static string GetMo2EncryptByGet(){string encryptCode = EncodeStr("userPass=密码", SHA1Hash(UserPass));StringBuilder sb = new StringBuilder();sb.Append("userCode="+UserCode+"&");sb.Append("submitInfo="+encryptCode);string result = HttpGet(Url + "/GetMo2ByEncrypt", sb.ToString());return result;}        #endregion#region 获取关键字/// <summary>///  POST方式请求 获取关键字/// </summary>/// <returns></returns>public static string GetKeywordsByPost(){StringBuilder sb = new StringBuilder();sb.Append("userCode="+UserCode+"&");sb.Append("userPass="+UserPass+"&");sb.Append("Channel="+Channel);string result = HttpPost(Url + "/GetKeyWords", sb.ToString());return result;}/// <summary>/// Get方式请求 获取关键字/// </summary>/// <returns></returns>public static string GetKeywordsByGet() {StringBuilder sb = new StringBuilder();sb.Append("userCode="+UserCode+"&");sb.Append("userPass="+UserPass+"&");sb.Append("Channel="+Channel);string result = HttpGet(Url + "/GetKeyWords", sb.ToString());return result;} #endregion}/// <summary>/// 手机短信 云信状态枚举/// </summary>public enum YunXinMessageStatus{/// <summary>/// -1 应用程序异常/// </summary>[EnumDescription("应用程序异常")]ApplicationError = -1,/// <summary>///  -3 用户名密码错误或者用户无效/// </summary>[EnumDescription("用户名密码错误或者用户无效")]AccountError = -3,/// <summary>///  -5 签名不正确(格式为:XXX【签名内容】), 注意:短信内容最后一个字符必须是】/// </summary>[EnumDescription("签名不正确")]SignatureError = -5,/// <summary>///  -6:keyWords 含有关键字keyWords(keyWords为敏感内容,如:-6:促销)/// </summary>[EnumDescription("含有关键字")]KeyWordsNotAllow = -6,/// <summary>///  -7 余额不足/// </summary>[EnumDescription("余额不足")]BalanceNotEnough = -7,/// <summary>///   -8 没有可用的通道,或不在时间范围内/// </summary>[EnumDescription("余额不足")]ChannelNoAvailable = -8,/// <summary>///  -9 发送号码一次不能超过1000个/// </summary>[EnumDescription("发送号码一次不能超过1000个")]SendTooManyNumbers = -9,/// <summary>///  -10 号码数量大于允许上限(不设置上限时,不可超过1000)/// </summary>[EnumDescription("号码数量大于允许上限(不设置上限时,不可超过1000)")]SendOverLimit = -10,/// <summary>///  -11 号码数量小于允许下限/// </summary>[EnumDescription("号码数量小于允许下限")]SendLessLimit = -11,/// <summary>///  -12 模板不匹配/// </summary>[EnumDescription("模板不匹配")]TemplateMismatch = -12,/// <summary>///  -13 Invalid Ip ip绑定用户,未绑定该ip/// </summary>[EnumDescription("ip绑定用户,未绑定该ip")]InvalidIp = -13,/// <summary>///  -14 用户黑名单/// </summary>[EnumDescription("用户黑名单")]UserBlackList = -14,/// <summary>///  -15 系统黑名单/// </summary>[EnumDescription("系统黑名单")]SystemBlackList = -15,/// <summary>///  -16 号码格式错误/// </summary>[EnumDescription("号码格式错误")]NumberFormatError = -16,/// <summary>///  -17 无效号码(格式正常,可不是正确的电话号码,如12345456765)/// </summary>[EnumDescription("无效号码")]InvalidNumber = -17,/// <summary>/// -18 没有设置用户的固定下发扩展,不能自定义扩展/// </summary>[EnumDescription("没有设置用户的固定下发扩展,不能自定义扩展")]CannotCustomizeExtension = -18,/// <summary>/// -19 强制模板通道,不能使用个性化接口/// </summary>[EnumDescription("强制模板通道,不能使用个性化接口")]CanNotUsePersonalized = -19,/// <summary>/// -20 包含非法字符/// </summary>[EnumDescription("包含非法字符")]ContainsIllegalCharacters = -20,/// <summary>/// -21 没有找到对应的submitID设置/// </summary>[EnumDescription("没有找到对应的submitID设置")]NoSubmitID = -21,/// <summary>/// -22 解密失败/// </summary>[EnumDescription("解密失败")]DecryptionFailure = -22,/// <summary>/// -23 查询余额过频繁(至少间隔10秒)/// </summary>[EnumDescription("查询余额过频繁(至少间隔10秒)")]QueryBalanceTooFrequent = -23,}

一个比较完整的短信接口帮助类参考相关推荐

  1. 移动MAS短信接口工具类

    import com.jasson.im.api.APIClient;/*** 移动代理服务器MAS短信工具类*/ public class SMSUtil {/*** 移动代理服务器IP地址*/pr ...

  2. 老许,免费分享一个python短信接口,包含200条短信,你要不要?

    今天给大家分享一个免费的python短信接口.可以用于短信注册.登录.密码找回.短信通知等场景. 使用方法如下: 1.下载资源包,按照文档申请签名和模板,就可以看到200条短信额度了 2.在代码中填写 ...

  3. JAVA怎么给手机发短信对接验证码短信接口DEMO示例

    发现一个超简单验证码短信接口对接DEMO示例 步骤 1.注册 互亿无线 账号 2.查找APIID和APIKEY 3.代码的书写 注册 互亿无线 账号 网站: http://user.ihuyi.com ...

  4. 详解-java调用腾讯云的短信接口(从申请到测试完成)

    首先我们去注册或登录腾讯云 可以白嫖200条短信(反正也是自己玩玩,足够了) 在产品那里找到短信 进入之后,看应用列表里面有没有创建过(如果没有就创建)这里有一个SDKAppID会要用到 创建之后呢, ...

  5. java调用腾讯云的短信接口

    首先导入maven依赖 <dependency><groupId>com.tencentcloudapi</groupId><artifactId>te ...

  6. NODE.JS如何开发短信接口以及demo

    学习编程得第N天,发现一个超简单验证码短信接口对接DEMO示例 * Created by XadillaX on 14-2-12. * https://github.com/XadillaX/ihuy ...

  7. NODE.JS怎么给手机发短信对接验证码短信接口DEMO示例

    发现一个超简单验证码短信接口对接DEMO示例 步骤 1.注册 互亿无线 账号 2.查找APIID和APIKEY 3.代码的书写 注册 互亿无线 账号 网站: http://user.ihuyi.com ...

  8. JSP怎么给手机发短信对接验证码短信接口DEMO示例

    发现一个超简单验证码短信接口对接DEMO示例 步骤 1.注册 互亿无线 账号 2.查找APIID和APIKEY 3.代码的书写 注册 互亿无线 账号 网站: http://user.ihuyi.com ...

  9. php阿里大鱼短信接口,阿里大鱼短信发送接口demo

    [实例简介]这是一个阿里大于的短信接口示例demo,修改代码中的 appkey 和 secretkey即可 发短信验证码 [实例截图] [核心代码] include "AlibabaAliq ...

  10. 请求一个短信接口,并接收该接口返回的状态值

    最近项目中用到发送验证码这个功能,需要请求一个短信接口,并且接收请求后返回的状态值,开始我觉得要抓取页面内容,然后自己也就这样做了,发现效果不理想,之后就放弃了. 接着就百度了,有人提到用HttpWe ...

最新文章

  1. 神经网络中的注意力机制总结及PyTorch实战
  2. python中使用squarify包可视化treemap图:treemap将分层数据显示为一组嵌套矩形,每一组都用一个矩形表示,该矩形的面积与其值成正比、自定义设置每一个数据格的颜色
  3. 标准库time,datetime,calendar,random的使用
  4. openHEVC 编译 for VS2017+Win10 x64
  5. python序列类型包括哪三种映射类型_python序列类型包括哪三种
  6. Java(TM) Platform SE binary已停止工作
  7. 动软代码生成器连接8.0.17版本的mysql
  8. java 实心圆,liststyletype实心圆小图标大小颜色属性设置
  9. 阿里云数据库怎么使用
  10. 阿里面试官没想到,一个Volatile,我都能跟他吹半小时
  11. vscode 下载地址
  12. CENTOS7 MINIAL环境下配置pptpd-1.4.0
  13. 一、IOS CocoaPods详细使用方法
  14. 错位解读:细节的反义词不是粗心,…
  15. html5 刮刮乐 源码,HTML5 canvas实现刮刮乐功能
  16. SpringBoot启动时:Process finished with exit code 0解决办法
  17. 什么是股票分仓软件, 实现原理解析2
  18. STM32 BLDC无刷直流电机 HALL霍尔硬件接口 程序
  19. x86 LEA 指令
  20. 纯色bmp图片生成的效率

热门文章

  1. PHP把商品详情数据加入到商品数据,如果商品有多个详情只展示一次商品数据
  2. PHP EOF使用方法
  3. 计算机术语中cook,计算机中的cookie是什么意思
  4. WINDOWS BAT的命令,双引号位置要注意
  5. 解决办法:char类型的实参与LPCWSTR类型的形参类型不兼容
  6. 深度学习框架间互操作的工具:MMdnn
  7. LINUX下类似画图板Paint的工具
  8. 几人同行时步伐总是整齐
  9. 管理感悟:对事又对人
  10. python中debug有什么用途_python中调试或排错的五种方法示例