C#微信开发之旅--基本信息的回复

上一篇说到配置和验证《C#微信开发之旅--准备阶段

下面来实现一下简单的信息回复。

也就是接收XML,返回XML

可以去看下微信开发文档的说明:http://mp.weixin.qq.com/wiki/10/79502792eef98d6e0c6e1739da387346.html

 

根据请求的信息类型,创建了一个信息请求类:(忘记从哪里拷贝过来的了)

//微信请求类
    public class RequestXML
    {
        private String toUserName = String.Empty;

        /// <summary>
        /// 公众号
        /// </summary>
        public String ToUserName
        {
            get { return toUserName; }
            set { toUserName = value; }
        }

        private String fromUserName = "";

        /// <summary>
        /// 发送方微信号
        /// </summary>
        public String FromUserName
        {
            get { return fromUserName; }
            set { fromUserName = value; }
        }

        private String createTime = String.Empty;

        /// <summary>
        /// 创建时间
        /// </summary>
        public String CreateTime
        {
            get { return createTime; }
            set { createTime = value; }
        }

        private String msgType = String.Empty;

        /// <summary>
        /// 信息类型 地理位置:location,文本消息:text,消息类型:image
        /// </summary>
        public String MsgType
        {
            get { return msgType; }
            set { msgType = value; }
        }

        private String content = String.Empty;

        /// <summary>
        /// 信息内容
        /// </summary>
        public String Content
        {
            get { return content; }
            set { content = value; }
        }

        private String location_X = String.Empty;

        /// <summary>
        /// 地理位置纬度
        /// </summary>
        public String Location_X
        {
            get { return location_X; }
            set { location_X = value; }
        }

        private String location_Y = String.Empty;

        /// <summary>
        /// 地理位置经度
        /// </summary>
        public String Location_Y
        {
            get { return location_Y; }
            set { location_Y = value; }
        }

        private String scale = String.Empty;

        /// <summary>
        /// 地图缩放大小
        /// </summary>
        public String Scale
        {
            get { return scale; }
            set { scale = value; }
        }

        private String mapInfo = String.Empty;

        /// <summary>
        /// 地理位置信息
        /// </summary>
        public String MapInfo
        {
            get { return mapInfo; }
            set { mapInfo = value; }
        }

        private String picUrl = String.Empty;

        /// <summary>
        /// 图片链接
        /// </summary>
        public String PicUrl
        {
            get { return picUrl; }
            set { picUrl = value; }
        }

        private String _event;
        /// <summary>
        /// 事件类型
        /// </summary>
        public String Event
        {
            get { return _event; }
            set { _event = value; }
        }

        private String eventKey;
        /// <summary>
        /// 事件key
        /// </summary>
        public String EventKey
        {
            get { return eventKey; }
            set { eventKey = value; }
        }
    }

 

1.我们接收XML信息,然后读取其中的信息保存到RequestXML中,然后根据请求类型,返回对应的信息

/// <summary>
        /// 接收信息
        /// </summary>
        /// <param name="postStr"></param>
        public void Handle(String postStr)
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(postStr);

            XmlElement rootElement = doc.DocumentElement;
            XmlNode MsgType = rootElement.SelectSingleNode("MsgType");

            RequestXML requestXML = new RequestXML();
            requestXML.ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText;
            requestXML.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText;
            requestXML.CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText;
            requestXML.MsgType = MsgType.InnerText;

            if (requestXML.MsgType == "text")
            {
                requestXML.Content = rootElement.SelectSingleNode("Content").InnerText;
            }

            else if (requestXML.MsgType == "location")
            {
                requestXML.Location_X = rootElement.SelectSingleNode("Location_X").InnerText;
                requestXML.Location_Y = rootElement.SelectSingleNode("Location_Y").InnerText;
                requestXML.Scale = rootElement.SelectSingleNode("Scale").InnerText;
                requestXML.MapInfo = rootElement.SelectSingleNode("Label").InnerText;
            }

            else if (requestXML.MsgType == "image")
            {
                requestXML.PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText;
            }
            else if (requestXML.MsgType == "event")//事件
            {
                requestXML.Event = rootElement.SelectSingleNode("Event").InnerText;
                if (requestXML.Event == "CLICK")//点击事件
                {
                    requestXML.EventKey = rootElement.SelectSingleNode("EventKey").InnerText;
                }
                else if (requestXML.Event == "subscribe")//订阅
                {
                }
            }

            ResponseMsg(requestXML);
        }

 上面已经处理好了请求信息,现在就要对请求作出回复,回复的信息格式也是XML。

具体也可以看下微信开发文档:http://mp.weixin.qq.com/wiki/14/89b871b5466b19b3efa4ada8e577d45e.html

现在就做一个简单的文本回复,就没有弄一个回复类。

/// <summary>
        /// 回复消息
        /// </summary>
        /// <param name="weixinXML"></param>
        private void ResponseMsg(RequestXML requestXML)
        {
            String responseContent = String.Empty;

            if (requestXML.MsgType == "text")//文本
            {
responseContent = FormatTextXML(requestXML.FromUserName, requestXML.ToUserName, "基本回复\r\n" + DateTime.Now.ToString() + "\r\n" + requestXML.FromUserName);
                }
        HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
            HttpContext.Current.Response.Write(responseContent);
        }

上面就是一个简单的文本回复,如果请求的信息是文本的话,我会返回一句话。FormatTextXML就是把封装要返回的XML。

因为我们在开发文档中可以看见,返回的文本信息的话,格式为:

 <xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>

所以FormatTextXML就这样写了:

/// <summary>
        /// 返回格式化文本XML内容
        /// </summary>
        /// <param name="fromUserName"></param>
        /// <param name="toUserName"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        private String FormatTextXML(String fromUserName, String toUserName, String content)
        {
            return "<xml><ToUserName><![CDATA[" + fromUserName + "]]></ToUserName><FromUserName><![CDATA[" + toUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[" + content + "]]></Content><FuncFlag>1</FuncFlag></xml>";
        }


 

这样一个简单的文本回复就弄好了! 你发送文本信息给公众号,就能得到一个回复了。

一点积累一点点!

posted @ 2015-03-26 15:38  新的开始Mark  阅读(627)  评论(1编辑  收藏  举报