using System.Text;
using Newtonsoft.Json.Linq;
using System.Security.Cryptography;
namespace SmsDemo
{
///
/// 短信网关接口(JSON)请求demo示例(c#)
///
// 使用接口网关地址替换 http://sms.ue35.net/sms
// 短信批量发送接口
// http://sms.ue35.net/sms/api/sendMessageMass
// 短信一对一发送接口
// http://sms.ue35.net/sms/api/sendMessageOne
// 回执状态获取接口
// http://sms.ue35.net/sms/api/getReport
// 上行回复获取接口
// http://sms.ue35.net/sms/api/getUpstream
// 查询余额接口
// http://sms.ue35.net/sms/api/getBalance
// 提交短信模板接口
// http://sms.ue35.net/sms/api/createTemplate
// 查询短信模板接口
// http://sms.ue35.net/sms/api/queryTemplates
// 报备签名接口
// http://sms.ue35.net/sms/api/addSignature
// 查询签名接口
// http://sms.ue35.net/sms/api/querySignature
public class SmsDemo
{
/// 测试
public static void Main(string[] args)
{
string userName = "xxx";// 帐号用户名
string password = "xxx";// 帐号接口密码,跟登录密码不一样
string address = "http://sms.ue35.net/sms";// 接口网关地址 ,例如:http://127.0.0.1:8001/sms
sendMessageMass(userName, password, address);//群发短信
// sendMessageOne(userName, password, address);//一对一短信
// getReport(userName, password, address);//获取回执
// getUpstream(userName, password, address);//获取上行
// getBalance(userName, password, address);//余额
// createTemplate(userName, password, address);//提交短信模板
// queryTemplates(userName, password, address);//查询短信模板
// addSignature(userName, password, address);//报备签名
// querySignature(userName, password, address);//查询签名
}
///
/// 帐号认证信息
///
public static JObject getSign(string userName, string password)
{
// 时间戳,北京时间五分钟内有效
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
long timestamp = (long)ts.TotalMilliseconds;
//sign鉴权 MD5Crypto(userName + timestamp + MD5Crypto(password))
string sign = MD5Crypto(userName + timestamp + MD5Crypto(password));
JObject jsons = new JObject();
jsons.Add("userName", userName);
jsons.Add("timestamp", timestamp);
jsons.Add("sign", sign);
return jsons;
}
///
/// 短信批量发送接口
///
/// 用户名
/// 密码
/// IP和端口
public static void sendMessageMass(string userName, string password, string address)
{
string url = "http://address:port/sms/api/sendMessageMass";
url = url.Replace("http://address:port/sms", address);
//短信内容
string content = "【小小科技】您的验证码是123456";
//发送手机号码,最大数量不得超过 10000 个号码,系统将自动去除重复号码
List phones = new List { "18278810211", "18278810212", "18278810213" };
//每次发送10000个号码
int size = 10000;
int length = phones.Count;
int index = length / size;
int r = length % size;
if (r > 0)
{
index++;
}
List phoneList = new List();
for (int i = 0; i < index; i++)
{
if (r > 0 && i == index - 1)
{
phoneList = phones.GetRange(i * size, r);
}
else
{
phoneList = phones.GetRange(i * size, size);
}
JObject jsons = new JObject();
jsons.Add("content", content);
jsons.Add("phoneList", JArray.FromObject(phoneList));
jsons.Merge(getSign(userName, password));// 帐号认证信息,五分钟内有效,防止过期
postUrl(url, jsons);
}
}
///
/// 短信一对一发送接口
///
/// 用户名
/// 密码
/// IP和端口
public static void sendMessageOne(string userName, string password, string address)
{
string url = "http://address:port/sms/api/sendMessageOne";
url = url.Replace("http://address:port/sms", address);
// 数组形式,每个 JSON 对象包含短信内容和号码数据,最大 1000 个号码。
int size = 1000;
JArray messageList = new JArray();
string content = "【一一科技】您的验证码是{%变量%}";
string[,] list = new string[,] { { "18278810214", "123456" }, { "18278810215", "486512" }, { "18278810216", "889945" } };
for (int i = 0; i < list.GetLength(0); i++)
{
JObject msg = new JObject();
msg.Add("phone", list[i, 0]);
msg.Add("content", content.Replace("{%变量%}", list[i, 1]));
messageList.Add(msg);
if (i > 0 && (i + 1) % size == 0)
{
JObject jsons = new JObject();
jsons.Add("messageList", messageList);
jsons.Merge(getSign(userName, password));// 帐号认证信息,五分钟内有效,防止过期
postUrl(url, jsons);
messageList = new JArray();
}
}
if (messageList.Count > 0)
{
JObject jsons = new JObject();
jsons.Add("messageList", messageList);
jsons.Merge(getSign(userName, password));// 帐号认证信息,五分钟内有效,防止过期
postUrl(url, jsons);
}
}
///
/// 回执状态获取接口
///
/// 用户名
/// 密码
/// IP和端口
public static void getReport(string userName, string password, string address)
{
string url = "http://address:port/sms/api/getReport";
url = url.Replace("http://address:port/sms", address);
JObject jsons = getSign(userName, password);
postUrl(url, jsons);
}
///
/// 上行回复获取接口
///
/// 用户名
/// 密码
/// IP和端口
public static void getUpstream(string userName, string password, string address)
{
string url = "http://address:port/sms/api/getUpstream";
url = url.Replace("http://address:port/sms", address);
JObject jsons = getSign(userName, password);
postUrl(url, jsons);
}
///
/// 查询余额接口
///
/// 用户名
/// 密码
/// IP和端口
public static void getBalance(string userName, string password, string address)
{
string url = "http://address:port/sms/api/getBalance";
url = url.Replace("http://address:port/sms", address);
JObject jsons = getSign(userName, password);
postUrl(url, jsons);
}
///
/// 提交短信模板接口
///
/// 用户名
/// 密码
/// IP和端口
public static void createTemplate(string userName, string password, string address)
{
string url = "http://address:port/sms/api/createTemplate";
url = url.Replace("http://address:port/sms", address);
//变量部分统一用 {%变量%}
string content = "【校园科技】验证码{%变量%}";
JObject jsons = new JObject();
jsons.Add("content", content);
jsons.Merge(getSign(userName, password));// 帐号认证信息,五分钟内有效,防止过期
postUrl(url, jsons);
}
///
/// 查询短信模板接口
///
/// 用户名
/// 密码
/// IP和端口
public static void queryTemplates(string userName, string password, string address)
{
string url = "http://address:port/sms/api/queryTemplates";
url = url.Replace("http://address:port/sms", address);
JObject jsons = getSign(userName, password);
postUrl(url, jsons);
}
///
/// 报备签名接口
///
/// 用户名
/// 密码
/// IP和端口
public static void addSignature(string userName, string password, string address)
{
string url = "http://address:port/sms/api/addSignature";
url = url.Replace("http://address:port/sms", address);
JArray signatureList = new JArray();
signatureList.Add("【小哈科技】");
signatureList.Add("【小小科技】");
JObject jsons = new JObject();
jsons.Add("signatureList", signatureList);
jsons.Merge(getSign(userName, password));// 帐号认证信息,五分钟内有效,防止过期
postUrl(url, jsons);
}
///
/// 查询签名接口
///
/// 用户名
/// 密码
/// IP和端口
public static void querySignature(string userName, string password, string address)
{
string url = "http://address:port/sms/api/querySignature";
url = url.Replace("http://address:port/sms", address);
JObject jsons = getSign(userName, password);
postUrl(url, jsons);
}
// md5加密
public static string MD5Crypto(string key)
{
var sb = new StringBuilder();
var md5 = MD5.Create();
byte[] hashBytes = md5.ComputeHash(Encoding.UTF8.GetBytes(key));
for (int i = 0; i < hashBytes.Length; i++)
sb.Append(hashBytes[i].ToString("x2"));
return sb.ToString();
}
// POST请求方式,JSON格式数据
public static string postUrl(string url, JObject data)
{
var result = "";
try
{
string postData = data.ToString();
var httpClient = new HttpClient();
var timeout = TimeSpan.FromSeconds(10);
var cont = new StringContent(postData, Encoding.UTF8, "application/json");
Console.WriteLine($"{cont.Headers}请求地址: {url}\n请求参数:\n{postData}");
var response = httpClient.PostAsync(url, cont).Result;
result = response.Content.ReadAsStringAsync().Result;
Console.WriteLine($"请求结果: {result}\n\n");
}
catch (Exception ex)
{
Console.WriteLine($"Error occurred: {ex.Message}");
}
return result;
}
}
}