using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using Learun.Util;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace Quanjiang.DigitalScholl.SendSms
{
///
/// 一信通短信平台
///
public class YixintongSms:ISms
{
private static readonly string SpCode = ConfigManager.AppSettings["SpCode"].Value;//企业编号
private static readonly string LoginName = ConfigManager.AppSettings["LoginName"].Value;//用户名
private static readonly string Password = ConfigManager.AppSettings["Password"].Value;//接口密钥
public async Task<(string code, string randomNum, string message, string errorType)> SendSmsToSingle(string phoneNumber, SmsType st, List sendParams = null)
{
(string code, string randomNum, string message, string errorType) result;
var (templatecode, templateparam, randomNum) = GetSmsTemplateBySmsType(st);
try
{
StringBuilder sb=new StringBuilder();
// 按照协议组织 post 请求包体
sb.Append("SpCode="+SpCode);
sb.Append("&LoginName=" + LoginName);
sb.Append("&Password=" + Password);
sb.Append("&MessageContent=" + sendParams.FirstOrDefault());
sb.Append("&UserNumber=" + phoneNumber);
//sb.Append("&templateId=" + templatecode);//测试帐号去掉
sb.Append("&SerialNumber=" + DateTime.Now.ToString("yyyyMMddHHmmssffffff"));
sb.Append("&f=1");
//data.Add("ScheduleTime", "");
//data.Add("signCode", "");
//调接口
string pushresult = Learun.Util.HttpMethods.HttpPost("https://opassapi.infocloud.cc/sms/Api/Send.do", sb.ToString(), Encoding.GetEncoding("utf-8"));
//返回体
pushresult = pushresult.Replace("
", "&");
NameValueCollection query = HttpUtility.ParseQueryString(pushresult, Encoding.GetEncoding("utf-8"));
var objresult = new SmsResult();
objresult.result = Convert.ToInt32(query["result"]);
objresult.description = query["description"];
objresult.taskid = query["taskid"];
objresult.faillist = query["faillist"];
result =(objresult.result.ToString(), phoneNumber, objresult.description, objresult.faillist);
}
catch (Exception e)
{
result = ("", "", e.Message, e.GetType().ToString());
}
return result;
}
public async Task<(string code, string randomNum, string message, string errorType)> SendSmsToMulti(List phoneNumbers, SmsType st, List sendParams = null)
{
(string code, string randomNum, string message, string errorType) result;
var (templatecode, templateparam, randomNum) = GetSmsTemplateBySmsType(st);
try
{
// 按照协议组织 post 请求包体
JObject data = new JObject();
data.Add("SpCode", SpCode);
data.Add("LoginName", LoginName);
data.Add("Password", Password);
data.Add("MessageContent", sendParams.FirstOrDefault());
data.Add("UserNumber", string.Join(",", phoneNumbers.ToArray()));
data.Add("templateId", templatecode);
data.Add("SerialNumber", DateTime.Now.ToString("yyyyMMddHHmmssffffff"));
data.Add("ScheduleTime", "");
data.Add("f", "1");
data.Add("signCode", "");
//调接口
string pushresult = Learun.Util.HttpMethods.HttpPost("https://api.ums86.com:9600/sms/Api/Send.do", JsonConvert.SerializeObject(data), Encoding.GetEncoding("gb2312"));
//返回体
pushresult = pushresult.Replace("
", "&");
NameValueCollection query = HttpUtility.ParseQueryString(pushresult, Encoding.GetEncoding("gb2312"));
var objresult = new SmsResult();
objresult.result = Convert.ToInt32(query["result"]);
objresult.description = query["description"];
objresult.taskid = query["taskid"];
objresult.faillist = query["faillist"];
result = objresult.result == 0 ? ("OK", randomNum, "", "") : (objresult.result.ToString(), "", objresult.description, objresult.faillist);
}
catch (Exception e)
{
result = ("", "", e.Message, e.GetType().ToString());
}
return result;
}
///
/// 根据短信通知类型获取短信模板
///
///
///
private (string templateCode, string templateParam, string randomNum) GetSmsTemplateBySmsType(SmsType st)
{
(string templateCode, string templateParam,string randomNum) result;
var randomNum = CommonHelper.RandNum(6);
switch (st)
{
case SmsType.Register:
result = ("SMS_137485060", JsonConvert.SerializeObject(new { code = randomNum }), randomNum);
break;
case SmsType.LoginBind:
result = ("SMS_137485060", JsonConvert.SerializeObject(new { code = randomNum }), randomNum);
break;
case SmsType.ForgetPassWord:
result = ("SMS_137485060", JsonConvert.SerializeObject(new { code = randomNum }), randomNum);
break;
case SmsType.EADateArrangeNotification:
result = ("1", JsonConvert.SerializeObject(new { code = randomNum }), randomNum);
break;
case SmsType.WorkFlowNotification:
result = ("0", "", "");
break;
default:
throw new ArgumentOutOfRangeException(nameof(st), st, null);
}
return result;
}
///
/// 发送短信返回内容
///
public class SmsResult {
///
/// 错误代码(0:发送短信成功,0-34,)
///
public int result { get; set; }
///
/// 错误描述
///
public string description { get; set; }
///
/// 任务编号
///
public string taskid { get; set; }
///
/// 失败号码列表(可多个)
///
public string faillist { get; set; }
}
}
}