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; } } } }