.net 发短信案例

1. 首先找到第三方发短信接口文档。

2.根据接口文档自己写个接口,调用他们发短信url , 可以先写个小demo.。 

  我这用的是 胜券短信 。 


     

        /// <summary>
        /// 短信发送
        /// </summary>
        /// <param name="sms_phone">短信发送对象</param>
        /// <param name="sms_text">短信发送内容</param>
        /// <returns></returns>
        public static msgSendInfo SendSMS(string sms_phone, string sms_text)
        {
            StringBuilder sms = new StringBuilder();

            //(模板发送)的只需要对sms_text、sms_phone进行base64加密
            if (sms_template == "1")
            {
                //加密手机号   用了base64加密后,要把特殊字符串替换(文档中没有详细写,记得看下人家的案例)
                sms_phone = GetToStr(EncryptionHelper.EncodeBase64(Encoding.UTF8, sms_phone));
                sms_text = GetToStr(EncryptionHelper.EncodeBase64(Encoding.UTF8, sms_text));
            }
            else
            {
                sms_text = GetToStr(EncryptionHelper.EncodeBase64(Encoding.UTF8, sms_text));
            }
            sms.AppendFormat("app_key={0}", app_key);
            // app_version为2表示需要加签名
            if (app_version == version)
            {
                //需要加签名
                sms.AppendFormat("&sms_sign", sms_sign);
            }

            //这些都是参数,看你们怎么去定义,可以放在webconfig中

            sms.AppendFormat("&app_version={0}", app_version);
            sms.AppendFormat("&sms_phone={0}", sms_phone);
            sms.AppendFormat("&sms_text={0}", sms_text);
            sms.AppendFormat("&sms_sub_account_id={0}", sms_sub_account_id);
            sms.AppendFormat("&sms_priority={0}", sms_priority);
            sms.AppendFormat("&sms_flag={0}", flag);
            sms.AppendFormat("&sms_template={0}", sms_template);
            sms.AppendFormat("&sms_timersend_time={0}", sms_timersend_time);
            sms.AppendFormat("&sms_isreplay={0}", sms_isreplay);
            sms.AppendFormat("&sms_isrepeat={0}", sms_isrepeat);
            //应用签名(产生方式:将所有参数升序排序,然后将参数与内容相连,在前后加app_secret,将整个内容采用md5的方式加密)
            MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
            byte[] app_sign = md5Hasher.ComputeHash(Encoding.Default.GetBytes(app_secret + sms.ToString() + app_secret));

            //byte[] app_sign = MD5(sms.ToString() + app_secret);
            var sb = new StringBuilder();
            foreach (var ch in app_sign)
            {
                sb.Append(string.Format("{0:X2}", ch));
            }
            sms.AppendFormat("&app_sign={0}", sb.ToString());
            string resp = SendMsgByHttp(url, sms.ToString(), Encoding.UTF8);

            msgSendInfo sendInfo = JsonConvert.DeserializeObject<msgSendInfo>(resp);
            return sendInfo;
        }

 

 

  public static class restMgs
    {

        public static string GetToStr(string sStr)
        {
            return sStr.Replace("%", " %25").Replace("+", "%2B").Replace("/", "%2F").Replace("?", "%3F").Replace("#", "%23").Replace("&", "%26");
        }

        public static string StrToHex(string mStr) //返回处理后的十六进制字符串
        {
            return BitConverter.ToString(
            ASCIIEncoding.Default.GetBytes(mStr)).Replace("-", " ");
        }


        public static string HexToStr(string mHex) // 返回十六进制代表的字符串
        {
            mHex = mHex.Replace(" ", "");
            if (mHex.Length <= 0) return "";
            byte[] vBytes = new byte[mHex.Length / 2];
            for (int i = 0; i < mHex.Length; i += 2)
                if (!byte.TryParse(mHex.Substring(i, 2), NumberStyles.HexNumber, null, out vBytes[i / 2]))
                    vBytes[i / 2] = 0;
            return ASCIIEncoding.Default.GetString(vBytes);
        }

        public static string PushToWeb(string weburl, string data, Encoding encode)
        {
            try
            {

                byte[] byteArray = encode.GetBytes(data);

                HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(new Uri(weburl));
                webRequest.Method = "POST";
                webRequest.ContentType = "application/x-www-form-urlencoded";
                webRequest.ContentLength = byteArray.Length;

                Stream newStream = webRequest.GetRequestStream();
                newStream.Write(byteArray, 0, byteArray.Length);
                newStream.Close();

                //接收返回信息:
                HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
                StreamReader aspx = new StreamReader(response.GetResponseStream(), encode);
                string msg = aspx.ReadToEnd();
                aspx.Close();
                response.Close();
                return msg;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Base64编码
        /// </summary>
        /// <param name="thisString"></param>
        /// <returns></returns>
        public static string ToBase64(string thisString)
        {
            if (thisString == "")
                return string.Empty;
            return Convert.ToBase64String(Encoding.UTF8.GetBytes(thisString));
        }

        ///   <summary>   
        ///   将指定字符串进行Base64编码。   
        ///   </summary>   
        ///   <param   name="codeType">GB2312</param>   
        ///   <param   name="code">具体html字符串</param>   
        ///   <returns></returns>   
        public static string EncodeBase64(string codeType, string code)
        {
            string encode = "";
            byte[] bytes = Encoding.GetEncoding(codeType).GetBytes(code);
            encode = Convert.ToBase64String(bytes);
            return encode;
        }


        /// <summary>
        /// Base64加密,采用utf8编码方式加密
        /// </summary>
        /// <param name="source">待加密的明文</param>
        /// <returns>加密后的字符串</returns>
        public static string Base64Encode(string source)
        {
            return Base64Encode(Encoding.UTF8, source);
        }

        /// <summary>
        /// Base64加密
        /// </summary>
        /// <param name="encodeType">加密采用的编码方式</param>
        /// <param name="source">待加密的明文</param>
        /// <returns></returns>
        public static string Base64Encode(Encoding encodeType, string source)
        {
            string encode = string.Empty;
            byte[] bytes = encodeType.GetBytes(source);
            try
            {
                encode = Convert.ToBase64String(bytes);
            }
            catch
            {
                encode = source;
            }
            return encode;
        }


        /// <summary>
        /// Base64解密
        /// </summary>
        /// <param name="encodeType">解密采用的编码方式,注意和加密时采用的方式一致</param>
        /// <param name="result">待解密的密文</param>
        /// <returns>解密后的字符串</returns>
        public static string Base64Decode(Encoding encodeType, string result)
        {
            string decode = string.Empty;
            byte[] bytes = Convert.FromBase64String(result);
            try
            {
                decode = encodeType.GetString(bytes);
            }
            catch
            {
                decode = result;
            }
            return decode;
        }

    }
    /// <summary>
    /// 短信发送返回的对象
    /// </summary>
    [Serializable]
    public class msgSendInfo
    {
        /// <summary>
        /// 返回true或者flase
        /// </summary>
        public bool success { get; set; }

        /// <summary>
        /// 发送结果编码号
        /// </summary>
        public int code { get; set; }
        /// <summary>
        /// 信息记录id
        /// </summary>
        public int messagelog_id { get; set; }

        /// <summary>
        /// 发送信息描述
        /// </summary>
        public string msg { get; set; }


        /// <summary>
        /// 
        /// </summary>
        public int task_id { get; set; }
    }

这是发短信的流程,要是大家有什么好的思路可以告诉我。

1.要是对不同的内容进行群发,是如何?能不能把相同的参数进行封装。进行一次性对不同的手机号和内容发。

2.如何批量修改不相同的数据?

欢迎大家踊跃评论。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值