搜索
首页微信小程序微信开发详解asp.net微信开发消息应答方法

当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。

请注意:

1、关于重试的消息排重,推荐使用msgid排重。
2、微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。详情请见“发送消息-被动回复消息”。
3、为了保证更高的安全保障,开发者可以在公众平台官网的开发者中心处设置消息加密。开启加密后,用户发来的消息会被加密,公众号被动回复用户的消息也需要加密(但开发者通过客服接口等API调用形式向用户发送消息,则不受影响)。关于消息加解密的详细说明,请见“消息加解密说明”。

各消息类型的推送XML数据包结构如下:

 

文本消息

 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName> 
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[this is a test]]></Content>
 <MsgId>1234567890123456</MsgId>
 </xml>
参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType text
Content 文本消息内容
MsgId 消息id,64位整型

图片消息

 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName>
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[image]]></MsgType>
 <PicUrl><![CDATA[this is a url]]></PicUrl>
 <MediaId><![CDATA[media_id]]></MediaId>
 <MsgId>1234567890123456</MsgId>
 </xml>
参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType image
PicUrl 图片链接
MediaId 图片消息媒体id,可以调用多媒体文件下载接口拉取数据。
MsgId 消息id,64位整型

语音消息

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<Format><![CDATA[Format]]></Format>
<MsgId>1234567890123456</MsgId>
</xml>
参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType 语音为voice
MediaId 语音消息媒体id,可以调用多媒体文件下载接口拉取数据。
Format 语音格式,如amr,speex等
MsgID 消息id,64位整型

请注意,开通语音识别后,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recongnition字段 (注:由于客户端缓存,开发者开启或者关闭语音识别功能,对新关注者立刻生效,对已关注用户需要24小时生效。开发者可以重新关注此帐号进行测试)。开启 语音识别后的语音XML数据包如下:

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<Format><![CDATA[Format]]></Format>
<Recognition><![CDATA[腾讯微信团队]]></Recognition>
<MsgId>1234567890123456</MsgId>
</xml>

多出的字段中,Format为语音格式,一般为amr,Recognition为语音识别结果,使用UTF8编码。

视频消息

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[video]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId>
<MsgId>1234567890123456</MsgId>
</xml>
参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType 视频为video
MediaId 视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
ThumbMediaId 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。
MsgId 消息id,64位整型

小视频消息

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[shortvideo]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId>
<MsgId>1234567890123456</MsgId>
</xml>
参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType 小视频为shortvideo
MediaId 视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
ThumbMediaId 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。
MsgId 消息id,64位整型

地理位置消息

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1351776360</CreateTime>
<MsgType><![CDATA[location]]></MsgType>
<Location_X>23.134521</Location_X>
<Location_Y>113.358803</Location_Y>
<Scale>20</Scale>
<Label><![CDATA[位置信息]]></Label>
<MsgId>1234567890123456</MsgId>
</xml>
参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType location
Location_X 地理位置维度
Location_Y 地理位置经度
Scale 地图缩放大小
Label 地理位置信息
MsgId 消息id,64位整型

链接消息

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1351776360</CreateTime>
<MsgType><![CDATA[link]]></MsgType>
<Title><![CDATA[公众平台官网链接]]></Title>
<Description><![CDATA[公众平台官网链接]]></Description>
<Url><![CDATA[url]]></Url>
<MsgId>1234567890123456</MsgId>
</xml>
参数 描述
ToUserName 接收方微信号
FromUserName 发送方微信号,若为普通用户,则是一个OpenID
CreateTime 消息创建时间
MsgType 消息类型,link
Title 消息标题
Description 消息描述
Url 消息链接
MsgId

消息id,64位整型

详解asp.net微信开发消息应答方法

接上篇,看ResponseXML(postString);方法如下

  ///


        /// 获取用户发送的消息
        ///

        ///
        private void ResponseXML(string postString)
        {
            //使用XMLDocument加载信息结构                     
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(postString);
            XmlElement rootElement = xmlDoc.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;
            }
            if (requestXML.MsgType.Trim() == "location")
            {
                ///赋值地理位置纬度,经度,地图缩放比例,地理位置说明
                requestXML.Location_X = rootElement.SelectSingleNode("Location_X").InnerText;
                requestXML.Location_Y = rootElement.SelectSingleNode("Location_Y").InnerText;
                requestXML.Scale = rootElement.SelectSingleNode("Scale").InnerText;
                requestXML.Label = rootElement.SelectSingleNode("Label").InnerText;
            }
            if (requestXML.MsgType.Trim().ToLower() == "event")
            {
                ///赋值事件名称和事件key值
                requestXML.EventName = rootElement.SelectSingleNode("Event").InnerText;
                requestXML.EventKey = rootElement.SelectSingleNode("EventKey").InnerText;
            }

      if (requestXML.MsgType.Trim().ToLower() == "voice")
            {
                ///赋值语音识别结果,赋值之前一定要记得在开发者模式下,把语音识别功能开启,否则获取不到
                requestXML.Recognition = rootElement.SelectSingleNode("Recognition").InnerText;
            }
            ResponseMsg(requestXML);

}

 语音识别功能开启如下:

