您的位置:首页 > 编程语言 > C#

关于c#短信发送接口使用说明

2016-05-19 10:53 435 查看
前段时间开发一个中国联通一线通的短接口,现将一些代码共享,方便新手使用

首先,我要说明的是,我这里是写一个接口,供我团队其它成员使用,他们只需要post两个参数给我就可以

下面是主入口

窗体代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.IO;
using System.Text;
using System.Collections.Specialized;
using System.Data;
using System.Data.SqlClient;

public partial class sendinfo : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
sendxinxi();
}
private void sendxinxi()
{
try
{
string UserNumber = Request.Form["mobile"].Trim();//手机号
string MessageContent = Request.Form["content"].Trim();//发送内容
if (UserNumber == null || UserNumber == "" || MessageContent == null || MessageContent == "")
{
//Response.Clear();
Response.Write("callbackfun({ result:\"False\"})");
//Response.End();
}
else
{
if (sendms_data.countsms(UserNumber))
{
sendms_data.insertdata_yc(UserNumber, "此手机号当天发送量超过30条,系统设置无法发送成功!,提交内容为:" + MyUrlDeCode(MessageContent,null));//写入异常数据
//Response.Clear();
Response.Write("callbackfun({ result:\"False\"})");
//Response.End();
}
else
{
sendmode sendinfomode = new sendmode();
string SpCode = sendinfomode.SpCode;
string LoginName = sendinfomode.LoginName;
string Password = sendinfomode.Password;
string SerialNumber = sendinfomode.SerialNumber;
string urltem = sendinfomode.urltem;

////先GBK编码,然后UrlEncode编码
MessageContent = HttpUtility.UrlEncode(Encoding.GetEncoding("GBK").GetBytes(MessageContent));

string url = urltem + "?SpCode=" + SpCode + "&LoginName=" + LoginName + "&Password=" + Password + "&MessageContent=" + MessageContent + "&UserNumber=" + UserNumber + "&SerialNumber=" + SerialNumber + "&ScheduleTime=&f=1";
byte[] postData = Encoding.UTF8.GetBytes(url);

HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
Encoding myEncoding = Encoding.UTF8;
request.Method = "POST";
request.KeepAlive = false;
request.AllowAutoRedirect = true;
request.ContentType = "application/x-www-form-urlencoded";
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
request.ContentLength = postData.Length;

// 提交请求数据
System.IO.Stream outputStream = request.GetRequestStream();
outputStream.Write(postData, 0, postData.Length);
outputStream.Close();

HttpWebResponse response;
Stream responseStream;
StreamReader reader;
string srcString;
response = request.GetResponse() as HttpWebResponse;
responseStream = response.GetResponseStream();
reader = new System.IO.StreamReader(responseStream, Encoding.GetEncoding("GBK"));
srcString = reader.ReadToEnd();
string result = srcString; //返回值赋值"result=0&description=发送短信成功&taskid=232128029936&faillist=&task_id=232128029936";//
reader.Close();
NameValueCollection col = GetQueryString(result);
string searchKey = col["result"];
if (searchKey == "0")
{
sendms_data.insertdata_zc(UserNumber, MyUrlDeCode(MessageContent, null));//写入正常数据
//Response.Clear();
Response.Write("callbackfun({ result:\"True\"})");
//Response.End();
}
else
{
sendms_data.insertdata_yc(UserNumber, result + "提交内容为:" + MyUrlDeCode(MessageContent, null));//写入异常数据
//Response.Clear();
Response.Write("callbackfun({ result:\"False\"})");
//Response.End();
}
}
}
}
catch
{
//Response.Clear();
Response.Write("callbackfun({ result:\"False\"})");
//Response.End();
}

}
/// <summary>
/// 将查询字符串解析转换为名值集合.
/// </summary>
/// <param name="queryString"></param>
/// <returns></returns>
public static NameValueCollection GetQueryString(string queryString)
{
return GetQueryString(queryString, null, true);
}

/// <summary>
/// 将查询字符串解析转换为名值集合.
/// </summary>
/// <param name="queryString"></param>
/// <param name="encoding"></param>
/// <param name="isEncoded"></param>
/// <returns></returns>
public static NameValueCollection GetQueryString(string queryString, Encoding encoding, bool isEncoded)
{
queryString = queryString.Replace("?", "");
NameValueCollection result = new NameValueCollection(StringComparer.OrdinalIgnoreCase);
if (!string.IsNullOrEmpty(queryString))
{
int count = queryString.Length;
for (int i = 0; i < count; i++)
{
int startIndex = i;
int index = -1;
while (i < count)
{
char item = queryString[i];
if (item == '=')
{
if (index < 0)
{
index = i;
}
}
else if (item == '&')
{
break;
}
i++;
}
string key = null;
string value = null;
if (index >= 0)
{
key = queryString.Substring(startIndex, index - startIndex);
value = queryString.Substring(index + 1, (i - index) - 1);
}
else
{
key = queryString.Substring(startIndex, i - startIndex);
}
if (isEncoded)
{
result[MyUrlDeCode(key, encoding)] = MyUrlDeCode(value, encoding);
}
else
{
result[key] = value;
}
if ((i == (count - 1)) && (queryString[i] == '&'))
{
result[key] = string.Empty;
}
}
}
return result;
}

