Пример #1
0
        public static VoiceMsg ToVoiceMsg(this Entity entity)
        {
            var msg = new VoiceMsg();

            Assign(msg, entity);
            return(msg);
        }
Пример #2
0
        public static Entity ToEntity(this VoiceMsg msg)
        {
            var entity = EntityManager.Instance.CreateEntity(msg.Id);

            Assign(entity, msg);
            return(entity);
        }
Пример #3
0
 public ChatItem(VoiceMsgPush vmp)
 {
     type   = 1;
     sender = vmp.sender;
     voice  = vmp.content;
     path   = "vm-" + sender + "-" + PUtils.getSeconds() + ".amr";
     read   = false;
 }
Пример #4
0
        /// <summary>
        /// 发送语音消息
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="access_token">访问令牌</param>
        /// <returns></returns>
        public static RequestResultBaseModel SendVoice(VoiceMsg msg, string access_token)
        {
            if (null == msg || string.IsNullOrWhiteSpace(msg.touser))
            {
                throw new ArgumentException("参数错误", nameof(msg.touser));
            }
            if (null == msg.voice || string.IsNullOrWhiteSpace(msg.voice.media_id))
            {
                throw new ArgumentException("voice错误");
            }

            string jsonString = JsonHelper.Serialize(msg);

            return(SendToWeCart(jsonString, access_token));
        }
Пример #5
0
        public static string SendVoice(VoiceMsg msg)
        {
            if (null == msg || string.IsNullOrWhiteSpace(msg.touser))
            {
                return(string.Empty);
            }
            if (null == msg.voice || string.IsNullOrWhiteSpace(msg.voice.media_id))
            {
                throw new ArgumentException("voice错误");
            }

            string jsonString = JsonHelper.Serialize(msg);

            if (!string.IsNullOrWhiteSpace(jsonString))
            {
                return(jsonString);
            }
            return(string.Empty);
        }
Пример #6
0
        private async void btnVoice_Click(object sender, RoutedEventArgs e)
        {
            VoiceMsg ObjectVoiceMsg = new VoiceMsg();
            var      content        = await ObjectVoiceMsg.ShowAsync();

            if (content == ContentDialogResult.Primary)
            {
                if (ObjectVoiceMsg.AuthCode == null)
                {
                    var dialog = new MessageDialog("Please Enter AuthCode!", "Alert");
                    await dialog.ShowAsync();
                }
                else if (ObjectVoiceMsg.VoiceMsgStatus == null)
                {
                    var dialog = new MessageDialog("Please Select Voice Result Options", "Alert");
                    await dialog.ShowAsync();
                }
                else
                {
                    txtResponse.Text = "Processing ...";

                    PaymentManager mgr = PaymentManager.Instance;
                    mgr.setPaymentResponseListener(this);

                    VoiceParameters voiceParameters = new VoiceParameters();

                    voiceParameters.amount   = result.Text.Trim();
                    voiceParameters.authcode = ObjectVoiceMsg.AuthCode;

#if (SHIFT4)
                    Shift4VoiceParameters gwvoiceParams = new Shift4VoiceParameters();
                    gwvoiceParams.cardtoken             = lastTokenValueID;
                    gwvoiceParams.customerReference     = Settings.customerReference;
                    gwvoiceParams.destinationPostalCode = Settings.destinationPostalCode;
                    gwvoiceParams.invoice         = lastTransactionID;
                    gwvoiceParams.requestCategory = ObjectVoiceMsg.VoiceMsgStatus;
                    gwvoiceParams.tax             = Settings.tax;
                    gwvoiceParams.tip             = Settings.tip;

                    ObservableCollection <string> ob = new ObservableCollection <string>();

                    ob.Add("salmon");
                    ob.Add("tuna");

                    gwvoiceParams.productDescriptors = ob;
#endif
#if (CREDITCALL)
                    CCVoiceParams gwvoiceParams = new CCVoiceParams();
                    gwvoiceParams.CardEaseReference = lastTransactionID;
                    gwvoiceParams.voiceResult       = "APPROVED";
#endif

                    voiceParameters.gatewayVoiceParams = gwvoiceParams;

                    await mgr.voiceTransaction(voiceParameters);

                    // should not repeat in the next transaciton.
                    Settings.tax = null;
                    Settings.tip = null;
                }
            }
        }
