using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Threading; using Aliyun.Acs.Core; using Aliyun.Acs.Core.Exceptions; using Aliyun.Acs.Core.Profile; using Aliyun.Acs.Dysmsapi.Model.V20170525; namespace Edu.ThirdCore.Message { /// /// 消息发送中心 /// public class MessageCore { private static bool IsFinish = true; public static void Init() { while (QueueHelper.Queue.Count == 0 || !IsFinish) { Thread.Sleep(1000); }; IsFinish = false; string content = QueueHelper.Queue.Dequeue() as string; Run(content); Init(); } public static void Run(string content) { try { JObject obj = JObject.Parse(content); switch (obj["cmd"].ToString().ToLower()) { case "sms": SendSMS(obj); break; default: break; } } catch (Exception ex) { Console.WriteLine(ex.Message); } IsFinish = true; } private static void SendSMS(JObject obj) { SendSmsRequest request = new SendSmsRequest(); try { String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改) String domain = obj["Domain"].ToString(); //短信API产品域名(接口地址固定,无需修改) String accessKeyId = obj["AccessKeyId"].ToString(); String accessKeySecret = obj["AccessKeySecret"].ToString(); IClientProfile profile = DefaultProfile.GetProfile(obj["RegionId"].ToString(), accessKeyId, accessKeySecret); DefaultProfile.AddEndpoint(obj["RegionId"].ToString(), obj["RegionId"].ToString(), product, domain); IAcsClient acsClient = new DefaultAcsClient(profile); //必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式 request.PhoneNumbers = obj["phoneNumber"].ToString(); request.SignName = obj["SignName"].ToString(); //aliSms["signName"].ToString(); //必填:短信模板-可在短信控制台中找到 request.TemplateCode = obj["templateCode"].ToString(); //可选:模板中的变量替换JSON串,如模板内容为"您的验证码为${code}"时,此处的值为 request.TemplateParam = obj["templateParam"].ToString(); //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者 request.OutId = obj["OutId"].ToString(); //请求失败这里会抛ClientException异常 SendSmsResponse sendSmsResponse = acsClient.GetAcsResponse(request); if (!sendSmsResponse.Code.Equals("OK")) { var data = new { phoneNumber = obj["phoneNumber"].ToString(), templateParam = obj["templateParam"].ToString(), code = sendSmsResponse.Code, message = sendSmsResponse.Message }; Common.Plugin.LogHelper.WriteInfo( string.Format("SendSMS0_{0}", Common.Plugin.JsonHelper.Serialize(data))); } var datatst = new { phoneNumber = obj["phoneNumber"].ToString(), templateParam = obj["templateParam"].ToString(), code = sendSmsResponse.Code, message = sendSmsResponse.Message }; } catch (Aliyun.Acs.Core.Exceptions.ServerException ex) { var data = new { phoneNumber = obj["phoneNumber"].ToString(), templateParam = obj["templateParam"].ToString(), code = "NO", message = ex.ToString() }; Common.Plugin.LogHelper.Write(ex, string.Format("SendSMS1_{0}", Common.Plugin.JsonHelper.Serialize(data))); } catch (ClientException ex) { var data = new { phoneNumber = obj["phoneNumber"].ToString(), templateParam = obj["templateParam"].ToString(), code = "NO", message = ex.ToString() }; Common.Plugin.LogHelper.Write(ex, string.Format("SendSMS2_{0}",Common.Plugin.JsonHelper.Serialize(data))); } } /// /// 获取短信发送状态 /// /// /// /// /// public static string SendSMSStatus(string phoneNumber, string SendDate, string BizId, string Domain, string AccessKeyId, string AccessKeySecret, string RegionId) { String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改) String domain = Domain;// "dysmsapi.aliyuncs.com";//短信API产品域名(接口地址固定,无需修改) String accessKeyId = AccessKeyId;// aliSms["accessKeyId"].ToString(); String accessKeySecret = AccessKeySecret; //aliSms["accessKeySecret"].ToString(); IClientProfile profile = DefaultProfile.GetProfile(RegionId, accessKeyId, accessKeySecret); DefaultProfile.AddEndpoint(RegionId, RegionId, product, domain); IAcsClient acsClient = new DefaultAcsClient(profile); //拼接参数 返回url string url = $@"https://{domain}/?AccessKeyId={accessKeyId}&Action=QuerySendDetails&CurrentPage=1&Format=JSON&PageSize=12&PhoneNumber={phoneNumber}&RegionId=cn-hangzhou&SecureTransport=true&SendDate={SendDate}&BizId={BizId}&SignatureMethod=HMAC-SHA1&SignatureNonce=46edc0b6cc74e437aa0ba1703c71a99b&SignatureVersion=1.0&SourceIp=171.88.98.6&Timestamp=2019-09-25T02%3A12%3A35Z&Version=2017-05-25&Signature=Uvqz3E13092wPxNYUt3ytDojV50%3D"; return url; } /// /// 获取短信发送状态 /// /// /// /// /// public static QuerySendDetailsResponse QuerySendDetails(string phoneNumber, string SendDate, string BizId, string Domain, string AccessKeyId, string AccessKeySecret, string RegionId) { //短信API产品名称(短信产品名固定,无需修改) String product = "Dysmsapi"; IClientProfile profile = DefaultProfile.GetProfile(RegionId, AccessKeyId, AccessKeySecret); DefaultProfile.AddEndpoint(RegionId, RegionId, product, Domain); //初始化acsClient,暂不支持region化 IAcsClient acsClient = new DefaultAcsClient(profile); // 组装请求对象 QuerySendDetailsRequest request = new QuerySendDetailsRequest { PhoneNumber = phoneNumber, BizId = BizId, SendDate = SendDate, PageSize = 10, CurrentPage = 1 }; QuerySendDetailsResponse querySendDetailsResponse; try { // 请求失败这里会抛ClientException异常 querySendDetailsResponse = acsClient.GetAcsResponse(request); } catch (ServerException e) { querySendDetailsResponse = new QuerySendDetailsResponse(); Common.Plugin.LogHelper.Write(e, "QuerySendDetails_1"); } catch (ClientException e) { Common.Plugin.LogHelper.Write(e, "QuerySendDetails_2"); querySendDetailsResponse = new QuerySendDetailsResponse(); } return querySendDetailsResponse; } /// /// 获取短信状态 /// /// /// /// /// public static string SendSMSStatus2(string phoneNumber, string SendDate, string BizId, string Domain, string AccessKeyId, string AccessKeySecret, string RegionId) { //JObject aliSms = Config.AliSms; String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改) String domain = Domain;//"dysmsapi.aliyuncs.com";//短信API产品域名(接口地址固定,无需修改) String accessKeyId = AccessKeyId;//aliSms["accessKeyId"].ToString(); String accessKeySecret = AccessKeySecret; //aliSms["accessKeySecret"].ToString(); IClientProfile profile = DefaultProfile.GetProfile(RegionId, accessKeyId, accessKeySecret); DefaultProfile.AddEndpoint(RegionId, RegionId, product, domain); IAcsClient acsClient = new DefaultAcsClient(profile); QuerySendDetailsRequest request = new QuerySendDetailsRequest { CurrentPage = 1, PageSize = 12, PhoneNumber = phoneNumber, SendDate = SendDate, BizId = BizId }; //请求失败这里会抛ClientException异常 var robj = acsClient.DoAction(request); if (robj.Status == 200) { System.IO.Stream stream = new System.IO.MemoryStream(robj.Content); var reader = new System.IO.StreamReader(stream, System.Text.Encoding.UTF8); string rrrr = reader.ReadToEnd(); return rrrr; } return ""; } } }