>위챗 애플릿 >위챗 개발 >asp.net WeChat에서 메시지 응답 개발을 위한 팁

asp.net WeChat에서 메시지 응답 개발을 위한 팁

高洛峰
高洛峰원래의
2017-03-10 14:45:281770검색

이 글은 asp.net WeChat 개발 시 메시지 응답 관련 내용을 주로 소개합니다. 필요한 친구가 참고할 수 있습니다.

일반 WeChat 사용자가 공개 계정에 메시지를 보내면 WeChat 서버가 해당 메시지를 게시합니다. 개발자가 입력한 URL에 메시지 XML 데이터 패키지를 추가합니다.
참고:

  • 1. 재시도 메시지 중복 제거의 경우 msgid 중복 제거를 사용하는 것이 좋습니다.

  • 2. WeChat 서버가 5초 이내에 응답을 받지 못하면 요청 연결을 끊고 다시 시작하여 총 3번을 다시 시도합니다. 서버가 5초 이내에 처리 및 응답을 보장할 수 없는 경우 빈 문자열로 직접 응답할 수 있습니다. WeChat 서버는 이에 대해 아무 작업도 수행하지 않으며 재시도를 시작하지 않습니다. 자세한 내용은 "메시지 보내기 - 메시지에 수동 응답"을 참조하세요.

  • 3. 개발자는 더 높은 보안을 보장하기 위해 공개 플랫폼 공식 웹사이트의 개발자 센터에서 메시지 암호화를 설정할 수 있습니다. 암호화가 활성화된 후에는 사용자가 보낸 메시지가 암호화되며, 공식 계정에서 사용자에게 수동적으로 답장한 메시지도 암호화되어야 합니다. (단, 고객 서비스 인터페이스와 같은 API 호출을 통해 사용자에게 메시지를 보내는 개발자는 영향을 받지 않습니다.) 메시지 암호화 및 암호 해독에 대한 자세한 지침은 "메시지 암호화 및 암호 해독 지침"을 참조하세요.

메시지 유형별 푸시 XML 패킷 구조는 다음과 같습니다.
문자 메시지

아아아아

asp.net WeChat에서 메시지 응답 개발을 위한 팁

사진 메시지

아아아아

asp.net WeChat에서 메시지 응답 개발을 위한 팁

음성메시지

 <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>

asp.net WeChat에서 메시지 응답 개발을 위한 팁

