You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

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