/// <summary>
/// 解码URL.
/// </summary>
/// <param name="encoding">null为自动选择编码</param>
/// <param name="str"></param>
/// <returns></returns>
public static string MyUrlDeCode(string str, Encoding encoding)
{
if (encoding == null)
{
Encoding utf8 = Encoding.UTF8;
//首先用utf-8进行解码
string code = HttpUtility.UrlDecode(str.ToUpper(), utf8);
//将已经解码的字符再次进行编码.
string encode = HttpUtility.UrlEncode(code, utf8).ToUpper();
if (str == encode)
encoding = Encoding.UTF8;
else
encoding = Encoding.GetEncoding("gb2312");
}
return HttpUtility.UrlDecode(str, encoding);
}
}

下面是数据操作和日志数据库的相关类,文件名为:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
/*CreateDate:2016-04-22 11:06*/
/*海南崇德创投科技有限公司 QQ:290087362*/
/// <summary>
///sendms_data 的摘要说明
///发送短信数据存储类
/// </summary>
///

public class sendms_data
{

/// <summary>
/// 判断用户当天发送量是否为30条
/// </summary>
public static bool countsms(string UserNumber)
{
string time = System.DateTime.Now.ToString("yyyyMMdd");//日期
string strSQL = string.Format("select count(*) as count from smsrecord where telephone='{0}'and time='{1}'", UserNumber, time);
DataTable smsrecordTable = new DataTable();
SqlDataAdapter da = SQLHelper.GetSqlDataAdapter(SQLHelper.ConnectionStringLocalTransaction, CommandType.Text, strSQL, null);
da.Fill(smsrecordTable);
int count = Convert.ToInt32(smsrecordTable.Rows[0]["count"].ToString().Trim());//当天发送次数
if (count > 30)
{
return true;
}
else
{
return false;
}
}

/// <summary>
/// 短信异常写入数据
/// </summary>
public static void insertdata_yc(string userNumber, string messageContent)
{
string committime = System.DateTime.Now.ToString("yyyyMMddHHmmssfff");
string select_sql = "insert into message_log(UserNumber,Committime,MessageContent) values (@Username,@Committime,@MessageContent)";
SqlParameter[] parmsg = new SqlParameter[] { };
List<SqlParameter> list = new List<SqlParameter>(parmsg);
list.Add(new SqlParameter("@Username", userNumber));
list.Add(new SqlParameter("@Committime", committime));
list.Add(new SqlParameter("@MessageContent", messageContent));
parmsg = list.ToArray();
int cr = SQLHelper.ExecuteNonQuery(SQLHelper.ConnectionStringLocalTransaction, CommandType.Text, select_sql, parmsg);
}
/// <summary>
/// 短信正常发送写入数据
/// </summary>
public static void insertdata_zc(string userNumber, string messageContent)
{
string time = System.DateTime.Now.ToString("yyyyMMdd");//日期
string strSQL_insert = string.Format("insert into smsrecord(telephone,time,MessageContent) values(@Telephone,@Time,@MessageContent)");
SqlParameter[] parmsg = new SqlParameter[] { };
List<SqlParameter> list = new List<SqlParameter>(parmsg);
list.Add(new SqlParameter("@Telephone", userNumber));
list.Add(new SqlParameter("@Time", time));
list.Add(new SqlParameter("@MessageContent", messageContent));
parmsg = list.ToArray();
int intResuit = SQLHelper.ExecuteNonQuery(SQLHelper.ConnectionStringLocalTransaction, CommandType.Text, strSQL_insert, parmsg);
}
/// <summary>
/// 保险信息写入日志表
/// </summary>
public static void insertdata_PICC(string UUID, string MerReqData, string ReturnInfo,string Type)
{
string Committime = System.DateTime.Now.ToString("yyyyMMddHHmmssfff");
string select_sql = "insert into Picc_log(UUID,MerReqData,ReturnInfo,Type,Committime) values (@UUID,@MerReqData,@ReturnInfo,@Type,@Committime)";
SqlParameter[] parmsg = new SqlParameter[] { };
List<SqlParameter> list = new List<SqlParameter>(parmsg);
list.Add(new SqlParameter("@UUID", UUID));
list.Add(new SqlParameter("@MerReqData", MerReqData));
list.Add(new SqlParameter("@ReturnInfo", ReturnInfo));
list.Add(new SqlParameter("@Type", Type));
list.Add(new SqlParameter("@Committime", Committime));
parmsg = list.ToArray();
int cr = SQLHelper.ExecuteNonQuery(SQLHelper.ConnectionStringLocalTransaction, CommandType.Text, select_sql, parmsg);
}
}这里面用到一个公共类,SQLHelper,这个类网上有下载,就不附上了
下面是一线通接口配置类,需要根据一线通那边得到相关信息进行配置

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/*CreateDate:2016-04-22 11:06*/
/*海南崇德创投科技有限公司 QQ:290087362*/
/// <summary>
///短信接口发送类
/// </summary>
public class sendmode
{
private string _SpCode ;
private string _LoginName;
private string _Password;
private string _SerialNumber=System.DateTime.Now.ToString("yyyyMMddHHmmssfff");
private string _urltem = "https://smsapi.ums86.com:9600/sms/Api/Send.do";
public sendmode()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
///企业编号
/// </summary>
public string SpCode
{
get { return _SpCode; }
set { _SpCode = value; }
}
/// <summary>
///企业名称
/// </summary>
public string LoginName
{
get { return _LoginName; }
set { _LoginName = value; }
}
/// <summary>
///用户密码
/// </summary>
public string Password
{
get { return _Password; }
set { _Password = value; }
}
/// <summary>
///流水号
/// </summary>
public string SerialNumber
{
get { return _SerialNumber; }
set { _SerialNumber = value; }
}
/// <summary>
///请求网关
/// </summary>
public string urltem
{
get { return _urltem; }
set { _urltem = value; }
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息