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; }
    }
View Code

3.创建响应内容实体类

/// <summary>
    /// 接收发送信息
    /// </summary>
    public class RecevieMessage
    {
        /// <summary>
        /// 结果代码,0000为全部成功,0001为部分成功,其他为失败,详见下面代码表
        /// </summary>
        public string code { get; set; }
        /// <summary>
        /// 结果说明
        /// </summary>
        public string massage { 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; }
    }
View Code

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;//返回结果
            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();
            return returncode;
        }

6.调用信息

 protected void Page_Load(object sender, EventArgs e)
        {
            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了。然后就可以通过实体类使用数据了。
            RecevieMessage reveMess = JsonConvert.DeserializeObject<RecevieMessage>(RetrunJson);
            Response.Write(reveMess.massage);//展示返回结果
        }

 

猜你喜欢

转载自www.cnblogs.com/TechSingularity/p/12669368.html