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.如何批量修改不相同的数据?
欢迎大家踊跃评论。