public static string Handle(string message) { XElement xml = XElement.Parse(message); string messageType = xml.XPathSelectElement("MsgType").Value; if (String.IsNullOrEmpty(messageType)) { return(String.Empty); } _fromUserName = xml.XPathSelectElement("FromUserName").Value; //事件消息 if (messageType == "event") { string eventType = xml.XPathSelectElement("Event").Value; if (String.IsNullOrEmpty(eventType)) { return(String.Empty); } ResponsiveXMLMessage_TextMessage textMessage = new ResponsiveXMLMessage_TextMessage(); textMessage.Content = eventType + "from_callback"; textMessage.ToUserName = _fromUserName; textMessage.FromUserName = UserName; textMessage.CreateTime = WeixinApiHelper.ConvertDateTimeToInt(DateTime.Now); return(XMLMessageHelper.XmlSerialize(textMessage)); } //普通消息 else { string content = xml.XPathSelectElement("Content").Value; if (content == "TESTCOMPONENT_MSG_TYPE_TEXT") { ResponsiveXMLMessage_TextMessage textMessage = new ResponsiveXMLMessage_TextMessage(); textMessage.Content = "TESTCOMPONENT_MSG_TYPE_TEXT_callback"; textMessage.ToUserName = _fromUserName; textMessage.FromUserName = UserName; textMessage.CreateTime = WeixinApiHelper.ConvertDateTimeToInt(DateTime.Now); return(XMLMessageHelper.XmlSerialize(textMessage)); } else { _query_auth_code = content.Remove(0, "QUERY_AUTH_CODE:".Length); RequestApiResult <WeixinThirdPartyGetAuthorizationInfoResult> getAuthorizationInfo = ThirdPartyApiWrapper.GetAuthorizationInfo(_query_auth_code); _accessToken = getAuthorizationInfo.ApiResult.AuthorizationInfo.AccessToken; _timer = new System.Threading.Timer(SendKFMessage, null, 2 * 1000, 1 * 60 * 1000); return(null); } } }
protected string GetReplyTextMessage(DomainContext domainContext, string toUserName, string content) { ResponsiveXMLMessage_TextMessage replyMessage = new ResponsiveXMLMessage_TextMessage(); replyMessage.Content = content; replyMessage.ToUserName = toUserName; //这几个字段还是要的,因为当直接以HTTP返回的形式返回XML格式的数据时 //是要求这几个字段的 replyMessage.FromUserName = domainContext.UserName; replyMessage.CreateTime = WeixinApiHelper.ConvertDateTimeToInt(DateTime.Now); return(XMLMessageHelper.XmlSerialize(replyMessage)); }
//TODO:这里应该用 ResponsiveXMLMessage /// <summary> /// 获取XML版的回复消息 /// </summary> /// <param name="domainContext"></param> /// <param name="toUserName"></param> /// <param name="autoReply"></param> /// <returns></returns> public static ResponsiveXMLMessageBase GetXMLMessage(ClientDomainContext domainContext, string toUserName, IAutoReply autoReply) { if (autoReply == null) { return(null); } ResponsiveXMLMessageBase replyMessage = null; switch (autoReply.Type) { case EnumAutoReplyType.Text: //不能返回空白 Content 的XML给微信 API //否则它会在客户端提示该公众号暂时无法提供服务 if (String.IsNullOrEmpty(autoReply.Content) == false) { ResponsiveXMLMessage_TextMessage textMessage = new ResponsiveXMLMessage_TextMessage(); textMessage.Content = autoReply.Content; replyMessage = textMessage; } break; case EnumAutoReplyType.Image: if (String.IsNullOrEmpty(autoReply.MediaId) == false) { ResponsiveXMLMessage_ImageMessage imageMessage = new ResponsiveXMLMessage_ImageMessage(); imageMessage.Image.MediaId = autoReply.MediaId; replyMessage = imageMessage; } break; default: Debug.Assert(false, "GetXMLMessage 不支持的 AutoReplyOnKeyWordsRule.Type:" + autoReply.Type.ToString()); _log.Write("GetXMLMessage 不支持的 AutoReplyOnKeyWordsRule.Type:" + autoReply.Type.ToString(), domainContext.AutoReplyOnSubscribe.Type.ToString(), TraceEventType.Error); break; } if (replyMessage != null) { replyMessage.ToUserName = toUserName; //这几个字段还是要的,因为当直接以HTTP返回的形式返回XML格式的数据时 //是要求这几个字段的 replyMessage.FromUserName = domainContext.UserName; replyMessage.CreateTime = WeixinApiHelper.ConvertDateTimeToInt(DateTime.Now); } return(replyMessage); }