zoukankan      html  css  js  c++  java
  • 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, "基本回复
    " + DateTime.Now.ToString() + "
    " + 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>";
            }


     

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

    一点积累一点点!

  • 相关阅读:
    [golang]golang signal.Notify 信号,如何优雅的退出
    解密
    [财务][数据化分析][帆软]报表设计-数据分析(op=view)
    [财务][数据化分析][帆软]报表设计-填报预览
    [财务][数据化分析][帆软]如何量化你的用户价值?RFM模型综合实战
    [数据分析][RFM模型]用数据分析用户
    [帆软][内网穿透][LanProxy]蛋疼的网络架构探讨
    [财务][数据化分析][帆软]报表设计-分页预览
    [财务][数据化分析][帆软]报表设计-模板预览
    [财务][数据化分析][帆软]报表设计-聚合报表设计
  • 原文地址:https://www.cnblogs.com/yangbh/p/4368980.html
Copyright © 2011-2022 走看看