Пример #7
0
 public static void Assign(this VoiceMsg msg, Entity entity)
 {
     msg.Id = entity.Id;
 }
Пример #8
0
 public static void Assign(this Entity entity, VoiceMsg msg)
 {
     EntityHelper.SetEntityId(entity, msg.Id);
 }
 private string DealWithMsg(VoiceMsg voiceMsg)
 {
     return("");
 }
Пример #10
0
        /// <summary>
        /// 从请求中提取微信消息推送的请求数据
        /// </summary>
        /// <param name="request">推送过来的请求</param>
        /// <returns>消息推送的请求数据</returns>
        public MsgRequest GetMsgRequestData(WeChatEncryptMsg requestEncryptMsg)
        {
            //微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次
            //消息排重,推荐使用msgid排重;事件类型消息推荐使用FromUserName + CreateTime 排重
            //服务器无法保证在五秒内处理并回复,直接回复success;直接回复空串,微信不再重试
            //开发者在5秒内未回复任何内容,开发者回复了异常数据,微信系统提示“该公众号暂时无法提供服务,请稍后再试”
            if (weChatConfig == null)
            {
                throw new NullReferenceException("请使用构造MessageLinkUp(idOrAppId),或初始化Initialize(idOrAppId)");
            }
            string xmlText;//消息

            if (weChatConfig.EnCrypt)
            {
                //消息是密文,要解密后处理
                xmlText = MessageDecrypt(requestEncryptMsg);
            }
            else
            {
                var          stream = requestEncryptMsg.Body; //具体消息数据在请求流里面
                StreamReader reader = new StreamReader(stream);
                xmlText = reader.ReadToEnd();                 //消息
                reader.Close();
            }
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.LoadXml(xmlText);
            XmlNode    rootNode   = xmlDoc.SelectSingleNode("xml");
            MsgRequest msgRequest = null;

            if (rootNode["MsgType"] == null)
            {
                msgRequest = new MsgRequest();
            }
            else
            {
                string msgType = rootNode["MsgType"].InnerText;
                switch (msgType)
                {
                case "text":
                    ContentMsg contentMsg = new ContentMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        contentMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["Content"] != null)
                    {
                        contentMsg.Content = rootNode["Content"].InnerText;
                    }
                    msgRequest = contentMsg;
                    break;

                case "image":
                    PictureMsg pictureMsg = new PictureMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        pictureMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["PicUrl"] != null)
                    {
                        pictureMsg.PicUrl = rootNode["PicUrl"].InnerText;
                    }
                    if (rootNode["MediaId"] != null)
                    {
                        pictureMsg.MediaId = rootNode["MediaId"].InnerText;
                    }
                    msgRequest = pictureMsg;
                    break;

                case "voice":
                    VoiceMsg voiceMsg = new VoiceMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        voiceMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["MediaId"] != null)
                    {
                        voiceMsg.MediaId = rootNode["MediaId"].InnerText;
                    }
                    if (rootNode["Format"] != null)
                    {
                        voiceMsg.Format = rootNode["Format"].InnerText;
                    }
                    if (rootNode["Recognition"] != null)
                    {
                        voiceMsg.Recognition = rootNode["Recognition"].InnerText;
                    }
                    msgRequest = voiceMsg;
                    break;

                case "video":
                    VideoMsg videoMsg = new VideoMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        videoMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["MediaId"] != null)
                    {
                        videoMsg.MediaId = rootNode["MediaId"].InnerText;
                    }
                    if (rootNode["ThumbMediaId"] != null)
                    {
                        videoMsg.ThumbMediaId = rootNode["ThumbMediaId"].InnerText;
                    }
                    msgRequest = videoMsg;
                    break;

                case "shortvideo":
                    ShortVideoMsg shortVideoMsg = new ShortVideoMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        shortVideoMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["MediaId"] != null)
                    {
                        shortVideoMsg.MediaId = rootNode["MediaId"].InnerText;
                    }
                    if (rootNode["ThumbMediaId"] != null)
                    {
                        shortVideoMsg.ThumbMediaId = rootNode["ThumbMediaId"].InnerText;
                    }
                    msgRequest = shortVideoMsg;
                    break;

                case "location":
                    LocationMsg locationMsg = new LocationMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        locationMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["Location_X"] != null)
                    {
                        locationMsg.Location_X = Convert.ToDouble(rootNode["Location_X"].InnerText);
                    }
                    if (rootNode["Location_Y"] != null)
                    {
                        locationMsg.Location_Y = Convert.ToDouble(rootNode["Location_Y"].InnerText);
                    }
                    if (rootNode["Scale"] != null)
                    {
                        locationMsg.Scale = int.Parse(rootNode["Scale"].InnerText);
                    }
                    if (rootNode["Label"] != null)
                    {
                        locationMsg.Label = rootNode["Label"].InnerText;
                    }
                    msgRequest = locationMsg;
                    break;

                case "link":
                    LinkMsg linkMsg = new LinkMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        linkMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["Title"] != null)
                    {
                        linkMsg.Title = rootNode["Title"].InnerText;
                    }
                    if (rootNode["Description"] != null)
                    {
                        linkMsg.Description = rootNode["Description"].InnerText;
                    }
                    if (rootNode["Url"] != null)
                    {
                        linkMsg.Url = rootNode["Url"].InnerText;
                    }
                    msgRequest = linkMsg;
                    break;

                case "event":
                    if (rootNode["Event"] != null)
                    {
                        string eventStr = rootNode["Event"].InnerText.ToLower();
                        switch (eventStr)
                        {
                        case "subscribe":
                            if (rootNode["EventKey"] != null)
                            {
                                string eventKey = rootNode["EventKey"].InnerText;
                                if (eventKey.StartsWith("qrscene_"))
                                {
                                    ScanSubscribeEvent scanSubscribeEvent = new ScanSubscribeEvent();
                                    scanSubscribeEvent.EventKey = eventKey;
                                    if (rootNode["Ticket"] != null)
                                    {
                                        scanSubscribeEvent.Ticket = rootNode["Ticket"].InnerText;
                                    }
                                    msgRequest = scanSubscribeEvent;
                                }
                            }
                            if (msgRequest == null)
                            {
                                msgRequest = new SubscribeEvent();
                            }
                            break;

                        case "unsubscribe": msgRequest = new UnSubscribeEvent(); break;

                        case "scan":
                            ScanEvent scanEvent = new ScanEvent();
                            if (rootNode["EventKey"] != null)
                            {
                                scanEvent.EventKey = rootNode["EventKey"].InnerText;
                            }
                            if (rootNode["Ticket"] != null)
                            {
                                scanEvent.Ticket = rootNode["Ticket"].InnerText;
                            }
                            msgRequest = scanEvent;
                            break;

                        case "location":
                            LocationEvent locationEvent = new LocationEvent();
                            if (rootNode["Latitude"] != null)
                            {
                                locationEvent.Latitude = double.Parse(rootNode["Latitude"].InnerText);
                            }
                            if (rootNode["Longitude"] != null)
                            {
                                locationEvent.Longitude = double.Parse(rootNode["Longitude"].InnerText);
                            }
                            if (rootNode["Precision"] != null)
                            {
                                locationEvent.Precision = double.Parse(rootNode["Precision"].InnerText);
                            }
                            msgRequest = locationEvent;
                            break;

                        case "click":
                            ClickEvent clickEvent = new ClickEvent();
                            if (rootNode["EventKey"] != null)
                            {
                                clickEvent.EventKey = rootNode["EventKey"].InnerText;
                            }
                            msgRequest = clickEvent;
                            break;

                        case "view":
                            ViewEvent viewEvent = new ViewEvent();
                            if (rootNode["EventKey"] != null)
                            {
                                viewEvent.EventKey = rootNode["EventKey"].InnerText;
                            }
                            msgRequest = viewEvent;
                            break;

                        case "masssendjobfinish":        //批量发送群发消息处理完成的消息通知
                            MassSendJobFinishEvent sendJobFinishEvent = new MassSendJobFinishEvent();
                            if (rootNode["MsgID"] != null)
                            {
                                sendJobFinishEvent.MsgID = int.Parse(rootNode["MsgID"].InnerText);
                            }
                            if (rootNode["Status"] != null)
                            {
                                sendJobFinishEvent.Status = Enum.Parse <MassSendJobStatus>(rootNode["Status"].InnerText);
                            }
                            if (rootNode["TotalCount"] != null)
                            {
                                sendJobFinishEvent.TotalCount = int.Parse(rootNode["TotalCount"].InnerText);
                            }
                            if (rootNode["FilterCount"] != null)
                            {
                                sendJobFinishEvent.FilterCount = int.Parse(rootNode["FilterCount"].InnerText);
                            }
                            if (rootNode["SentCount"] != null)
                            {
                                sendJobFinishEvent.SentCount = int.Parse(rootNode["SentCount"].InnerText);
                            }
                            if (rootNode["ErrorCount"] != null)
                            {
                                sendJobFinishEvent.ErrorCount = int.Parse(rootNode["ErrorCount"].InnerText);
                            }
                            XmlNodeList checkResultList = rootNode["CopyrightCheckResult"]?.ChildNodes;
                            if (checkResultList != null && checkResultList.Count > 0)
                            {
                                XmlNode countNode      = rootNode["CopyrightCheckResult"]["Count"];
                                XmlNode checkStateNode = rootNode["CopyrightCheckResult"]["CheckState"];
                                XmlNode resultListNode = rootNode["CopyrightCheckResult"]["ResultList"];
                                if (countNode != null)
                                {
                                    sendJobFinishEvent.CopyrightCheckCount = int.Parse(countNode.InnerText);
                                }
                                else if (checkStateNode != null)
                                {
                                    sendJobFinishEvent.CheckState = int.Parse(checkStateNode.InnerText);
                                }
                                else if (resultListNode != null)
                                {
                                    sendJobFinishEvent.ResultList = new List <ArticleCheckResult>();
                                    foreach (XmlNode itemNode in resultListNode)
                                    {
                                        sendJobFinishEvent.ResultList.Add(new ArticleCheckResult()
                                        {
                                            ArticleIdx            = int.Parse(itemNode["ArticleIdx"].InnerText),
                                            UserDeclareState      = int.Parse(itemNode["UserDeclareState"].InnerText),
                                            AuditState            = int.Parse(itemNode["AuditState"].InnerText),
                                            OriginalArticleUrl    = itemNode["OriginalArticleUrl"].InnerText,
                                            OriginalArticleType   = int.Parse(itemNode["OriginalArticleType"].InnerText),
                                            CanReprint            = bool.Parse(itemNode["CanReprint"].InnerText),
                                            NeedReplaceContent    = bool.Parse(itemNode["NeedReplaceContent"].InnerText),
                                            NeedShowReprintSource = bool.Parse(itemNode["NeedShowReprintSource"].InnerText),
                                        });
                                    }
                                }
                            }
                            msgRequest = sendJobFinishEvent;
                            break;

                        case "templatesendjobfinish":
                            TemplateSendJobFinishEvent templateSendFinishEvent = new TemplateSendJobFinishEvent();
                            if (rootNode["MsgID"] != null)
                            {
                                templateSendFinishEvent.MsgID = int.Parse(rootNode["MsgID"].InnerText);
                            }
                            if (rootNode["Status"] != null)
                            {
                                templateSendFinishEvent.Status = rootNode["Status"].InnerText;
                            }
                            break;

                        default: msgRequest = new MsgRequest(); break;
                        }
                    }
                    break;

                default: msgRequest = new MsgRequest(); break;
                }
                msgRequest.MsgType = msgType;
            }
            msgRequest.ToUserName   = rootNode["ToUserName"].InnerText;
            msgRequest.FromUserName = rootNode["FromUserName"].InnerText;
            msgRequest.CreateTime   = int.Parse(rootNode["CreateTime"].InnerText);

            return(msgRequest);
        }
