微信公衆號的開發之 回覆用戶消息和事件響應(四)

這裏的前提是你已經成功配置了公衆號的服務器接口信息,即微信公衆號的開發之 服務器配置(一)所說的內容,微信服務器和公衆號之間的溝通都通過這個地址,有且只有一個。


/// <summary>
        /// 微信推送地址
        /// </summary>
        /// <returns></returns>
        public string go()
        {
            string xml = "error";

            if (Request.QueryString["echostr"] != null)
            {
                //signature 驗證服務器地址的有效性
                string signature = Request.QueryString["signature"].ToString();
                string timestamp = Request.QueryString["timestamp"].ToString();
                string nonce = Request.QueryString["nonce"].ToString();
                string echostr = Request.QueryString["echostr"].ToString();
                xml = renzhen(signature, timestamp, nonce, echostr);
            }
            else
            {

                //推送消息和事件
                xml = ProcessRequest(HttpContext);

            }
            return xml;
        }

/// <summary>
        /// 回覆
        /// </summary>
        /// <param name="param_context"></param>
        /// <returns></returns>
        private string ProcessRequest(HttpContextBase param_context)
        {

            string postString = string.Empty;
            if (HttpContext.Request.HttpMethod.ToUpper() == "POST")
            {
                using (Stream stream = HttpContext.Request.InputStream)
                {
                    Byte[] postBytes = new Byte[stream.Length];
                    stream.Read(postBytes, 0, (Int32)stream.Length);
                    postString = Encoding.UTF8.GetString(postBytes);
                    return Responsexml(postString);
                }
            }
            return "error";
        }



 /// <summary>
        /// 處理信息並應答
        /// </summary>
        private string Responsexml(string postStr)
        {

            XmlDocument xml = new XmlDocument();
            xml.LoadXml(postStr);
            string responseContent = "";
            //開發者id
            XmlNode APPName = xml.SelectSingleNode("/xml/ToUserName");
            //用戶id
            XmlNode UserName = xml.SelectSingleNode("/xml/FromUserName");
            //內容
            XmlNode Content = xml.SelectSingleNode("/xml/Content");
            //消息類型
            XmlNode MsgType = xml.SelectSingleNode("/xml/MsgType");
            //事件類型
            XmlNode Event = xml.SelectSingleNode("/xml/Event");
            //菜單key
            XmlNode EventKey = xml.SelectSingleNode("/xml/EventKey");

            //回覆的內容
            string text = "";
            try
            {
              
                switch (MsgType.InnerText)
                {
                    //事件
                    case "event":
                        switch (Event.InnerText)
                        {
                            //關注
                            case "subscribe":
                                text = "歡迎關注";
                                break;
                            //case "unsubscribe":
                            //    text = "歡迎您下次關注";
                            //    break;
                            case "CLICK":
                              
                                switch (EventKey.InnerText)
                                {

                                    case "one":
                                        text = "你點擊的是菜單一";
                                        break;
                                    case "two":
                                      text = "你點擊的是菜單二";
                                        break;
                                    case "three":
                                        text = "你點擊的是菜單三";
                                        break;
                                    default:
                                        text = "";
                                        break;
                                }
                                break;

                            default:
                                break;
                        }
                        break;
                    case "text":
                        text = Content.InnerText;
                        break;

                }
                responseContent = string.Format(Message_Text,
                    UserName.InnerText,
                    APPName.InnerText,
                    DateTime.Now.Ticks,
                    text);
                return responseContent;
            }
            catch (Exception x)
            {
                return string.Format(Message_Text,
                     UserName.InnerText,
                     APPName.InnerText,
                     DateTime.Now.Ticks,
                     x.Message);
            }

        }

        /// <summary>
        /// 回覆普通文本消息
        /// </summary>
        private string Message_Text
        {
            get
            {
                return @"<xml>
                                <ToUserName><![CDATA[{0}]]></ToUserName>
                                <FromUserName><![CDATA[{1}]]></FromUserName>
                                <CreateTime>{2}</CreateTime>
                                <MsgType><![CDATA[text]]></MsgType>
                                <Content><![CDATA[{3}]]></Content>
                                <FuncFlag>0</FuncFlag>
                                </xml>";
            }
        }


這裏實現的功能是當用戶發送文本消息時,回覆一樣的消息,當用戶點擊自定義菜單時則回覆對應的菜單消息,這裏只針對文本消息,其他將出錯。

微信提示公衆號暫時無法提供服務。

出現這個錯誤的原因:

你沒有實現相對應的功能。

你的代碼出錯拋異常了,這個得好好檢查。

另外最簡單的可能就是你的服務器關機,微信訪問不到了。


目前這個星期就只學到了這麼多,還挺好玩的呢。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章