1. 程式人生 > >關注微信公眾號

關注微信公眾號

1、 首先在微信公眾號平臺配置關注返回連結

2、 Post獲取微信公眾號返回的資料(返回是一個XML資料)

             Private string PostInput()

        {

            Stream

 s = System.Web.HttpContext.Current.Request.InputStream;

            byte[] b = new byte[s.Length];

            s.Read(b, 0, (int)s.Length);

            return

 Encoding.UTF8.GetString(b);

      }

3、 接受資訊的token類和填充方法

    Private class ExmlMsg

        {

            /// <summary>

            ///

 本公眾賬號

            /// </summary>

            public string ToUserName { getset; }

            /// <summary>

            /// 使用者賬號

            /// </summary>

            public string FromUserName { getset; }

            /// <summary>

            /// 傳送時間戳

            /// </summary>

            public string CreateTime { getset; }

            /// <summary>

            /// 傳送的文字內容

            /// </summary>

            public string Content { getset; }

            /// <summary>

            /// 訊息的型別

            /// </summary>

            public string MsgType { getset; }

            /// <summary>

            /// 事件名稱

            /// </summary>

            public string EventName { getset; }

 

        }

 

        private ExmlMsg GetExmlMsg(XmlElement root)

        {

            ExmlMsg xmlMsg = new ExmlMsg()

            {

                FromUserName = root.SelectSingleNode("FromUserName").InnerText,

                ToUserName = root.SelectSingleNode("ToUserName").InnerText,

                CreateTime = root.SelectSingleNode("CreateTime").InnerText,

                MsgType = root.SelectSingleNode("MsgType").InnerText,

            };

            if (xmlMsg.MsgType.Trim().ToLower() == "text")

            {

                xmlMsg.Content = root.SelectSingleNode("Content").InnerText;

            }

            else if (xmlMsg.MsgType.Trim().ToLower() == "event")

            {

                xmlMsg.EventName = root.SelectSingleNode("Event").InnerText;

            }

            return xmlMsg;

        }

4、 配置接受文字的資訊(這裡適用於XML資料)

      private void textCase(ExmlMsg xmlMsg)

        {

            int nowtime = ConvertDateTimeInt(DateTime.Now);

            string msg = "";

            msg = getText(xmlMsg);

            string resxml = "<xml><ToUserName><![CDATA[" + xmlMsg.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + xmlMsg.ToUserName + "]]></FromUserName><CreateTime>" + nowtime + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[" + msg + "]]></Content><FuncFlag>0</FuncFlag></xml>";

            Response.Write(resxml);

            return;

        }

5、 返回int的時間戳

        private int ConvertDateTimeInt(System.DateTime time)

        {

            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));

            return (int)(time - startTime).TotalSeconds;

        }

6、 實際在公眾號中返回的資訊

        private string getText(ExmlMsg xmlMsg)

        {

            System.Text.StringBuilder retsb = new StringBuilder(200);

            retsb.Append("感謝您關注本公眾號 ");

            return retsb.ToString();

        }

7、 最後post獲取資訊。找到當返回資訊中名稱為“subscribe”欄位的資料進行操作

  if (Request.HttpMethod.ToLower() == "post")

            {

                string postStr = "";

                postStr = PostInput();//獲取xml資料

                string weixin = "";

                weixin = postStr;//獲取xml資料

                if (!string.IsNullOrEmpty(postStr) && !string.IsNullOrEmpty(weixin))

                {

                    XmlDocument doc = new XmlDocument();

                    doc.LoadXml(weixin);//讀取xml字串

                    //公眾號發訊息

                    XmlElement root = doc.DocumentElement;

                    ExmlMsg xmlMsg = GetExmlMsg(root);

                    XmlNodeList list = doc.GetElementsByTagName("xml");

                    XmlNode xn = list[0];

                    if (xn.SelectSingleNode("//Event").InnerText == "subscribe")

                    {

                        textCase(xmlMsg);

                    }

                }

            }