Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 
 
 

162 Zeilen
7.2 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.Specialized;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Web;
  8. using Learun.Util;
  9. using Newtonsoft.Json;
  10. using Newtonsoft.Json.Linq;
  11. namespace Quanjiang.DigitalScholl.SendSms
  12. {
  13. /// <summary>
  14. /// 一信通短信平台
  15. /// </summary>
  16. public class YixintongSms:ISms
  17. {
  18. private static string SpCode = ConfigManager.AppSettings["SpCode"].Value;//企业编号
  19. private static string LoginName = ConfigManager.AppSettings["LoginName"].Value;//用户名
  20. private static string Password = ConfigManager.AppSettings["Password"].Value;//接口密钥
  21. public async Task<(string code, string randomNum, string message, string errorType)> SendSmsToSingle(string phoneNumber, SmsType st, List<string> sendParams = null)
  22. {
  23. (string code, string randomNum, string message, string errorType) result;
  24. var (templatecode, templateparam, randomNum) = GetSmsTemplateBySmsType(st);
  25. try
  26. {
  27. if (SpCode.IsEmpty()) SpCode = "320328";
  28. if (LoginName.IsEmpty()) LoginName = "9c34cbd5462e8034d9b779887c1e8398";
  29. if (Password.IsEmpty()) Password = "29745012d0575978cd8c93d8d6c62f9d96e6b808eb9ac87845721c7c29b39c8f";
  30. StringBuilder sb=new StringBuilder();
  31. // 按照协议组织 post 请求包体
  32. sb.Append("SpCode="+SpCode);
  33. sb.Append("&LoginName=" + LoginName);
  34. sb.Append("&Password=" + Password);
  35. sb.Append("&MessageContent=" + sendParams.FirstOrDefault());
  36. sb.Append("&UserNumber=" + phoneNumber);
  37. //sb.Append("&templateId=" + templatecode);//测试帐号去掉
  38. sb.Append("&SerialNumber=" + DateTime.Now.ToString("yyyyMMddHHmmssffffff"));
  39. sb.Append("&f=1");
  40. //data.Add("ScheduleTime", "");
  41. //data.Add("signCode", "");
  42. //调接口
  43. Learun.Util.Log.LogHelper.Info(sb.ToString());
  44. string pushresult = Learun.Util.HttpMethods.HttpPost("https://opassapi.infocloud.cc/sms/Api/Send.do", sb.ToString(), Encoding.GetEncoding("utf-8"));
  45. //返回体
  46. pushresult = pushresult.Replace("<br>", "&");
  47. NameValueCollection query = HttpUtility.ParseQueryString(pushresult, Encoding.GetEncoding("utf-8"));
  48. var objresult = new SmsResult();
  49. objresult.result = Convert.ToInt32(query["result"]);
  50. objresult.description = query["description"];
  51. objresult.taskid = query["taskid"];
  52. objresult.faillist = query["faillist"];
  53. result =(objresult.result.ToString(), phoneNumber, objresult.description, objresult.faillist);
  54. }
  55. catch (Exception e)
  56. {
  57. result = ("", "", e.Message, e.GetType().ToString());
  58. }
  59. return result;
  60. }
  61. public async Task<(string code, string randomNum, string message, string errorType)> SendSmsToMulti(List<string> phoneNumbers, SmsType st, List<string> sendParams = null)
  62. {
  63. (string code, string randomNum, string message, string errorType) result;
  64. var (templatecode, templateparam, randomNum) = GetSmsTemplateBySmsType(st);
  65. try
  66. {
  67. // 按照协议组织 post 请求包体
  68. JObject data = new JObject();
  69. data.Add("SpCode", SpCode);
  70. data.Add("LoginName", LoginName);
  71. data.Add("Password", Password);
  72. data.Add("MessageContent", sendParams.FirstOrDefault());
  73. data.Add("UserNumber", string.Join(",", phoneNumbers.ToArray()));
  74. data.Add("templateId", templatecode);
  75. data.Add("SerialNumber", DateTime.Now.ToString("yyyyMMddHHmmssffffff"));
  76. data.Add("ScheduleTime", "");
  77. data.Add("f", "1");
  78. data.Add("signCode", "");
  79. //调接口
  80. string pushresult = Learun.Util.HttpMethods.HttpPost("https://api.ums86.com:9600/sms/Api/Send.do", JsonConvert.SerializeObject(data), Encoding.GetEncoding("gb2312"));
  81. //返回体
  82. pushresult = pushresult.Replace("<br>", "&");
  83. NameValueCollection query = HttpUtility.ParseQueryString(pushresult, Encoding.GetEncoding("gb2312"));
  84. var objresult = new SmsResult();
  85. objresult.result = Convert.ToInt32(query["result"]);
  86. objresult.description = query["description"];
  87. objresult.taskid = query["taskid"];
  88. objresult.faillist = query["faillist"];
  89. result = objresult.result == 0 ? ("OK", randomNum, "", "") : (objresult.result.ToString(), "", objresult.description, objresult.faillist);
  90. }
  91. catch (Exception e)
  92. {
  93. result = ("", "", e.Message, e.GetType().ToString());
  94. }
  95. return result;
  96. }
  97. /// <summary>
  98. /// 根据短信通知类型获取短信模板
  99. /// </summary>
  100. /// <param name="st"></param>
  101. /// <returns></returns>
  102. private (string templateCode, string templateParam, string randomNum) GetSmsTemplateBySmsType(SmsType st)
  103. {
  104. (string templateCode, string templateParam,string randomNum) result;
  105. var randomNum = CommonHelper.RandNum(6);
  106. switch (st)
  107. {
  108. case SmsType.Register:
  109. result = ("SMS_137485060", JsonConvert.SerializeObject(new { code = randomNum }), randomNum);
  110. break;
  111. case SmsType.LoginBind:
  112. result = ("SMS_137485060", JsonConvert.SerializeObject(new { code = randomNum }), randomNum);
  113. break;
  114. case SmsType.ForgetPassWord:
  115. result = ("SMS_137485060", JsonConvert.SerializeObject(new { code = randomNum }), randomNum);
  116. break;
  117. case SmsType.EADateArrangeNotification:
  118. result = ("1", JsonConvert.SerializeObject(new { code = randomNum }), randomNum);
  119. break;
  120. case SmsType.WorkFlowNotification:
  121. result = ("0", "", "");
  122. break;
  123. default:
  124. throw new ArgumentOutOfRangeException(nameof(st), st, null);
  125. }
  126. return result;
  127. }
  128. /// <summary>
  129. /// 发送短信返回内容
  130. /// </summary>
  131. public class SmsResult {
  132. /// <summary>
  133. /// 错误代码(0:发送短信成功,0-34,)
  134. /// </summary>
  135. public int result { get; set; }
  136. /// <summary>
  137. /// 错误描述
  138. /// </summary>
  139. public string description { get; set; }
  140. /// <summary>
  141. /// 任务编号
  142. /// </summary>
  143. public string taskid { get; set; }
  144. /// <summary>
  145. /// 失败号码列表(可多个)
  146. /// </summary>
  147. public string faillist { get; set; }
  148. }
  149. }
  150. }