Пример #11
0
        /// <summary>
        /// 消息转发多客服
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="sendKey"></param>
        private void SendCustomerService(Object obj)
        {
            string result = string.Empty;
            string date   = string.Empty;
            string strUrl = string.Empty;

            try
            {
                ReceiveMsgBase msg = obj as ReceiveMsgBase;

                if (msg == null)
                {
                    return;
                }


                if (msg is LinkMsg)
                {
                    LinkMsg link = msg as LinkMsg;
                    link.Title       = "<![CDATA[" + link.Title + "]]>";
                    link.Description = "<![CDATA[" + link.Description + "]]>";
                    link.Url         = "<![CDATA[" + link.Url + "]]>";
                }
                else if (msg is LocationMsg)
                {
                    LocationMsg link = msg as LocationMsg;
                    link.Location_X = "<![CDATA[" + link.Location_X + "]]>";
                    link.Location_Y = "<![CDATA[" + link.Location_Y + "]]>";
                    link.Scale      = "<![CDATA[" + link.Scale + "]]>";
                    link.Label      = "<![CDATA[" + link.Label + "]]>";
                }
                else if (msg is PicMsg)
                {
                    PicMsg link = msg as PicMsg;
                    link.PicUrl  = "<![CDATA[" + link.PicUrl + "]]>";
                    link.MediaId = "<![CDATA[" + link.MediaId + "]]>";
                }
                else if (msg is TextMsg)
                {
                    TextMsg link = msg as TextMsg;
                    link.Content = "<![CDATA[" + link.Content + "]]>";
                }
                else if (msg is VideoMsg)
                {
                    VideoMsg link = msg as VideoMsg;
                    link.ThumbMediaId = "<![CDATA[" + link.ThumbMediaId + "]]>";
                    link.MediaId      = "<![CDATA[" + link.MediaId + "]]>";
                }
                else if (msg is VoiceMsg)
                {
                    VoiceMsg link = msg as VoiceMsg;
                    link.MediaId     = "<![CDATA[" + link.MediaId + "]]>";
                    link.Format      = "<![CDATA[" + link.Format + "]]>";
                    link.Recognition = "<![CDATA[" + link.Recognition + "]]>";
                }

                //try
                //{
                //    DataTable dt = DalMemberCommon.GetMemberInfoByWeiXinOpenId(msg.FromUserName);
                //    if (dt != null && dt.Rows.Count > 0)
                //    {
                date   = msg.ToXml();
                strUrl = @"http://dkf.ozner.net/service/wxcustomer.aspx";
            }
            catch (Exception ex)
            {
                string errorinfo = "错误堆栈:" + ex.StackTrace;

                if (obj != null)
                {
                    string addition = "";

                    string baseName = obj.GetType().Name;
                    if (obj is ReceiveMsgBase)
                    {
                        ReceiveMsgBase rmb  = obj as ReceiveMsgBase;
                        Type           type = rmb.GetType();

                        if (rmb is LinkMsg)
                        {
                            LinkMsg link = rmb as LinkMsg;
                            addition = link.Title + "|" + link.Description + "|" + link.Url;
                        }
                        else if (rmb is LocationMsg)
                        {
                            LocationMsg link = rmb as LocationMsg;
                            addition = link.Location_X + "|" + link.Location_Y + "|" + link.Scale + "|" + link.Label;
                        }
                        else if (rmb is PicMsg)
                        {
                            PicMsg link = rmb as PicMsg;
                            addition = link.PicUrl + "|" + link.MediaId;
                        }
                        else if (rmb is TextMsg)
                        {
                            TextMsg link = rmb as TextMsg;
                            addition = link.Content;
                        }
                        else if (rmb is VideoMsg)
                        {
                            VideoMsg link = rmb as VideoMsg;
                            addition = link.MediaId + "|" + link.ThumbMediaId;
                        }
                        else if (rmb is VoiceMsg)
                        {
                            VoiceMsg link = rmb as VoiceMsg;
                            addition = link.MediaId + "|" + link.Format + "|" + link.Recognition;
                        }
                    }
                    errorinfo = "类型:" + obj.GetType().Name + " 额外信息:" + addition + " 错误信息:" + errorinfo;
                }

                //LogBase.LogHzLkt.LogExErr("HzLktSite", "OznerMall", "SendCustomerService", errorinfo, ELogExLevel.Higher, errorinfo);
            }

            try
            {
                result = WebClientHelper.CallPost(strUrl, date, Encoding.UTF8);
            }
            catch (Exception ex)
            {
                //LogBase.LogHzLkt.LogExErr(ex, ELogExLevel.Middle);
            }
        }
