一个比较完整的短信接口帮助类参考
最近在做一个学校短信项目,使用了第三方提供的短信接口,现将本次封装好的短信接口帮助类分享一下:
下面是发送界面,还未美化完,支持学校各种形式的短信发送功能。
下面是封装好的方法,支持余额查询,批量发送等多种功能。
/// <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,}
一个比较完整的短信接口帮助类参考相关推荐
- 移动MAS短信接口工具类
import com.jasson.im.api.APIClient;/*** 移动代理服务器MAS短信工具类*/ public class SMSUtil {/*** 移动代理服务器IP地址*/pr ...
- 老许,免费分享一个python短信接口,包含200条短信,你要不要?
今天给大家分享一个免费的python短信接口.可以用于短信注册.登录.密码找回.短信通知等场景. 使用方法如下: 1.下载资源包,按照文档申请签名和模板,就可以看到200条短信额度了 2.在代码中填写 ...
- JAVA怎么给手机发短信对接验证码短信接口DEMO示例
发现一个超简单验证码短信接口对接DEMO示例 步骤 1.注册 互亿无线 账号 2.查找APIID和APIKEY 3.代码的书写 注册 互亿无线 账号 网站: http://user.ihuyi.com ...
- 详解-java调用腾讯云的短信接口(从申请到测试完成)
首先我们去注册或登录腾讯云 可以白嫖200条短信(反正也是自己玩玩,足够了) 在产品那里找到短信 进入之后,看应用列表里面有没有创建过(如果没有就创建)这里有一个SDKAppID会要用到 创建之后呢, ...
- java调用腾讯云的短信接口
首先导入maven依赖 <dependency><groupId>com.tencentcloudapi</groupId><artifactId>te ...
- NODE.JS如何开发短信接口以及demo
学习编程得第N天,发现一个超简单验证码短信接口对接DEMO示例 * Created by XadillaX on 14-2-12. * https://github.com/XadillaX/ihuy ...
- NODE.JS怎么给手机发短信对接验证码短信接口DEMO示例
发现一个超简单验证码短信接口对接DEMO示例 步骤 1.注册 互亿无线 账号 2.查找APIID和APIKEY 3.代码的书写 注册 互亿无线 账号 网站: http://user.ihuyi.com ...
- JSP怎么给手机发短信对接验证码短信接口DEMO示例
发现一个超简单验证码短信接口对接DEMO示例 步骤 1.注册 互亿无线 账号 2.查找APIID和APIKEY 3.代码的书写 注册 互亿无线 账号 网站: http://user.ihuyi.com ...
- php阿里大鱼短信接口,阿里大鱼短信发送接口demo
[实例简介]这是一个阿里大于的短信接口示例demo,修改代码中的 appkey 和 secretkey即可 发短信验证码 [实例截图] [核心代码] include "AlibabaAliq ...
- 请求一个短信接口,并接收该接口返回的状态值
最近项目中用到发送验证码这个功能,需要请求一个短信接口,并且接收请求后返回的状态值,开始我觉得要抓取页面内容,然后自己也就这样做了,发现效果不理想,之后就放弃了. 接着就百度了,有人提到用HttpWe ...
最新文章
- 神经网络中的注意力机制总结及PyTorch实战
- python中使用squarify包可视化treemap图:treemap将分层数据显示为一组嵌套矩形,每一组都用一个矩形表示,该矩形的面积与其值成正比、自定义设置每一个数据格的颜色
- 标准库time,datetime,calendar,random的使用
- openHEVC 编译 for VS2017+Win10 x64
- python序列类型包括哪三种映射类型_python序列类型包括哪三种
- Java(TM) Platform SE binary已停止工作
- 动软代码生成器连接8.0.17版本的mysql
- java 实心圆,liststyletype实心圆小图标大小颜色属性设置
- 阿里云数据库怎么使用
- 阿里面试官没想到,一个Volatile,我都能跟他吹半小时
- vscode 下载地址
- CENTOS7 MINIAL环境下配置pptpd-1.4.0
- 一、IOS CocoaPods详细使用方法
- 错位解读:细节的反义词不是粗心,…
- html5 刮刮乐 源码,HTML5 canvas实现刮刮乐功能
- SpringBoot启动时:Process finished with exit code 0解决办法
- 什么是股票分仓软件, 实现原理解析2
- STM32 BLDC无刷直流电机 HALL霍尔硬件接口 程序
- x86 LEA 指令
- 纯色bmp图片生成的效率