private async Task PostWelcomeMessageAsync(WechatMessage incomingMessage) { var wechatMessage = incomingMessage.CreateReply(); wechatMessage.MessageType = WechatMessageTypes.TEXT; wechatMessage.Content = "Thank you for subscribing! I am the Dim Sum Master! Please ask me about some different types of dim sum. I learn about new dim sum everyday, so check again later if I don't recognize one!"; await _connector.PostMessage(wechatMessage); }
private async Task PostWelcomeMessageAsync(WechatMessage incomingMessage) { var wechatMessage = incomingMessage.CreateReply(); wechatMessage.MessageType = WechatMessageTypes.TEXT; wechatMessage.Content = "Thank you for subscribing! I am the geffzhang ! "; await _connector.PostMessage(wechatMessage); }
public static WechatMessage CreateReply(this WechatMessage msg) { return(new WechatMessage { MessageType = msg.MessageType, FromUserName = msg.ToUserName, ToUserName = msg.FromUserName, CreateTime = msg.CreateTime }); }
private async Task ValidateMessage(WechatMessage message) { if (message.MessageType == WechatMessageTypes.IMAGE) { //If we're holding a URL instead of a WeChat media ID //then we need to download the image and transfer to wechat if (message.MediaId.Contains("http")) { message.MediaId = await GetWebImageIdAsync(message.MediaId); } } }
public static void WriteMessageLog(WechatBaseMessage message, MessageDirection direction, string rawData) { using (WechatDBDataContext db = new WechatDBDataContext(Settings.Default.WechatDBConnectionString)) { WechatMessage data = new WechatMessage(); data.CreateTime = message.CreateTime; data.FromUserName = message.FromUserName; data.MsgType = message.MsgType; data.Direction = direction.ToString(); data.ToUserName = message.ToUserName; data.RawData = rawData; db.WechatMessages.InsertOnSubmit(data); db.SubmitChanges(); } }
public static void SendMsg(MessageEntity msg) { bool result = false; try { if (msg.MsgType == MsgType.SMS) { var paras = from p in msg.TemplateParmaters orderby p.Name ascending select p.Value; result = SMSSenderService.SendSMS(msg.MsgReceiver, msg.ExternalTemplateID, paras.ToArray()); } else { WechatMessage wechatMsg = new WechatMessage() { ToUser = msg.MsgReceiver, TemplateId = msg.ExternalTemplateID, Url = msg.Url }; msg.TemplateParmaters.ForEach(item => { wechatMsg.Data.Add(item.Name, new WeiXinParam() { Value = item.Value, Color = item.Color }); }); WechatSenderService.PushMessage(wechatMsg); } } catch (Exception ex) { result = false; throw ex; } finally { if (msg.SysNo > 0) { MessageDA.UpdateSmsStatusAfterHandled(msg.SysNo, result); } } }
public async Task PostMessage(WechatMessage msg) { await ValidateMessage(msg); var token = await GetOrRefreshToken(); using (var client = new HttpClient()) { var uriBuilder = new UriBuilder(_options.CustomerEndpoint); uriBuilder.Query = $"access_token={token.AccessToken}"; var json = JsonConvert.SerializeObject(msg); var content = new StringContent(json, Encoding.UTF8, "application/json"); var response = await client.PostAsync(uriBuilder.Uri, content); response.EnsureSuccessStatusCode(); } }
private WechatMessage ConvertMessage(ITurnContext context, IMessageActivity activity) { //The connector could handle this conversion instead... var wechatMessage = new WechatMessage { ToUserName = context.GetChannelUserId() }; var richCards = activity.Attachments?.Where(att => att.ContentType.Equals("application/vnd.microsoft.card.hero", System.StringComparison.InvariantCultureIgnoreCase)); if (richCards?.Count() > 0) { wechatMessage.MessageType = WechatMessageTypes.RICH_MEDIA; wechatMessage.Articles = richCards.Select(att => { var richCard = att.Content as HeroCard; return(new WechatArticle { Title = richCard.Title, Description = richCard.Subtitle ?? richCard.Text, PicUrl = richCard.Images?.FirstOrDefault()?.Url ?? string.Empty }); }); return(wechatMessage); } var image = activity.Attachments?.FirstOrDefault(att => att.ContentType.Contains("image")); if (image != null) { wechatMessage.MessageType = WechatMessageTypes.IMAGE; wechatMessage.MediaId = image.ContentUrl; return(wechatMessage); } wechatMessage.MessageType = WechatMessageTypes.TEXT; wechatMessage.Content = activity.Text; return(wechatMessage); }
/// <summary> /// 推送模板消息 /// </summary> /// <param name="message"></param> /// <returns></returns> public static void PushMessage(WechatMessage message) { if (string.IsNullOrEmpty(message.ToUser)) { throw new BusinessException("用户未绑定微信号!"); } string token = GetCommonToken(); if (string.IsNullOrEmpty(token)) { throw new BusinessException("获取微信授权Token失败,请重试!"); } StringBuilder builder = new StringBuilder(); builder.Append(WXConfig.TemplateMessageUrl); builder.Append(token); var result = HttpClient.Post <WeiXinMsgResult>(builder.ToString(), JsonConvert.SerializeObject(message)); if (result.Result.ErrCode != 0 || !string.Equals(result.Result.ErrMsg, "ok")) { throw new BusinessException(string.Format("发送微信消息异常,[{0}]{1}!", result.Result.ErrCode, result.Result.ErrMsg)); } }
public static int SendMsg <ParmaterTemplate>(int companySysNo, List <ReceiverInfo> receiverList, ParmaterTemplate parmater, bool bl) where ParmaterTemplate : BaseMsgTemplate { try { var msgList = GetMessageEntityList(companySysNo, receiverList, parmater, MessageStatus.Sent); if (msgList.Count == 0) { return(1);//未检测到匹配的消息模版! } if (parmater.RetryCount == 0) { foreach (var m in msgList) { m.Status = MessageStatus.Sent; } } if (msgList.Any()) { foreach (var msg in msgList) { //msg.Url = parmater.GetRealUrl(); if (msg.MsgType == MsgType.WeiXin) { WechatMessage wechatMsg = new WechatMessage() { ToUser = msg.MsgReceiver, TemplateId = msg.ExternalTemplateID, Url = msg.Url }; msg.TemplateParmaters.ForEach(item => { wechatMsg.Data.Add(item.Name, new WeiXinParam() { Value = item.Value, Color = item.Color }); }); SendMsgToDB(msg, (sysno) => { try { WechatSenderService.PushMessage(wechatMsg); MessageDA.UpdateSmsStatusAfterHandled(sysno, true); msg.SysNo = sysno; if (msg.LimitCount > 1) { FirstSendSucess(msg); } } catch (Exception ex) { MessageDA.UpdateSmsStatusAfterHandled(sysno, false); throw ex; } }); } else if (msg.MsgType == MsgType.SMS) { if (parmater.SendCount > 0) { //从数据库检测同模版发送且发送成功的条数 var sendedList = SMSProcessor.LoadMessageReSendCount(companySysNo, msg.MsgReceiver, (int)MsgType.SMS) ?? new List <MessageEntity>(); if (sendedList.Any()) { //SendCount < 0 不做限制 modify by vickytang if (parmater.SendCount > 0 && sendedList.Count() >= parmater.SendCount) //在过去24小时内发送短信的次数超过模版限制,不用判断IP,因短信模版自身含有限制 { return(2); //当前操作在过去24小时内发送短信的次数超过系统限制! } //从数据库获取接受者最后一条发送的验证码,1分钟之内不能重复发送 var t = sendedList.OrderByDescending(x => x.SysNo).First(); TimeSpan ts = DateTime.Now - t.InDate; if (ts.Minutes <= 1) { return(3); //当前接受者1分钟之类不能发送超过两条的验证码 } var clist = sendedList.Where(x => x.ClientIP == msg.ClientIP); //同IP //SendCount < 0 不做限制 modify by vickytang if (parmater.SendCount > 0 && clist.Count() > parmater.SendCount) { return(2);//当前操作在过去24小时内发送短信的次数超过系统限制! } } } ////检测24小时同IP同模版只能发送x条 //if (parmater.SendCount > 0 && sendedList.Any()) //{ // var clist = sendedList.Where(x => x.ClientIP == msg.ClientIP);//同IP // if (sendedList.Count() > parmater.SendCount || clist.Count() >= parmater.SendCount) // { // return 2;//当前操作在过去24小时内发送短信的次数超过系统限制! // } // else // { // //从数据库获取最后一条发送的验证码 // var t = sendedList.OrderByDescending(x => x.SysNo).First(); // TimeSpan ts = DateTime.Now - t.InDate; // if (ts.Minutes <= 1) // { // return 3;//当前接受者1分钟之类不能发送超过两条的验证码 // } // } //} var paras = from p in msg.TemplateParmaters orderby p.Name ascending select p.Value; SendMsgToDB(msg, (sysno) => { SendSMSImmediately(msg.MsgReceiver, msg.ExternalTemplateID, paras.ToList(), bl, sysno); msg.SysNo = sysno; if (msg.LimitCount > 1) { FirstSendSucess(msg); } }); } } } return(0); } catch (Exception ex) { Logger.WriteLog(ex.ToString(), "SMS_EXception"); throw ex; } }