Пример #12
0
        private void Meow_OnFriendMsgs(object sender, ObjectEvent.ObjectEventArgs e)
        {
            #region 私聊报头 -- Private Info Head --
            var prop = new QQRecieveMessage(
                MessageIOType.Friend,
                new IOBody(
                    e.Data["FromUin"].ToObject <long>(),
                    e.Data["ToUin"].ToObject <long>(),
                    null,
                    null,
                    null
                    ),
                new MsgProperty(
                    null,
                    e.Data["MsgSeq"].ToObject <long?>(),
                    null,
                    null,
                    e.Data["RedBaginfo"].ToString(),
                    null
                    ),
                e.CurrentQQ
                );
            #endregion
            //文本
            var content = e.Data["Content"].ToString();
            //触发对应操作信息
            switch (e.Data["MsgType"].ToString())
            {
            case "TextMsg":
            {
                var msg = new TextMsg(content);
                _FriendTextMsgRecieve.Invoke(prop, msg);
                ServerUtil.Log($"好友文本信息 [{prop.IOBody.MsgFromQQ}->{prop.IOBody.MsgRecvQQ}] \n" +
                               $"内容:{msg.Content}", LogType.ClientMessage, ConsoleColor.Magenta);
            }
            break;

            case "PicMsg":
            {
                var msg = new PicMsg(content);
                _FriendPicMsgRecieve.Invoke(prop, msg);
                if (msg._isSnapPic)
                {
                    ServerUtil.Log($"好友闪照信息 [{prop.IOBody.MsgFromQQ}->{prop.IOBody.MsgRecvQQ}]", LogType.ClientMessage, ConsoleColor.Yellow);
                }
                else
                {
                    ServerUtil.Log($"好友图片信息 [{prop.IOBody.MsgFromQQ}->{prop.IOBody.MsgRecvQQ}] \n" +
                                   $"内容:{msg.Content} | 图片共 {msg.PicList.Length} 张", LogType.ClientMessage, ConsoleColor.Yellow);
                }
            }
            break;

            case "VoiceMsg":
            {
                var msg = new VoiceMsg(content);
                _FriendVocMsgRecieve.Invoke(prop, msg);
                ServerUtil.Log($"好友语音信息 [{prop.IOBody.MsgFromQQ}->{prop.IOBody.MsgRecvQQ}]"
                               , LogType.ClientMessage, ConsoleColor.DarkMagenta);
            }
            break;

            case "VideoMsg":
            {
                var msg = new VideoMsg(content);
                _FriendVidMsgRecieve.Invoke(prop, msg);
                ServerUtil.Log($"好友视频信息 [{prop.IOBody.MsgFromQQ}->{prop.IOBody.MsgRecvQQ}]"
                               , LogType.ClientMessage, ConsoleColor.Green);
            }
            break;
            }
            ;
        }
