/// <summary> /// 回写订阅结果 /// </summary> /// <param name="request">回写参数</param> /// <returns></returns> /// <remarks>2013-10-15 陶辉 创建</remarks> public override void WriteBackMessage(RequestXml request) { var config = new MkWeixinConfig(); if (config.FollowType == (int)MarketingStatus.微信消息类型.文本) { Hyt.Util.Log.LogManager.Instance.WriteLog("订阅回复开始"); #region 初始化数据 var resxml = string.Format(@"<xml> <ToUserName><![CDATA[{0}]]></ToUserName> <FromUserName><![CDATA[{1}]]></FromUserName> <CreateTime>{2}</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[{3}]]></Content> <FuncFlag>1</FuncFlag> </xml>", request.FromUserName, request.ToUserName, DateTime.Now.ToShortDateString(), config.FollowText); #endregion Hyt.Util.Log.LogManager.Instance.WriteLog("订阅:" + resxml); System.Web.HttpContext.Current.Response.Write(resxml); System.Web.HttpContext.Current.Response.End(); } }
private void SendPing() { const string RequestXml = "<?xml version=\"1.0\"?>" + "<methodCall>" + "<methodName>weblogUpdates.ping</methodName>" + "<params>" + "<param>" + "<value>{0}</value>" + "</param>" + "<param>" + "<value>{0}</value>" + "</param>" + "</params>" + "</methodCall>"; if (ShouldPing()) { _httpForm.PostAsync( new HttpFormPostRawRequest { Url = _url, ContentType = "text/xml", Data = RequestXml.FormatWith(_settings.SiteTitle, _settings.RootUrl) }, r => _lastPingedAt = SystemTime.Now(), e => { } ); } }
protected void ProcessXml() { for (int i = 0; i < CountFiles; i++) { string[] xmlRequest = new string[_xml.Length]; _xml.CopyTo(xmlRequest, 0); foreach (var row in Fields) { for (int fila = 0; fila < _xml.Length; fila++) { try { string line = _xml[fila]; if (line.IndexOf(string.Format("{0}{1}{2}", Xml.PrefixField, row.Key, Xml.SuffixField)) >= 0) { if (row.Value[i].Value.Trim().Equals(KeyEmpty, StringComparison.InvariantCultureIgnoreCase)) { xmlRequest[fila] = line.Replace(string.Format("{0}{1}{2}", Xml.PrefixField, row.Key, Xml.SuffixField), ""); } else if (row.Value[i].Value.Trim().Equals(KeyNull, StringComparison.InvariantCultureIgnoreCase)) { xmlRequest[fila] = "<!--" + line.Replace(string.Format("{0}{1}{2}", Xml.PrefixField, row.Key, Xml.SuffixField), "").Trim() + "-->"; } else { xmlRequest[fila] = line.Replace(string.Format("{0}{1}{2}", Xml.PrefixField, row.Key, Xml.SuffixField), row.Value[i].Value); } break; } //else if (_xml[fila].IndexOf(Xml.PrefixComment) >= 0) //{ // int posStart = line.IndexOf(Xml.PrefixComment); // if(posStart>=0){ // int length = line.IndexOf(Xml.SuffixComment)+3-posStart; // if (length > 0) // { // line =line.Replace(line.Substring(posStart, length),""); // if (string.IsNullOrWhiteSpace(line)) // { // xmlRequest[fila] = ""; // } // } // } //} } catch (Exception ex) { Console.WriteLine("Error: {0}", ex.Message); } } } CleanTagEmpty(ref xmlRequest); RequestXml.Add(new Summary { Request = new FileXml(CleanSpace(xmlRequest)) }); } }
/// <summary> /// 接收微信信息 /// </summary> public static RequestXml RequestMsg() { //接收信息流 Stream requestStream = System.Web.HttpContext.Current.Request.InputStream; byte[] requestByte = new byte[requestStream.Length]; requestStream.Read(requestByte, 0, (int)requestStream.Length); //转换成字符串 string requestStr = Encoding.UTF8.GetString(requestByte); //将XML文件封装到实体类requestXml中 RequestXml requestXml = new RequestXml(); if (!string.IsNullOrEmpty(requestStr)) { //封装请求类到xml文件中 XmlDocument requestDocXml = new XmlDocument(); requestDocXml.LoadXml(requestStr); XmlElement rootElement = requestDocXml.DocumentElement; requestXml.ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText; //开发者微信号 requestXml.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText; //发送方微信号 requestXml.CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText; //消息发送信息 requestXml.MsgType = rootElement.SelectSingleNode("MsgType").InnerText; //requestXml.MsgId = rootElement.SelectSingleNode("MsgId").InnerText; //获取接收信息的类型 switch (requestXml.MsgType) { //接收普通信息 case "text": //文本信息 requestXml.Content = rootElement.SelectSingleNode("Content").InnerText; break; case "image": //图片信息 requestXml.PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText; break; case "location": //地理位置信息 requestXml.Location_X = rootElement.SelectSingleNode("Location_X").InnerText; requestXml.Location_Y = rootElement.SelectSingleNode("Location_Y").InnerText; break; //接收事件推送 //大概包括有:关注/取消关注事件、扫描带参数二维码事件、上报地理位置事件、自定义菜单事件、点击菜单拉取消息时的事件推送、点击菜单跳转链接时的事件推送 case "event": requestXml.Event = rootElement.SelectSingleNode("Event").InnerText; requestXml.EventKey = rootElement.SelectSingleNode("EventKey").InnerText; break; } } return(requestXml); }
/// <summary> /// 回写防伪验证结果 /// </summary> /// <param name="request">回写参数</param> /// <returns></returns> /// <remarks>2013-10-15 陶辉 创建</remarks> public override void WriteBackMessage(RequestXml request) { var result = WeChatBo.Instance.CheckProduct(request.Content.Split(new string[] { ":", ":" }, StringSplitOptions.RemoveEmptyEntries)[1]); var message = result.Status ? NoHtml(result.Data.Msg) : result.Message; #region 数据初始化 var resxml = string.Format(@"<xml> <ToUserName><![CDATA[{0}]]></ToUserName> <FromUserName><![CDATA[{1}]]></FromUserName> <CreateTime>{2}</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[{3}]]></Content> <FuncFlag>1</FuncFlag> </xml>", request.FromUserName, request.ToUserName, DateTime.Now.ToShortDateString(), message); #endregion try { Hyt.Util.Log.LogManager.Instance.WriteLog("防伪验证:" + resxml); System.Web.HttpContext.Current.Response.Write(resxml); System.Web.HttpContext.Current.Response.End(); var answer = new MkWeixinQuestion() { Messages = message, MessagesTime = DateTime.Now, ReplyerSysNo = 0, Status = (int)MarketingStatus.微信咨询消息状态.已读, Type = (int)MarketingStatus.微信咨询类型.回复, WeixinId = request.FromUserName, CustomerSysNo = 0 }; //answer写入表 IMkWeixinQuestionDao.Instance.Create(answer); } catch (Exception) { //TODO: } }
/// <summary> /// 回复消息(微信信息返回) /// </summary> /// <param name="weixinXML"></param> private static string ResponseMsg(RequestXml requestXml) { string resXml = ""; try { switch (requestXml.MsgType) { //当收到文本信息的时候回复信息 case "text": resXml = "<xml><ToUserName><![CDATA[" + requestXml.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + requestXml.ToUserName + "]]></FromUserName><CreateTime>" + DateTime.Now.ToString("yyyyMMdd") + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[" + "文本" + "]]></Content><FuncFlag>0</FuncFlag></xml>"; break; //当接收推送事件时回复的信息 case "event": switch (requestXml.Event.ToLower()) { //关注的时候回复信息 case "subscribe": resXml = "<xml><ToUserName><![CDATA[" + requestXml.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + requestXml.ToUserName + "]]></FromUserName><CreateTime>" + DateTime.Now.ToString("yyyyMMdd") + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[" + "第一次关注" + "]]></Content><FuncFlag>0</FuncFlag></xml>";; break; //自定义菜单的时候回复信息 case "click": resXml = "<xml><ToUserName><![CDATA[" + requestXml.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + requestXml.ToUserName + "]]></FromUserName><CreateTime>" + DateTime.Now.ToString("yyyyMMdd") + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[" + "单击事件" + "]]></Content><FuncFlag>0</FuncFlag></xml>";; break; case "view": break; } break; } return(resXml); } catch { return(""); } }
/// <summary> /// 回写异常结果 /// </summary> /// <param name="request">回写参数</param> /// <returns></returns> /// <remarks>2013-10-15 陶辉 创建</remarks> public override void WriteBackMessage(RequestXml request) { var message = "抱歉,您输入的格式有误!"; #region 初始化数据 var resxml = string.Format(@"<xml> <ToUserName><![CDATA[{0}]]></ToUserName> <FromUserName><![CDATA[{1}]]></FromUserName> <CreateTime>{2}</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[{3}]]></Content> <FuncFlag>1</FuncFlag> </xml>", request.FromUserName, request.ToUserName, DateTime.Now.ToShortDateString(), message); #endregion try { System.Web.HttpContext.Current.Response.Write(resxml); System.Web.HttpContext.Current.Response.End(); var answer = new MkWeixinQuestion() { Messages = message, MessagesTime = DateTime.Now, ReplyerSysNo = 0, Status = (int)MarketingStatus.微信咨询消息状态.已读, Type = (int)MarketingStatus.微信咨询类型.回复, WeixinId = request.FromUserName, CustomerSysNo = 0 }; //answer写入表 IMkWeixinQuestionDao.Instance.Create(answer); } catch (Exception) { //TODO: } }
/// <summary> /// 接收信息处理方法 /// </summary> /// <param name="postStr">接收信息</param> /// <returns>void</returns> /// <remarks>2013-10-31 陶辉 创建</remarks> public void Handle(string postStr) { //封装请求类 var doc = new XmlDocument(); doc.LoadXml(postStr); var rootElement = doc.DocumentElement; var xml = new RequestXml() { ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText, FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText, CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText, MsgType = rootElement.SelectSingleNode("MsgType").InnerText }; if (xml.MsgType == "text") { xml.Content = rootElement.SelectSingleNode("Content").InnerText; } else if (xml.MsgType == "event") { var selectSingleNode = rootElement.SelectSingleNode("Event"); if (selectSingleNode != null) { xml.SubscribeEvent = selectSingleNode.InnerText; } } #region 收集微信消息 //switch (xml.MsgType) //{ // case "text": // xml.Content = rootElement.SelectSingleNode("Content").InnerText; // break; // case "location": // xml.Location_X = rootElement.SelectSingleNode("Location_X").InnerText; // xml.Location_Y = rootElement.SelectSingleNode("Location_Y").InnerText; // xml.Scale = rootElement.SelectSingleNode("Scale").InnerText; // xml.Label = rootElement.SelectSingleNode("Label").InnerText; // break; // case "image": // xml.PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText; // break; // case "event": // xml.SubscribeEvent = rootElement.SelectSingleNode("Event").InnerText; // break; //} #endregion //回复类型 Reply reply = null; if (xml.MsgType == "event") { Hyt.Util.Log.LogManager.Instance.WriteLog("事件"); reply = new SubscribeReply(); } else { if (xml.Content.IndexOf("防伪验证") >= 0) { reply = new CheckAuthenticityReply(); } else { //自动回复 reply = new AutoReply(); } } try { if (!string.IsNullOrEmpty(xml.Content)) { var question = new MkWeixinQuestion() { Messages = xml.Content, MessagesTime = DateTime.Now, ReplyerSysNo = 0, Status = (int)MarketingStatus.微信咨询消息状态.未读, Type = (int)MarketingStatus.微信咨询类型.咨询, WeixinId = xml.FromUserName, CustomerSysNo = 0 }; //question写入表 IMkWeixinQuestionDao.Instance.Create(question); } } catch (Exception) { //TODO: } reply.WriteBackMessage(xml); }
/// <summary> /// 回写自动回复结果 /// </summary> /// <param name="request">回写参数</param> /// <returns></returns> /// <remarks>2013-10-15 陶辉 创建</remarks> public override void WriteBackMessage(RequestXml request) { var list = WeChatBo.Instance.GetAutoReplys(request.Content); #region 构造数据 //var item1 = new MkWeixinKeywordsReply() //{ // ReplyType = (int)MarketingStatus.微信关键词回复类型.文本, // Content = "请稍等,待会给您回复。" //}; //var item2 = new MkWeixinKeywordsReply() //{ // ReplyType = (int)MarketingStatus.微信关键词回复类型.图文, // Title = "商城新品上市了,赶快下手吧", // Content = @"<div style='text-align:center'><img alt="" data-pinit='registered' src='http://image.huiyuanti.com/ckimages/20130422162706.jpg' /><p>新品上市了</p></div>", // Image = "http://image.huiyuanti.com/ckimages/20130422162714.jpg", // Hyperlink = "http://www.huiyuanti.com/Home/Announcement/19" //}; ////list.Add(item1); //list.Add(item2); #endregion #region 初始化数据 var xmls = list.Select((q, i) => new { str = q.ReplyType == (int)MarketingStatus.微信关键词回复类型.文本 ? #region 文本回复内容 string.Format(@"<xml> <ToUserName><![CDATA[{0}]]></ToUserName> <FromUserName><![CDATA[{1}]]></FromUserName> <CreateTime>{2}</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[{3}]]></Content> <FuncFlag>1</FuncFlag> </xml>", request.FromUserName, request.ToUserName, DateTime.Now.ToShortDateString(), q.Content) #endregion : #region 图文回复内容 string.Format(@"<xml> <ToUserName><![CDATA[{0}]]></ToUserName> <FromUserName><![CDATA[{1}]]></FromUserName> <CreateTime>{2}</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>1</ArticleCount> <Articles> <item> <Title><![CDATA[{3}]]></Title> <Description><![CDATA[{4}]]></Description> <PicUrl><![CDATA[{5}]]></PicUrl> <Url><![CDATA[{6}]]></Url> </item> </Articles> </xml>", request.FromUserName, request.ToUserName, DateTime.Now.ToShortDateString(), q.Title, q.Content, q.Image, q.Hyperlink) #endregion , content = q.Content }).ToList(); #endregion try { foreach (var xml in xmls) { System.Web.HttpContext.Current.Response.Write(xml.str); var answer = new MkWeixinQuestion() { Messages = xml.content, MessagesTime = DateTime.Now, ReplyerSysNo = 1, Status = (int)MarketingStatus.微信咨询消息状态.已读, Type = (int)MarketingStatus.微信咨询类型.回复, WeixinId = request.FromUserName, CustomerSysNo = 0 }; //answer写入表 IMkWeixinQuestionDao.Instance.Create(answer); break; } System.Web.HttpContext.Current.Response.End(); } catch (Exception) { //TODO: } }
/// <summary> /// 消息自动回复抽象方法 /// </summary> /// <param name="request">回复参数</param> /// <remarks>2013-10-15 陶辉 创建</remarks> public virtual void WriteBackMessage(RequestXml request) { }