详解asp.net微信开发消息应答方法

requestXML是我单独创建的一个类,该类声明了消息中常用的属性字段,如下:

 ///


    /// 接收消息的实体类
    ///

    public class RequestXML
    {
        private String toUserName = String.Empty;
        ///
        /// 本公众号
        ///

        public String ToUserName{get;set;}
        ///
        /// 用户微信号
        ///

        public String FromUserName{get;set;}
        ///
        /// 创建时间
        ///

        public String CreateTime{get;set;}
        ///
        /// 信息类型
        ///

        public String MsgType{get;set;}
        ///
        /// 信息内容
        ///

        public String Content{get;set;}
        /*以下为事件类型的消息特有的属性*/
        ///
        /// 事件名称
        ///

        public String EventName{get;set;}
        ///
        /// 事件值
        ///

        public string EventKey { get; set; }
        /*以下为图文类型的消息特有的属性*/
        ///
        /// 图文消息的个数
        ///

        public int ArticleCount { get; set; }
        ///
        /// 图文消息的标题
        ///

        public string Title { get; set; }
        ///
        /// 图文消息的简介
        ///

        public string Description { get; set; }
        ///
        /// 图文消息图片的链接地址
        ///

        public string PicUrl { get; set; }
        ///
        /// 图文消息详情链接地址
        ///

        public string Url { get; set; }
        ///
        /// 图文消息集合
        ///

        public List Articles { get; set;}
        /*以下为地理位置类型的消息特有的属性*/
        ///
        /// 地理位置纬度
        ///

        public String Location_X { get; set; }
        ///
        /// 地理位置经度
        ///

        public String Location_Y { get; set; }
        ///
        /// 地图缩放比例
        ///

        public String Scale { get; set; }
        ///
        /// 地图位置说明
        ///

        public String Label { get; set; }

    ///


        /// 语音消息特有字段
        ///

        public String Recognition { get; set; }


     
    }

继续关注  ResponseMsg(requestXML);方法如下,

 private void ResponseMsg(RequestXML requestXML)
        {
            string MsgType = requestXML.MsgType;
            try
            {
                //根据消息类型判断发送何种类型消息
                switch (MsgType)
                {
                    case "text":
                        SendTextCase(requestXML);//发送文本消息
                        break;
                    case "event"://发送事件消息
                        if (!string.IsNullOrWhiteSpace(requestXML.EventName) && requestXML.EventName.ToString().Trim().Equals("subscribe"))
                        {
                            SendWelComeMsg(requestXML);//关注时返回的图文消息
                        }
                        else if (!string.IsNullOrWhiteSpace(requestXML.EventName) && requestXML.EventName.ToString().Trim().Equals("CLICK"))
                        {
                            SendEventMsg(requestXML);//发送事件消息
                        }
                        break;

         case "voice":
                        SendVoiceMsg(requestXML);//发送语音消息
                        break;
                    case "location"://发送位置消息
                        SendMapMsg(requestXML);
                        break;
                    default:
                        break;
                }
            }
            catch (Exception ex)
            {
                HttpContext.Current.Response.Write(ex.ToString());
            }
        }

先来关注发送文本消息,SendTextCase(requestXML);//发送文本消息

 ///


        /// 发送文本
        ///

        ///
        private void SendTextCase(RequestXML requestXML)
        {
                    string responseContent = FormatTextXML(requestXML.FromUserName, requestXML.ToUserName, requestXML.Content);
                    HttpContext.Current.Response.ContentType = "text/xml";
                    HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
                    HttpContext.Current.Response.Write(responseContent);
                    HttpContext.Current.Response.End();
        }

FormatTextXML方法制定格式

  ///


        /// 返回格式化的Xml格式内容
        ///

        /// 公众号
        /// 用户号
        /// 回复内容
        ///
        private string FormatTextXML(string p1, string p2, string p3)
        {
            return "" + DateTime.Now.Subtract(new DateTime(1970, 1, 1, 8, 0, 0)).TotalSeconds.ToString() + "1";
        }