Пример #13
0
        private void Meow_OnGroupMsgs(object sender, ObjectEvent.ObjectEventArgs e)
        {
            #region 群聊报头 -- Group Info Head --
            var prop = new QQRecieveMessage(
                MessageIOType.Friend,
                new IOBody(
                    e.Data["FromUserId"].ToObject <long>(),
                    0,
                    e.Data["FromNickName"].ToString(),
                    e.Data["FromGroupId"].ToObject <long>(),
                    e.Data["FromGroupName"].ToString()
                    ),
                new MsgProperty(
                    null,
                    e.Data["MsgSeq"].ToObject <long?>(),
                    e.Data["MsgRandom"].ToObject <long?>(),
                    null,
                    e.Data["RedBaginfo"].ToString(),
                    e.Data["MsgTime"].ToObject <long?>()
                    ),
                e.CurrentQQ
                );
            #endregion
            //文本
            var content = e.Data["Content"].ToString();
            //触发对应操作信息
            switch (e.Data["MsgType"].ToString())
            {
            case "TextMsg":
            {
                var msg = new TextMsg(content);
                _GroupTextMsgRecieve.Invoke(prop, msg);
                ServerUtil.Log($"群文本信息 [{prop.IOBody.MsgFromQQ}] " +
                               $"在群聊 [{prop.IOBody.FromGroupId} :: {prop.IOBody.FromGroupName}] \n" +
                               $"内容:{msg.Content}", LogType.ClientMessage, ConsoleColor.Magenta);
            }
            break;

            case "AtMsg":
            {
                var msg = new AtTextMsg(content);
                _GroupAtTextMsgRecieve.Invoke(prop, msg);
                ServerUtil.Log($"群At文本信息 [{prop.IOBody.MsgFromQQ}] " +
                               $"在群聊 [{prop.IOBody.FromGroupId} :: {prop.IOBody.FromGroupName}] \n" +
                               $"内容:{msg.Content}", LogType.ClientMessage, ConsoleColor.Magenta, ConsoleColor.Cyan);
            }
            break;

            case "PicMsg":
            {
                var msg = new PicMsg(content);
                var d   = "图片";
                if (msg.AtedQQ != null)
                {
                    _GroupAtPicMsgRecieve.Invoke(prop, msg);
                    d = "At图片";
                }
                if (msg._isSnapPic)
                {
                    d = "闪照";
                }
                _GroupPicMsgRecieve.Invoke(prop, msg);
                ServerUtil.Log($"群{d} [{prop.IOBody.MsgFromQQ}] " +
                               $"在群聊 [{prop.IOBody.FromGroupId} :: {prop.IOBody.FromGroupName}] \n" +
                               $"内容:{msg.Content} | 图片共 {msg.PicList.Length} 张", LogType.ClientMessage, ConsoleColor.Yellow);
            }
            break;

            case "VoiceMsg":
            {
                var msg = new VoiceMsg(content);
                _GroupVocMsgRecieve.Invoke(prop, msg);
                ServerUtil.Log($"群语音信息 [{prop.IOBody.MsgFromQQ}] " +
                               $"在群聊 [{prop.IOBody.FromGroupId} :: {prop.IOBody.FromGroupName}]"
                               , LogType.ClientMessage, ConsoleColor.DarkMagenta);
            }
            break;

            case "VideoMsg":
            {
                var msg = new VideoMsg(content);
                _GroupVidMsgRecieve.Invoke(prop, msg);
                ServerUtil.Log($"群视频信息 [{prop.IOBody.MsgFromQQ}] " +
                               $"在群聊 [{prop.IOBody.FromGroupId} :: {prop.IOBody.FromGroupName}]"
                               , LogType.ClientMessage, ConsoleColor.Green);
            }
            break;
            }
            ;
        }
