asp.net微信开发消息应答的技巧有哪些

这篇文章主要为大家展示了“asp.net微信开发消息应答的技巧有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“asp.net微信开发消息应答的技巧有哪些”这篇文章吧。

我们提供的服务有:成都网站制作、成都网站建设、微信公众号开发、网站优化、网站认证、荔浦ssl等。为上千多家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的荔浦网站制作公司

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

  • 1、关于重试的消息排重,推荐使用msgid排重。

  • 2、微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。详情请见“发送消息-被动回复消息”。

  • 3、为了保证更高的安全保障,开发者可以在公众平台官网的开发者中心处设置消息加密。开启加密后,用户发来的消息会被加密,公众号被动回复用户的消息也需要加密(但开发者通过客服接口等API调用形式向用户发送消息,则不受影响)。关于消息加解密的详细说明,请见“消息加解密说明”。

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

 
 
  
 1348831860
 
 
 1234567890123456
 

asp.net微信开发消息应答的技巧有哪些

 图片消息


 
 
 1348831860
 
 
 
 1234567890123456
 

asp.net微信开发消息应答的技巧有哪些

语音消息




1357290913



1234567890123456

asp.net微信开发消息应答的技巧有哪些

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




1357290913




1234567890123456

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




1357290913



1234567890123456

asp.net微信开发消息应答的技巧有哪些

小视频消息




1357290913



1234567890123456

asp.net微信开发消息应答的技巧有哪些

地理位置消息




1351776360

23.134521
113.358803
20

1234567890123456

asp.net微信开发消息应答的技巧有哪些

链接消息




1351776360

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


1234567890123456

asp.net微信开发消息应答的技巧有哪些

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微信开发消息应答的技巧有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


网站名称:asp.net微信开发消息应答的技巧有哪些
当前地址:http://scyanting.com/article/pciesp.html