示例#1
0
        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);
                }
            }
        }
示例#2
0
        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));
        }
示例#3
0
        //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);
        }