using VOL.Core.Const; using VOL.Core.DBManager; using VOL.Core.Enums; using VOL.Core.Extensions; using VOL.Core.Services; using VOL.Entity.System; using Newtonsoft.Json; using OfficeOpenXml; using OfficeOpenXml.Style; using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; namespace VOL.Core.Utilities { public class BeefSDKRequest { /// /// 阿里云短信发送 /// /// /// public static (bool, string) SendAliSTK(object biz_Content) { (bool, string) result = Send(biz_Content, "/api/AliyunSTK/Send"); if (!result.Item1) return result; Dictionary dictionary = JsonConvert.DeserializeObject>(result.Item2); return ((bool)dictionary["Status"], dictionary["Message"].ToString()); } /// /// /// /// 发送表名对应的提示模块 /// 默认为发送通知消息给管理员审核,6,7为审核通过/未通过 /// 是否指定电话发送消息 /// public static (bool, string) SendAliAuditSTK(string tableName, AuditType audit = AuditType.Notice, string phoneNo = null) { //获取所有审核权限的人发送APP消息通知 string msg = null; List list = new List(); Enum.TryParse(tableName, out AuditType auditType); switch (auditType) { case AuditType.App_Question: msg = "提问"; break; case AuditType.App_Expert: msg = "专家申请认证"; break; case AuditType.App_ReportPrice: msg = "上报肉牛价格"; break; } if (string.IsNullOrEmpty(phoneNo)) { list = DBServerProvider.GetSqlDapper().QueryList($"SELECT PhoneNo FROM [vAuditUser] WHERE TableName='{tableName}'", null).Where(x => x.IsPhoneNo()).ToList(); if (list.Count == 0) { return (false, "没有分配审核帐号"); } } else { list.Add(phoneNo); } return SendAliSTK(new Dictionary() { { "PhoneNo", string.Join(',', list) }, { "PINType",(int)audit }, //模板类型5,审核给管理员通知,6提示审核通过,7,审核失败 { "Msg",msg} }); } /// /// 获取通用上传的配置和临时令牌 /// /// public static (bool, string) GetBaiduBceSTS() { return Send("BeefBce", "/api/BceAuth/GetCommonUploadConfigAndSTS"); } public static (bool, string) UMSendMessage(bool sendAll, PostUMengJson mengJson, Dictionary headersDic = null) { string url; if (!sendAll) { url = "/api/umSend/PushByAlias"; } else { url = "/api/umSend/PushByAllUser"; } return Send(mengJson, url, headersDic); } /// /// /// /// 参数如,发送短信的电话与发送类型new {PhoneNo="128888888",SendType=1} /// action地址"/api/AliyunSTK/Send" public static (bool, string) Send(object biz_Content, string actionPath, Dictionary headersDic = null) { DateTime DateStart = new DateTime(1970, 1, 1, 8, 0, 0); Dictionary DicParameters = new Dictionary(); DicParameters.Add("apiKey", SDKOptions.ApiKey); DicParameters.Add("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//时间戳 string url = SDKOptions.Url + actionPath; DicParameters.Add("biz_content", JsonConvert.SerializeObject(biz_Content)); DicParameters.Add("v", "1.0"); string sign = Signature(DicParameters, SDKOptions.PrivateKey);//生成验签 DicParameters.Add("sign", sign); System.Net.WebRequest wReq = System.Net.WebRequest.Create(SDKOptions.Url + actionPath); wReq.ContentType = "application/json"; wReq.Method = "POST"; string postdata = JsonConvert.SerializeObject(DicParameters); if (headersDic != null) { foreach (KeyValuePair kv in headersDic) { wReq.Headers.Add(kv.Key, kv.Value); } } byte[] bytes = Encoding.UTF8.GetBytes(postdata); string exMsg = null; string reslutMsg = null; try { using (Stream sendStream = wReq.GetRequestStream()) { sendStream.Write(bytes, 0, bytes.Length); } System.Net.WebResponse wResp = wReq.GetResponse(); System.IO.Stream respStream = wResp.GetResponseStream(); using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.GetEncoding("utf-8"))) { reslutMsg = reader.ReadToEnd(); return (true, reslutMsg); } } catch (Exception ex) { exMsg = ex.Message + ex.StackTrace + ex.Source; return (false, ex.Message); } } private static string Signature(Dictionary DicParameters, string private_key) { StringBuilder SortString = new StringBuilder(); SortString.Append(private_key); foreach (var item in DicParameters.OrderBy(c => c.Key)) { SortString.Append(item.Key).Append(item.Value); } SortString.Append(private_key); return MD5Encrypt32(SortString.ToString()).ToUpper(); } private static string MD5Encrypt32(string Par) { StringBuilder EncryptResult = new StringBuilder(); using (MD5 md5 = MD5.Create()) { byte[] ByteArray = md5.ComputeHash(Encoding.UTF8.GetBytes(Par)); for (int i = 0; i < ByteArray.Length; i++) { EncryptResult.Append(ByteArray[i].ToString("X2")); } } return EncryptResult.ToString(); ; } } }