Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
 public static WechatMessage CreateReply(this WechatMessage msg)
 {
     return(new WechatMessage
     {
         MessageType = msg.MessageType,
         FromUserName = msg.ToUserName,
         ToUserName = msg.FromUserName,
         CreateTime = msg.CreateTime
     });
 }
Beispiel #4
0
 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);
         }
     }
 }
Beispiel #5
0
 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);
                }
            }
        }
Beispiel #7
0
        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();
            }
        }
Beispiel #8
0
        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;
            }
        }