asp.net微信开发消息应答方法的示例

这篇文章将为大家详细讲解有关asp.net微信开发消息应答方法的示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

创新互联的客户来自各行各业,为了共同目标,我们在工作上密切配合,从创业型小企业到企事业单位,感谢他们对我们的要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。专业领域包括网站设计、网站制作、电商网站开发、微信营销、系统平台开发。

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

请注意:

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

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

文本消息

 
  
 1348831860
 
 
 1234567890123456
 
参数描述
ToUserName开发者微信号
FromUserName发送方帐号(一个OpenID)
CreateTime消息创建时间 (整型)
MsgTypetext
Content文本消息内容
MsgId消息id,64位整型

图片消息

 
 
 
 1348831860
 
 
 
 1234567890123456
 
参数描述
ToUserName开发者微信号
FromUserName发送方帐号(一个OpenID)
CreateTime消息创建时间 (整型)
MsgTypeimage
PicUrl图片链接
MediaId图片消息媒体id,可以调用多媒体文件下载接口拉取数据。
MsgId消息id,64位整型

语音消息




1357290913



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

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




1357290913




1234567890123456

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

视频消息




1357290913



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

小视频消息




1357290913



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

地理位置消息




1351776360

23.134521
113.358803
20

1234567890123456
参数描述
ToUserName开发者微信号
FromUserName发送方帐号(一个OpenID)
CreateTime消息创建时间 (整型)
MsgTypelocation
Location_X地理位置维度
Location_Y地理位置经度
Scale地图缩放大小
Label地理位置信息
MsgId消息id,64位整型

链接消息




1351776360

<![CDATA[公众平台官网链接]]>


1234567890123456
参数描述
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微信开发消息应答方法的示例”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。


分享名称:asp.net微信开发消息应答方法的示例
路径分享:http://myzitong.com/article/pjiche.html