这样就能实现消息的应答,如果用户点击的按钮,如下代码:

    case "event"://发送事件消息
                        if (!string.IsNullOrWhiteSpace(requestXML.EventName) && requestXML.EventName.ToString().Trim().Equals("subscribe"))
                        {
                            SendWelComeMsg(requestXML);//关注时返回的图文消息
                        }
                        else if (!string.IsNullOrWhiteSpace(requestXML.EventName) && requestXML.EventName.ToString().Trim().Equals("CLICK"))
                        {
                            SendEventMsg(requestXML);//发送事件消息
                        }
                        break;

 ///


        /// 发送响应事件消息
        ///

        ///
        private void SendEventMsg(RequestXML requestXML)
        {
            string keyStr = requestXML.EventKey.ToString();
            switch (keyStr)
            {
                case "mypay":
                    SendPayDetails(requestXML);//发送薪资账单
                    break;
                case "tianqiyubao":
                    SendWeaterMessage(requestXML);//发送天气预报
                    break;
                case "kaixinyixiao":
                    SendKaiXinMessage(requestXML);//发送开心一笑结果集
                    break;
                case  "updateMessage":
                    SendUpdateMessage(requestXML);//发送修改信息链接
                    break;
                case "yuangonghuodong":
                    SendYuanGongHuoDong(requestXML);//发送学生活动
                    break;
                case "yuangongtongzhi":
                    SendYuanGongTongZhi(requestXML);//发送员工通知
                    break;
                case "youwenbida":
                    SendWenti(requestXML);//发送员工提交问题链接
                    break;
               case "mywen":
                    SendWentiList(requestXML);//发送问题列表链接
                    break;
               case "PhoneSerices":
                    SendKeFuMessage(requestXML);//接入客服
                    break;
                default:
                    String responseContent = String.Empty;
                    responseContent = FormatTextXML(requestXML.FromUserName, requestXML.ToUserName,"此功能暂未开放!敬请期待!");
                    HttpContext.Current.Response.ContentType = "text/xml";
                    HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
                    HttpContext.Current.Response.Write(responseContent);
                    HttpContext.Current.Response.End();
                    break;
            }
        }

SendWelComeMsg(requestXML);//关注时返回的图文消息

  ///


        /// 发送关注时的图文消息
        ///

        ///
        private void SendWelComeMsg(RequestXML requestXML)
        {
            String responseContent = String.Empty;
            string newdate = DateTime.Now.Subtract(new DateTime(1970, 1, 1, 8, 0, 0)).TotalSeconds.ToString();
            string PUrlfileName = "http://www.deqiaohr.com.cn/weixin/welcome.jpg";
            responseContent = string.Format(Message_News_Main, requestXML.FromUserName, requestXML.ToUserName, newdate, "1",
                string.Format(Message_News_Item, "欢迎关注德桥员工服务中心", "苏州德桥人力资源创立于2002年...", PUrlfileName, "http://www.deqiaohr.com.cn/weixin/WxGsjianjie.aspx"));
            HttpContext.Current.Response.ContentType = "text/xml";
            HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
            HttpContext.Current.Response.Write(responseContent);
            HttpContext.Current.Response.End();
        }

Message_News_Main 和Message_News_Item是图文消息格式化

  ///


        /// 返回图文消息主体
        ///

        public static string Message_News_Main
        {
            get
            {
                return @"
                           
                           
                            {2}
                            
                             {3}
                            
                             {4}
                          

                          
";
            }
        }
        ///
        /// 返回图文消息项
        ///

        public static string Message_News_Item
        {
            get
            {
                return @"
                            <![CDATA[{0}]]>
                           
                           
                           
                           
";
            }
        }

   ///


        /// 发送响应语音识别结果
        ///

        ///
        private void SendVoiceMsg(RequestXML requestXML)
        {
            string responseContent = FormatTextXML(requestXML.FromUserName, requestXML.ToUserName, "您刚才说的语音消息识别结果为:" + requestXML.Recognition.ToString());
            HttpContext.Current.Response.ContentType = "text/xml";
            HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
            HttpContext.Current.Response.Write(responseContent);
            HttpContext.Current.Response.End();
        }

详解asp.net微信开发消息应答方法详解asp.net微信开发消息应答方法详解asp.net微信开发消息应答方法

点击查看全文,直接跳转至自己写的网页,关于网页图片自适应的问题,把图片的宽度设置为100%,即可,如果让网页在屏幕中自适应,记得在网页中一定要添加

以上是详解asp.net微信开发消息应答方法的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。