c#短信发送-使用ASE加密,短信内容使用json传输,响应内容返回json的处理方案
使用ASE加密,短信内容使用json传输,响应内容返回json,进行处理。
1.引用
using System.Text; using System.Security.Cryptography; using System.Net; using System.IO; using Newtonsoft.Json; using System.Collections.Generic;
2.创建短信内容实体类

/// <summary> /// 发送信息的实体类 /// </summary> public class MessageInfo { /// <summary> /// 发送电话 /// </summary> public List<string> Mobiles { get; set; } /// <summary> /// 发送内容 /// </summary> public string SmsContent { get; set; } /// <summary> /// 扩展码 /// </summary> public string ExtendedCode { get; set; } /// <summary> /// 发送时间 /// </summary> public string SendTime { get; set; } }
3.创建响应内容实体类

/// <summary> /// 接收发送信息 /// </summary> public class MessageResponse { /// <summary> /// 结果代码,0000为全部成功,0001为部分成功,其他为失败,详见下面代码表 /// </summary> public string Code { get; set; } /// <summary> /// 结果说明 /// </summary> public string Message { get; set; } /// <summary> /// 消息ID,后续状态报告的返回以消息ID与手机号码作为依据,消息ID与手机号码确定唯一短信发送 /// </summary> public string Sms_id { get; set; } /// <summary> /// 接收到的号码总数 /// </summary> public string Total_Number { get; set; } /// <summary> /// 成功处理的号码数量 /// </summary> public string Success_Number { get; set; } /// <summary> /// 无法处理的号码数量 /// </summary> public string Fail_Number { get; set; } /// <summary> /// 无法处理的号码以及原因集合 /// </summary> public List<string> Fail_Mobiles { get; set; } }
4.使用用户密钥针对当前系统时间(yyyyMMddHHmmssSSS)进行AES加密签名,短信平台会校验此时间,如果签名时间小于或者大于系统时间10分钟以上,则拒绝此请求
/// <summary> /// 获取签名 ///使用用户密钥针对当前系统时间(yyyyMMddHHmmssSSS)进行AES加密签名,短信平台会校验此时间, ///如果签名时间小于或者大于系统时间10分钟以上,则拒绝此请求 /// </summary> /// <returns></returns> public string GetSign() { String date = DateTime.Now.ToString("yyyyMMddHHmmssfff");//获取当前时间 byte[] keyArray = UTF8Encoding.UTF8.GetBytes("");//秘钥 byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(date); //加密,需要引用System.Security.Cryptography RijndaelManaged rDel = new RijndaelManaged(); rDel.Key = keyArray; rDel.Mode = CipherMode.ECB; rDel.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = rDel.CreateEncryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); String sign = ""; for (int ip = 0; ip < resultArray.Length; ip++) { int int32 = Convert.ToInt32(resultArray[ip]); string hexStr = Convert.ToString(int32, 16); if (hexStr.Length == 1) { hexStr = '0' + hexStr; } sign = sign + hexStr; } return sign; }
5.发送信息
/// <summary> /// 发送信息 /// </summary> /// <param name="content"></param> /// <returns></returns> public string SendSmsInfo(string content) { string Key = "";//公钥 string sign = GetSign();//获取签名 string PostUrl = "http:......?public_key=" + Key + "&sign=" + sign+ "&sms_data=" + content; string returncode = string.Empty;//返回结果 try { HttpWebRequest wRequest = (HttpWebRequest)WebRequest.Create(PostUrl);//创建请求 wRequest.Method = "Post"; wRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; HttpWebResponse wResponse = (HttpWebResponse)wRequest.GetResponse(); Stream stream = wResponse.GetResponseStream(); if (wResponse.StatusCode == HttpStatusCode.OK) { StreamReader reader = new StreamReader(wResponse.GetResponseStream(), Encoding.UTF8); returncode = reader.ReadToEnd();//返回结果 } stream.Close(); wResponse.Close(); } catch(Exception e) { throw e; } return returncode; }
6.调用信息
MessageInfo message = new MessageInfo();//创建发送实体类 List<string> mobileList = new List<string>(); mobileList.Add("189****6530"); message.Mobiles = mobileList; message.SmsContent = "信息内容"; message.ExtendedCode = null; message.SendTime = null; //把我们初始化好的对象传入即可,引用Newtonsoft.Json string json = JsonConvert.SerializeObject(message); string retrunJson= SendSmsInfo(json); // 这个需要引入Newtonsoft.Json这个DLL并using //传入我们的实体类还有需要解析的JSON字符串这样就OK了。然后就可以通过实体类使用数据了。 MessageResponse reveMess = JsonConvert.DeserializeObject<MessageResponse>(retrunJson); if(reveMess!=null) { Response.Write(reveMess.Message); }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步