关注微信公众号

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);

                    }

                }

            }

猜你喜欢

转载自blog.csdn.net/weixin_37948260/article/details/82620903