Пример #14
0
        public string Index()
        {
            StreamReader reader    = new StreamReader(Request.InputStream);
            string       xmlData   = reader.ReadToEnd();
            BaseMsg      baseModel = XmlHelper.ConvertToModel <BaseMsg>(xmlData);

            BaseResponseMsg response = new BaseResponseMsg
            {
                CreateTime   = CommonHelp.TimeToLong(DateTime.Now),
                ToUserName   = baseModel.FromUserName,
                FromUserName = baseModel.ToUserName
            };//响应对象

            string result = "";

            try
            {
                if (baseModel.MsgType == "event")
                {
                    EventMsg model = XmlHelper.ConvertToModel <EventMsg>(xmlData);
                    //EventMsgBll.HandlerTheEvent(model);
                    EventMsgBll.Add(model);
                    EventMsgBll.SaveChanges();
                    return("");
                }
                var res = (MsgType)Enum.Parse(typeof(MsgType), baseModel.MsgType);
                switch (res)
                {
                case MsgType.text:
                {
                    TextMsg model = XmlHelper.ConvertToModel <TextMsg>(xmlData);
                    TextMsgBll.Add(model);
                    //TODO 处理用户的文字信息
                    response = new ResponseTextMsg
                    {
                        CreateTime   = CommonHelp.TimeToLong(DateTime.Now),
                        ToUserName   = baseModel.FromUserName,
                        FromUserName = baseModel.ToUserName,
                        Content      = "欢迎关注我的微信!我是wdq!"
                    };
                }
                break;

                case MsgType.image:
                {
                    ImageMsg model = XmlHelper.ConvertToModel <ImageMsg>(xmlData);
                    ImageMsgBll.Add(model);
                    //TODO 处理用户的图片信息
                    response = new ResponseImageMsg
                    {
                        CreateTime   = CommonHelp.TimeToLong(DateTime.Now),
                        FromUserName = baseModel.ToUserName,
                        ToUserName   = baseModel.FromUserName,
                        MediaId      = "1212"
                    };
                }
                break;

                case MsgType.voice:
                {
                    VoiceMsg model = XmlHelper.ConvertToModel <VoiceMsg>(xmlData);
                    VoiceMsgBll.Add(model);
                    if (model.Recognition != null)
                    {
                        //TODO 处理用户的语音信息
                    }
                    response = new ResponseVoiceMsg
                    {
                        FromUserName = baseModel.ToUserName,
                        ToUserName   = baseModel.FromUserName,
                        CreateTime   = CommonHelp.TimeToLong(DateTime.Now),
                        MediaId      = "123"
                    };
                }
                break;

                case MsgType.video:
                case MsgType.shortvideo:
                {
                    VideoMsg model = XmlHelper.ConvertToModel <VideoMsg>(xmlData);
                    VideoMsgBll.Add(model);
                    //TODO 处理用户的小视频信息
                }
                    response = new ResponseVideoMsg
                    {
                        FromUserName = baseModel.ToUserName,
                        ToUserName   = baseModel.FromUserName,
                        CreateTime   = CommonHelp.TimeToLong(DateTime.Now),
                        MediaId      = "123",
                        Description  = "test",
                        Title        = "回复视频消息"
                    };
                    break;

                case MsgType.location:
                {
                    LocationMsg model = XmlHelper.ConvertToModel <LocationMsg>(xmlData);
                    LocationMsgBll.Add(model);
                    //TODO 处理用户的地理位置信息
                }
                    response = new ResponseMusicMsg
                    {
                        FromUserName = baseModel.ToUserName,
                        ToUserName   = baseModel.FromUserName,
                        CreateTime   = CommonHelp.TimeToLong(DateTime.Now),
                        Title        = "回复音乐消息",
                        Description  = "一段感人的音乐",
                        HQMusicUrl   = "http://baidu.music.com",
                        MusicUrl     = "fuuuul",
                        ThumbMediaId = "123"
                    };
                    break;

                case MsgType.link:
                {
                    LinkMsg model = XmlHelper.ConvertToModel <LinkMsg>(xmlData);
                    LinkBll.Add(model);
                    //TODO 处理用户的连接信息
                }
                    response = new ResponseNewsMsg
                    {
                        FromUserName = baseModel.ToUserName,
                        ToUserName   = baseModel.FromUserName,
                        CreateTime   = CommonHelp.TimeToLong(DateTime.Now),
                        ArticleCount = 1,
                        Articles     = new[] { new ResponseNewsMsg.Article {
                                                   Description = "", PicUrl = "", Title = "", Url = ""
                                               } },
                    };
                    break;
                }

                EventMsgBll.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                result = dbEx.EntityValidationErrors.SelectMany(item => item.ValidationErrors).Aggregate(result, (current, item2) => current + string.Format("{0}:{1}\r\n", item2.PropertyName, item2.ErrorMessage));
            }
            return(response.ToUserName == null ? "" : response.GetResponseStr());
        }