음성 인식을 활성화한 후 사용자가 음성을 보낼 때마다 공식 계정에서 WeChat은 푸시된 음성 메시지 XML 패킷에 인식 필드를 추가합니다. (참고: 클라이언트 캐싱으로 인해 개발자는 음성 인식 기능을 활성화 또는 비활성화합니다. 이 기능은 새로운 팔로워에게는 즉시 적용되고 이미 팔로우한 사용자에게는 24시간이 소요됩니다. . 개발 사용자는 테스트를 위해 이 계정을 다시 팔로우할 수 있습니다. 음성 인식을 활성화한 후의 음성 XML 데이터 패킷은 다음과 같습니다.

<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>

추가 필드에서 Format은 음성 형식(일반적으로 amr)이며 인식은 음성 인식 결과가 UTF8을 사용하여 인코딩됩니다.
영상편지

아아앙

asp.net WeChat에서 메시지 응답 개발을 위한 팁

작은 영상 메시지

아아앙

asp.net WeChat에서 메시지 응답 개발을 위한 팁

위치 메시지

rreee

asp.net WeChat에서 메시지 응답 개발을 위한 팁

링크 메시지

<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>

asp.net WeChat에서 메시지 응답 개발을 위한 팁

asp.net WeChat에서 메시지 응답 개발을 위한 팁

이전 글에 이어 ResponseXML(postString)을 참고하세요.


rreee

음성인식 기능은 다음과 같이 켜집니다.

 asp.net WeChat에서 메시지 응답 개발을 위한 팁

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


 /// <summary>
 /// 接收消息的实体类
 /// </summary>
 public class RequestXML
 {
 private String toUserName = String.Empty;

 /// <summary>
 /// 本公众号
 /// </summary>
 public String ToUserName{get;set;}

 /// <summary>
 /// 用户微信号
 /// </summary>
 public String FromUserName{get;set;}

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

 /// <summary>
 /// 信息类型 
 /// </summary>
 public String MsgType{get;set;}

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

 

 /*以下为事件类型的消息特有的属性*/
 /// <summary>
 /// 事件名称
 /// </summary>
 public String EventName{get;set;}
 /// <summary>
 /// 事件值
 /// </summary>
 public string EventKey { get; set; }

 


 /*以下为图文类型的消息特有的属性*/
 /// <summary>
 /// 图文消息的个数
 /// </summary>
 public int ArticleCount { get; set; }
 /// <summary>
 /// 图文消息的标题
 /// </summary>
 public string Title { get; set; }
 /// <summary>
 /// 图文消息的简介
 /// </summary>
 public string Description { get; set; }
 /// <summary>
 /// 图文消息图片的链接地址
 /// </summary>
 public string PicUrl { get; set; }
 /// <summary>
 /// 图文消息详情链接地址
 /// </summary>
 public string Url { get; set; }
 /// <summary>
 /// 图文消息集合
 /// </summary>
 public List<RequestXML> Articles { get; set;}

 

 /*以下为地理位置类型的消息特有的属性*/
 /// <summary>
 /// 地理位置纬度
 /// </summary>
 public String Location_X { get; set; }

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

 /// <summary>
 /// 地图缩放比例
 /// </summary>
 public String Scale { get; set; }

 /// <summary>
 /// 地图位置说明
 /// </summary>
 public String Label { get; set; }

   /// <summary>
 /// 语音消息特有字段
 /// </summary>
 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);//发送文本消息

 /// <summary>
 /// 发送文本
 /// </summary>
 /// <param name="requestXML"></param>
 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方法制定格式

 

 /// <summary>
 /// 返回格式化的Xml格式内容
 /// </summary>
 /// <param name="p1">公众号</param>
 /// <param name="p2">用户号</param>
 /// <param name="p3">回复内容</param>
 /// <returns></returns>
 private string FormatTextXML(string p1, string p2, string p3)
 {
 return "<xml><ToUserName><![CDATA[" + p1 + "]]></ToUserName><FromUserName><![CDATA[" + p2 + "]]></FromUserName><CreateTime>" + DateTime.Now.Subtract(new DateTime(1970, 1, 1, 8, 0, 0)).TotalSeconds.ToString() + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[" + p3 + "]]></Content><FuncFlag>1</FuncFlag></xml>";
 }

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


 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;

 /// <summary>
 /// 发送响应事件消息
 /// </summary>
 /// <param name="requestXML"></param>
 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);//关注时返回的图文消息

 /// <summary>
 /// 发送关注时的图文消息
 /// </summary>
 /// <param name="requestXML"></param>
 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是图文消息格式化

 /// <summary>
 /// 返回图文消息主体
 /// </summary>
 public static string Message_News_Main
 {
 get
 {
 return @"<xml>
  <ToUserName><![CDATA[{0}]]></ToUserName>
  <FromUserName><![CDATA[{1}]]></FromUserName>
  <CreateTime>{2}</CreateTime>
  <MsgType><![CDATA[news]]></MsgType>
  <ArticleCount>{3}</ArticleCount>
  <Articles>
  {4}
  </Articles>
  </xml> ";
 }
 }
 /// <summary>
 /// 返回图文消息项
 /// </summary>
 public static string Message_News_Item
 {
 get
 {
 return @"<item>
  <Title><![CDATA[{0}]]></Title> 
  <Description><![CDATA[{1}]]></Description>
  <PicUrl><![CDATA[{2}]]></PicUrl>
  <Url><![CDATA[{3}]]></Url>
  </item>";
 }
 }

 /// <summary>
 /// 发送响应语音识别结果
 /// </summary>
 /// <param name="requestXML"></param>
 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 WeChat에서 메시지 응답 개발을 위한 팁

asp.net WeChat에서 메시지 응답 개발을 위한 팁


위 내용은 asp.net WeChat에서 메시지 응답 개발을 위한 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.