/// <summary> /// 设置消息为无效推送号。 /// </summary> /// <param name="apiBaseUrl"></param> /// <param name="mq"></param> /// <returns></returns> private static CommonResponseModel SetPreviewMessageInvalidPushNo( string apiBaseUrl, Proc_GetRobotServerMessageQueueForWXRobot_Result mq ) { var urlForUpdateMessageQueueToInvalidStatus = string.Format("{0}/api/zcooApi/UpdateMessageQueueToInvalidStatus", apiBaseUrl); string dataForUpdateMessageQueueToInvalidStatus = Common.HTTP.PostDataHandler.GetPostData ( new List <PostDataRequestModel>() { new PostDataRequestModel() { ParameterName = "MessageQueueID", ParameterValue = mq.ID, ConvertToHtml = false }, new PostDataRequestModel() { ParameterName = "InvalidReason", ParameterValue = string.Format("{0}此无效的微信号是:{1}", Common.Const.Zcoo.ZcooConst.INVALID_PUSH_NO_WHEN_SEND_PREVIEW_MESSAGE, mq.PushNo), ConvertToHtml = false } } ); var updateMessageQueueToInvalidStatusResultString = _httper.Post(urlForUpdateMessageQueueToInvalidStatus, dataForUpdateMessageQueueToInvalidStatus); var updateMessageQueueToInvalidStatusResponseModel = Newtonsoft.Json.JsonConvert.DeserializeObject <CommonResponseModel>(updateMessageQueueToInvalidStatusResultString); return(updateMessageQueueToInvalidStatusResponseModel); }
/// <summary> /// 设置消息为无效推送号。 /// </summary> /// <param name="apiBaseUrl"></param> /// <param name="mq"></param> /// <returns></returns> private static CommonResponseModel SetTemplateMessageInvalidPushNo( string apiBaseUrl, Proc_GetRobotServerMessageQueueForWXRobot_Result mq, SendWXTemplateMessageResponseModel sendWXTemplateMessageResponseModel ) { var urlForUpdateMessageQueueToInvalidStatus = string.Format("{0}/api/zcooApi/UpdateMessageQueueToInvalidStatus", apiBaseUrl); string dataForUpdateMessageQueueToInvalidStatus = Common.HTTP.PostDataHandler.GetPostData ( new List <PostDataRequestModel>() { new PostDataRequestModel() { ParameterName = "MessageQueueID", ParameterValue = mq.ID, ConvertToHtml = false }, new PostDataRequestModel() { ParameterName = "InvalidReason", ParameterValue = Newtonsoft.Json.JsonConvert.SerializeObject(sendWXTemplateMessageResponseModel), ConvertToHtml = false } } ); var updateMessageQueueToInvalidStatusResultString = _httper.Post(urlForUpdateMessageQueueToInvalidStatus, dataForUpdateMessageQueueToInvalidStatus); var updateMessageQueueToInvalidStatusResponseModel = Newtonsoft.Json.JsonConvert.DeserializeObject <CommonResponseModel>(updateMessageQueueToInvalidStatusResultString); return(updateMessageQueueToInvalidStatusResponseModel); }
/// <summary> /// 刷新微信公众账号Block模型。刷新意味关重新把所有公众账号中的IsBlocked,修改为false。 /// 以便WXRobot(微信机器人),可以重新尝试这些公众账号。 /// 刷新时,会考虑消息队列新加入的,同时也加入到微信公众账号Block模型中。 /// </summary> /// <param name="wxPublicAccountBlockStatusModel"></param> /// <param name="messageQueues"></param> /// <returns></returns> private static IEnumerable <WXPublicAccountBlockStatusModel> RefreshWXPublicAccountBlockStatusModel(IEnumerable <WXPublicAccountBlockStatusModel> wxPublicAccountBlockStatusModel, IEnumerable <Proc_GetRobotServerMessageQueueForWXRobot_Result> messageQueues) { var wxPublicAccountBlockStatusModelList = wxPublicAccountBlockStatusModel.ToList(); var messageQueuesDistinctList = Common.Lists.ListHandler.DistinctBy(messageQueues, m => m.PublicAccountID).ToList(); WXPublicAccountBlockStatusModel thePublicAccount = null; Proc_GetRobotServerMessageQueueForWXRobot_Result[] messageQueuesArray = new Proc_GetRobotServerMessageQueueForWXRobot_Result[messageQueuesDistinctList.Count]; messageQueuesDistinctList.CopyTo(messageQueuesArray); //不存在的公众账号,加入到模型中 foreach (var mqa in messageQueuesArray) { thePublicAccount = wxPublicAccountBlockStatusModel.FirstOrDefault(p => p.PublicAccountID == mqa.PublicAccountID); if (thePublicAccount == null) { wxPublicAccountBlockStatusModelList.Add(new WXPublicAccountBlockStatusModel() { PublicAccountID = (int)mqa.PublicAccountID, BlockedDateTime = DateTime.MinValue, IsBlocked = false }); } } wxPublicAccountBlockStatusModel = wxPublicAccountBlockStatusModel.Select(c => { c.IsBlocked = false; return(c); }).AsEnumerable(); return(wxPublicAccountBlockStatusModel); }
/// <summary> /// 判断当前消息队列,是否应该尝试发送模板消息。 /// </summary> /// <param name="messageQueue"></param> /// <returns></returns> private static bool IsShouldTrySendMessageQueue(Proc_GetRobotServerMessageQueueForWXRobot_Result messageQueue) { var shouldTry = false; var currentDateTime = Common.Time.NowHandler.GetNowByTimeZone(); if (messageQueue.NextSendDateTime < currentDateTime && messageQueue.ShouldDelete == false) //如果当前时间大于下次尝试时间 { shouldTry = true; } return(shouldTry); }
/// <summary> /// 判断当前消息队列,是否应该尝试发送预览的。 /// </summary> /// <param name="messageQueue"></param> /// <returns></returns> private static bool IsShouldTryMessageQueue(Proc_GetRobotServerMessageQueueForWXRobot_Result messageQueue, int checkWXIntervalWhenBlock) { var shouldTry = false; var currentDateTime = Common.Time.NowHandler.GetNowByTimeZone(); if (messageQueue.BlockedDateTime.AddSeconds(checkWXIntervalWhenBlock) < currentDateTime && messageQueue.ShouldDelete == false) //如果当前时间大于下次尝试时间 { shouldTry = true; } return(shouldTry); }
/// <summary> /// 设置模板消息发送成功 /// </summary> /// <param name="apiBaseUrl"></param> /// <param name="serverID"></param> /// <param name="mq"></param> /// <param name="sendWXTemplateMessageResponseModel"></param> /// <param name="wxPublicAccountBlockStatuses"></param> /// <returns></returns> private static CommonResponseModel SetTemplateMessageSuccess(string apiBaseUrl, int serverID, Proc_GetRobotServerMessageQueueForWXRobot_Result mq, SendWXTemplateMessageResponseModel sendWXTemplateMessageResponseModel ) { //更新消息队列状态 var dataForUpdateMessageQueueStatusToSent = string.Format("serverID={0}&messageQueueIDs={1}&AppMsgIDs={2}", serverID, mq.ID, sendWXTemplateMessageResponseModel.MsgID); var updateMessageQueueStatusToSentString = _httper.Post(string.Format("{0}/api/zcooApi/UpdateMessageQueueStatusToSent", apiBaseUrl), dataForUpdateMessageQueueStatusToSent); var updateMessageQueueStatusToSentResponseModel = Newtonsoft.Json.JsonConvert.DeserializeObject <CommonResponseModel>(updateMessageQueueStatusToSentString); mq.ShouldDelete = true; return(updateMessageQueueStatusToSentResponseModel); }
/// <summary> /// 设置短信消息发送成功 /// </summary> /// <param name="apiBaseUrl"></param> /// <param name="serverID"></param> /// <param name="mq"></param> /// <returns></returns> private static CommonResponseModel SetShortMessageSuccess(string apiBaseUrl, int serverID, Proc_GetRobotServerMessageQueueForWXRobot_Result mq ) { Random rand = new Random(); int appMsgID = Convert.ToInt32(("5" + rand.Next(10000000, 99999999).ToString())); //更新消息队列状态 var dataForUpdateMessageQueueStatusToSent = string.Format("serverID={0}&messageQueueIDs={1}&AppMsgIDs={2}", serverID, mq.ID, appMsgID); var updateMessageQueueStatusToSentString = _httper.Post(string.Format("{0}/api/zcooApi/UpdateMessageQueueStatusToSent", apiBaseUrl), dataForUpdateMessageQueueStatusToSent); var updateMessageQueueStatusToSentResponseModel = Newtonsoft.Json.JsonConvert.DeserializeObject <CommonResponseModel>(updateMessageQueueStatusToSentString); mq.ShouldDelete = true; return(updateMessageQueueStatusToSentResponseModel); }
private static IEnumerable <WXPublicAccountBlockStatusModel> SetPreviewMessageSuccess(string apiBaseUrl, int serverID, Proc_GetRobotServerMessageQueueForWXRobot_Result mq, SendWXPreviewMessageResponseModel sendWXPreviewMessageResponseModel, IEnumerable <WXPublicAccountBlockStatusModel> wxPublicAccountBlockStatuses) { #region 状态此消息队列状态为“已发送”【注:此接口,已经自动把公众账号修改为Unblocked状态,所以不用专门更新Unblock状态,以减少跟数据库的请求次数】 var dataForUpdateMessageQueueStatusToSent = string.Format("serverID={0}&messageQueueIDs={1}&AppMsgIDs={2}", serverID, mq.ID, sendWXPreviewMessageResponseModel.AppMsgID); var updateMessageQueueStatusToSentString = _httper.Post(string.Format("{0}/api/zcooApi/UpdateMessageQueueStatusToSent", apiBaseUrl), dataForUpdateMessageQueueStatusToSent); //得到返回Model var updateMessageQueueStatusToSentResponseModel = Newtonsoft.Json.JsonConvert.DeserializeObject <CommonResponseModel>(updateMessageQueueStatusToSentString); mq.ShouldDelete = true; #endregion #region 成功时,把公众账号改回Unblocked状态 if (updateMessageQueueStatusToSentResponseModel != null && string.Compare(updateMessageQueueStatusToSentResponseModel.ReturnMessage, "OK", StringComparison.InvariantCultureIgnoreCase) == 0) { wxPublicAccountBlockStatuses = UpdateWXPublicAccountBlockStatusModelToUnblockStatus(wxPublicAccountBlockStatuses, (int)mq.PublicAccountID); } #endregion return(wxPublicAccountBlockStatuses); }
private static SendWXPreviewMessageResponseModel SendPreviewMessage( string apiBaseUrl, string urlForSendPreviewMessage, string dataForSendPreviewMessage, Proc_GetMessageInfoByMessageIDs_Result message, Proc_GetRobotServerMessageQueueForWXRobot_Result mq, int showCoverInContent, int showSourceUrlInContent, int relogin) { var sendWXPreviewMessageResponseModel = new SendWXPreviewMessageResponseModel() { Ret = -1000 }; //默认让错误码为 -1000,这样当返回为0时,就是成功的 urlForSendPreviewMessage = string.Format("{0}/api/wx/SendWXPreviewMessage", apiBaseUrl); //fuxily string sourceUrl = null; if (!string.IsNullOrEmpty(mq.MoreParams) && !string.IsNullOrEmpty(message.SourceUrl)) { if (message.MessageFunctionID != 12) { string secret = WebConfigurationManager.AppSettings["AESEncryptSecret"].ToString(); string newSD = ""; try { newSD = Common.Encryptor.AESEncryptor.AESEncrypt(mq.ID.ToString(), secret); newSD = System.Web.HttpUtility.UrlEncode(newSD); } catch { } sourceUrl = message.SourceUrl + "?messageQueueID=" + newSD; } else { sourceUrl = message.SourceUrl + ",messageQueueID@" + mq.ID + ",ToUserID@" + mq.ToUserID + "," + mq.MoreParams; } } else { sourceUrl = message.SourceUrl; } dataForSendPreviewMessage = Common.HTTP.PostDataHandler.GetPostData ( new List <PostDataRequestModel>() { new PostDataRequestModel() { ParameterName = "schoolPublicAccountID", ParameterValue = message.SchoolPublicAccountID }, new PostDataRequestModel() { ParameterName = "messageFunctionID", ParameterValue = message.MessageFunctionID }, new PostDataRequestModel() { ParameterName = "toWxNo", ParameterValue = mq.PushNo }, new PostDataRequestModel() { ParameterName = "title", ParameterValue = message.Title }, new PostDataRequestModel() { ParameterName = "digest", ParameterValue = message.Digest }, new PostDataRequestModel() { ParameterName = "content", ParameterValue = message.Content, ConvertToHtml = true }, new PostDataRequestModel() { ParameterName = "sourceUrl", ParameterValue = sourceUrl }, new PostDataRequestModel() { ParameterName = "author", ParameterValue = "志酷通" }, new PostDataRequestModel() { ParameterName = "showCoverPic", ParameterValue = showCoverInContent }, new PostDataRequestModel() { ParameterName = "showSourceUrl", ParameterValue = showSourceUrlInContent }, new PostDataRequestModel() { ParameterName = "relogin", ParameterValue = relogin }, new PostDataRequestModel() { ParameterName = "greeting", ParameterValue = mq.Greeting }, new PostDataRequestModel() { ParameterName = "signature", ParameterValue = mq.NickName }, new PostDataRequestModel() { ParameterName = "toUserID", ParameterValue = mq.ToUserID }, new PostDataRequestModel() { ParameterName = "fromUserID", ParameterValue = mq.FromUserID } } ); var sendPreviewMessageResultString = _httper.Post(urlForSendPreviewMessage, dataForSendPreviewMessage); sendWXPreviewMessageResponseModel = Newtonsoft.Json.JsonConvert.DeserializeObject <SendWXPreviewMessageResponseModel>(sendPreviewMessageResultString); return(sendWXPreviewMessageResponseModel); }
/// <summary> /// 发送模板消息 /// </summary> /// <param name="apiBaseUrl"></param> /// <param name="message"></param> /// <param name="mq"></param> /// <returns></returns> private static SendWXTemplateMessageResponseModel SendTemplateMessage( string apiBaseUrl, Proc_GetMessageInfoByMessageIDs_Result message, Proc_GetRobotServerMessageQueueForWXRobot_Result mq ) { SendWXTemplateMessageResponseModel sendWXTemplateMessageResponseModel = null; try { //模板消息post路径 string urlForSendTemplateMessage = _httper.Get(string.Format("{0}/api/wx/GetTemplateMessageBaseUrl?publicAccountID={1}", apiBaseUrl, mq.PublicAccountID)); //fuxily urlForSendTemplateMessage = urlForSendTemplateMessage.Replace("\"", ""); string TemplateMessageBaseUrl = string.Format("{0}/api/wx/SendWXTemplateMessage", apiBaseUrl); //fuxily int toUserID = mq.ToUserID ?? 0; if (mq.MoreParams != null) { var morePara = Common.GetUrlParas.GetUrlParasHandler.GetUrlParas(mq.MoreParams); if (morePara != null) { foreach (var item in morePara) { if (item.Key == "copyToUserID") { toUserID = Common.DataTypes.IntHandler.ToInt32(item.Value); } } } } string TemplateMessageData = Common.HTTP.PostDataHandler.GetPostData ( new List <PostDataRequestModel>() { new PostDataRequestModel() { ParameterName = "schoolPublicAccountID", ParameterValue = message.SchoolPublicAccountID }, new PostDataRequestModel() { ParameterName = "messageFunctionID", ParameterValue = message.MessageFunctionID }, new PostDataRequestModel() { ParameterName = "messageID", ParameterValue = message.ID }, new PostDataRequestModel() { ParameterName = "messageQueueID", ParameterValue = mq.ID }, new PostDataRequestModel() { ParameterName = "toUserID", ParameterValue = toUserID }, new PostDataRequestModel() { ParameterName = "fromUserID", ParameterValue = mq.FromUserID } } ); //模板消息json数据 string xmlData = _httper.Post(TemplateMessageBaseUrl, TemplateMessageData); if (!string.IsNullOrEmpty(xmlData)) { //移除xmlData首尾的引号 xmlData = xmlData.Remove(0, 1); xmlData = xmlData.Remove(xmlData.Length - 1, 1); //加载XML XmlDocument doc = new XmlDocument(); doc.LoadXml(xmlData); // XmlNode node = doc.SelectSingleNode("xml/data/keyword1"); XmlNode contentNode = null; switch (message.MessageFunctionID) { case 1: case 2: case 3: case 4: case 17: case 3000: contentNode = doc.SelectSingleNode("xml/data/keyword3/value"); break; default: contentNode = doc.SelectSingleNode("xml/data/keyword1/value"); break; } string content = contentNode.InnerText; //content = Regex.Replace(content, @"\p{Cs}", "");//把手机中Emoji表情字符去掉。解决出现Emoji表情字符时,LoadXml加载失败,导致机器人发送总是返回Null问题(一直发送失败) string replaceContent = content.Replace("\\\"", "”");//把发送信息中的"替换成中文的” content = string.IsNullOrEmpty(content) ? "内容为空" : content; if (replaceContent.Length > 140) //当消息内容超过140字时,截取前140个字,并显示【更多】 { replaceContent = replaceContent.Substring(0, 140); replaceContent += "【更多】"; } string replaceXml = xmlData.Replace(content, replaceContent); doc.LoadXml(replaceXml); var jsonData = XmlToJson.XmlToJSON(doc); var dataForSendTemplateMessage = jsonData.Remove(jsonData.LastIndexOf("}")).Remove(0, 8); //dataForSendTemplateMessage = ClearImageHtml(dataForSendTemplateMessage); //清除模版消息中的图片html标签-Haley var sendTemplateMessageResultString = ""; lock (sendMessageLock) { var model = messageQueueIDs.Where( p => p.MessageQueueID == mq.ID && (Common.Time.NowHandler.GetNowByTimeZone() - p.Created).TotalSeconds < 60 ).FirstOrDefault(); //去重,1分钟之内,没有发送过的MessageQueueID才去发送 if (model == null) { sendTemplateMessageResultString = _httper.Post(urlForSendTemplateMessage, dataForSendTemplateMessage); sendWXTemplateMessageResponseModel = Newtonsoft.Json.JsonConvert.DeserializeObject <SendWXTemplateMessageResponseModel>(sendTemplateMessageResultString); if (sendWXTemplateMessageResponseModel.ErrCode == 0) { messageQueueIDs.Add(new Models.MessageQueues.MessageQueueIDModel() { MessageQueueID = mq.ID ?? 0, Created = Common.Time.NowHandler.GetNowByTimeZone() }); } } } //删除1分钟后的消息队列ID messageQueueIDs.RemoveAll( p => (Common.Time.NowHandler.GetNowByTimeZone() - p.Created).TotalSeconds > 70 ); if (!string.IsNullOrEmpty(sendTemplateMessageResultString)) { //将json转换成对象 if (sendWXTemplateMessageResponseModel.ErrCode == 42001 || //当AccessToken无效时 sendWXTemplateMessageResponseModel.ErrCode == 40001) //当AccessToken过期时(有可能刚好过期)) { string[] urls = urlForSendTemplateMessage.Split('='); string invalidToken = urls[1]; string urlForRefreshWXAccessToken = string.Format("{0}/api/ZcooApi/RefreshWXAccessToken?publicAccountID={1}&invalidToken={2}", apiBaseUrl, mq.PublicAccountID, invalidToken); _httper.Get(urlForRefreshWXAccessToken); } } } return(sendWXTemplateMessageResponseModel); } catch (Exception e) { if (e.Message.Contains("字符串的长度不能为零")) { templateMessageQueues.RemoveAll(c => c.MessageID == mq.MessageID); messages.RemoveAll(c => c.ID == mq.MessageID); string failUrl = string.Format("{0}/api/zcooapi/UpdateMessageStatus?messageID={1}&messageStatusID={2}&remark={3}&isIncludeSender={4}", apiBaseUrl, mq.MessageID, 3, e.Message, true); var result = _httper.Get(failUrl); if (result != "OK") { _httper.Get(failUrl); } sendWXTemplateMessageResponseModel = new SendWXTemplateMessageResponseModel(); sendWXTemplateMessageResponseModel.ErrCode = -1000; return(sendWXTemplateMessageResponseModel); } return(sendWXTemplateMessageResponseModel); } }
/// <summary> /// 同步公众账号Block模型。 /// </summary> /// <param name="wxPublicAccountBlockStatusModel"></param> /// <param name="messageQueues"></param> /// <param name="refresh">是否重新刷新WXPublicAccountBlockStatusModel。如果是:把WXPublicAccountBlockStatusModel下所有的IsBlocked改回为false。</param> /// <param name="autoRefreshAfter15">超过15秒的,是否自动把对应的公众账号修改为IsBlocked = false。</param> /// <returns></returns> private static IEnumerable <WXPublicAccountBlockStatusModel> SyncWXPublicAccountBlockStatusModel(IEnumerable <WXPublicAccountBlockStatusModel> wxPublicAccountBlockStatusModel, IEnumerable <Proc_GetRobotServerMessageQueueForWXRobot_Result> messageQueues, bool refresh, bool autoRefreshAfter15, double checkWXIntervalWhenBlock) { var wxPublicAccountBlockStatusModelList = wxPublicAccountBlockStatusModel.ToList(); var messageQueuesDistinctList = Common.Lists.ListHandler.DistinctBy(messageQueues, m => m.PublicAccountID).ToList(); #region 如果公众Block模型中,在消息队列不存在,要删除 Proc_GetRobotServerMessageQueueForWXRobot_Result theMessageQueue = null; WXPublicAccountBlockStatusModel[] wxPublicAccountBlockStatusModelArray = new WXPublicAccountBlockStatusModel[wxPublicAccountBlockStatusModelList.Count]; wxPublicAccountBlockStatusModelList.CopyTo(wxPublicAccountBlockStatusModelArray); foreach (var pba in wxPublicAccountBlockStatusModelArray) { theMessageQueue = messageQueuesDistinctList.FirstOrDefault(mqd => mqd.PublicAccountID == pba.PublicAccountID); if (theMessageQueue == null) { wxPublicAccountBlockStatusModelList.Remove(pba); } } #endregion #region 确保公众账号中,加入了消息队列中,新进的公众账号,也要记录 WXPublicAccountBlockStatusModel thePublicAccount = null; Proc_GetRobotServerMessageQueueForWXRobot_Result[] messageQueuesArray = new Proc_GetRobotServerMessageQueueForWXRobot_Result[messageQueuesDistinctList.Count]; messageQueuesDistinctList.CopyTo(messageQueuesArray); foreach (var mqd in messageQueuesArray) { thePublicAccount = wxPublicAccountBlockStatusModelList.FirstOrDefault(p => p.PublicAccountID == mqd.PublicAccountID); if (thePublicAccount == null) { wxPublicAccountBlockStatusModelList.Add(new WXPublicAccountBlockStatusModel() { PublicAccountID = (int)mqd.PublicAccountID, IsBlocked = false, BlockedDateTime = DateTime.MinValue }); } } #endregion if (refresh) { wxPublicAccountBlockStatusModelList = wxPublicAccountBlockStatusModelList.Select(c => { c.IsBlocked = false; return(c); }).ToList(); } else if (autoRefreshAfter15) //如果没有强制指定要刷新,但那些超过15秒的公众账号,也应该自动刷新为IsBlocked = false { DateTime currentDT = Common.Time.NowHandler.GetNowByTimeZone(); wxPublicAccountBlockStatusModelList = wxPublicAccountBlockStatusModelList.Select(p => { if (p.BlockedDateTime != DateTime.MinValue && p.BlockedDateTime < currentDT.AddSeconds(-checkWXIntervalWhenBlock)) { p.IsBlocked = false; } return(p); }).ToList(); } return(wxPublicAccountBlockStatusModelList); }
/// <summary> /// 发送短信 /// </summary> /// <param name="apiBaseUrl"></param> /// <param name="message"></param> /// <param name="mq"></param> /// <returns></returns> public static ShortMessageResponseModel SendShortMessage(string apiBaseUrl, Proc_GetMessageInfoByMessageIDs_Result message, Proc_GetRobotServerMessageQueueForWXRobot_Result mq) { //短信宝帐号类型ID int accountID = Convert.ToInt32(WebConfigurationManager.AppSettings["SMSAccountID"].ToString()); ShortMessageResponseModel shortMessageResponseModel = new ShortMessageResponseModel() { ReturnCode = -1 }; try { string urlForSendShortMessage = string.Format("{0}/api/zcooapi/SendShortMessage", apiBaseUrl); //消息的类型名 string title = message.Title.Substring(message.Title.IndexOf("《") + 1, message.Title.LastIndexOf("》") - 1); title = "【" + title + "】"; string Content = message.Content; string Sendname = "(" + mq.NickName + ")"; //发送消息者 string greeting = "尊敬的家长"; if (mq.MoreParams.Contains("isSendToSMSUser")) { greeting = "尊敬的用户"; } Content = Regex.Replace(Content, @"<\/?[^>]*>", ""); //去除HTML tag Content = Regex.Replace(Content, "((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)", "【链接】"); #region 转化为短链接 暂停使用 //if (Content.Length > 35) //35 //{ // string sd = mq.ID.ToString(); // string secret = WebConfigurationManager.AppSettings["AESEncryptSecret"].ToString(); // sd = Common.Encryptor.AESEncryptor.AESEncrypt(sd, secret); // //需要编码三次。。。。醉了 // sd = System.Web.HttpUtility.UrlEncode(sd); // sd = System.Web.HttpUtility.UrlEncode(sd); // string messageURL = string.Format("{0}/html5/ShowDetail?sd={1}", apiBaseUrl, sd); // messageURL = System.Web.HttpUtility.UrlEncode(messageURL); // string GETshorURL = string.Format("{0}/api/ZcooApi/getShortUrl?Ursl={1}", apiBaseUrl, messageURL); // string shorURL = _httper.Get(GETshorURL); // Content = Content.Substring(0, 9) + "..." + "\n" + "更多内容:" + shorURL; //} #endregion Content = "\n" + greeting + "," + Content + "\n"; if (title.Contains("学习成长")) { int lenth = Sendname.Length + title.Length; if (Content.Length > 64 - lenth) { string prompt = "[部分消息被截取,请微信关注:zcootong]\n"; Content = Content.Substring(0, 64 - lenth - prompt.Length); Content = Content + prompt; } } string digest = title + Content + Sendname; string dataForSendShortMessage = Common.HTTP.PostDataHandler.GetPostData ( new List <PostDataRequestModel>() { new PostDataRequestModel() { ParameterName = "accountID", ParameterValue = accountID }, new PostDataRequestModel() { ParameterName = "toMobileNo", ParameterValue = mq.PushNo }, new PostDataRequestModel() { ParameterName = "content", ParameterValue = digest } } ); //发送短信消息 string sendShortMessageResult = _httper.Post(urlForSendShortMessage, dataForSendShortMessage); shortMessageResponseModel.ReturnCode = Newtonsoft.Json.JsonConvert.DeserializeObject <int>(sendShortMessageResult); } catch (Exception) { shortMessageResponseModel.ReturnCode = -1; } return(shortMessageResponseModel); }