ホームページ >WeChat アプレット >WeChatの開発 >asp.net WeChat でメッセージ応答を開発するためのヒント

asp.net WeChat でメッセージ応答を開発するためのヒント

高洛峰
高洛峰オリジナル
2017-03-10 14:45:281769ブラウズ

この記事では、asp.net WeChat 開発におけるメッセージ応答の関連内容を主に紹介します。必要な友人は参照してください。

一般の WeChat ユーザーがパブリック アカウントにメッセージを送信すると、WeChat サーバーは POST メッセージの XML データ パッケージを送信します。ユーザーが入力した URL。
ご注意ください:

  • 1. メッセージの重複を再試行する場合は、msgid を使用してメッセージを重複排除することをお勧めします。

  • 2. WeChat サーバーが 5 秒以内に応答を受信しない場合、接続を切断してリクエストを再開始し、合計 3 回再試行します。サーバーが 5 秒以内に処理して応答することを保証できない場合は、空の文字列で直接応答できます。WeChat サーバーはこれに対して何もせず、再試行も開始しません。詳細については、「メッセージの送信 - メッセージへの受動的な返信」を参照してください。

  • 3. より高いセキュリティを確保するために、開発者はパブリック プラットフォームの公式 Web サイトの開発者センターでメッセージ暗号化を設定できます。暗号化をオンにすると、ユーザーが送信するメッセージが暗号化され、公式アカウントによってユーザーに受動的に返信されるメッセージも暗号化する必要があります (ただし、カスタマー サービス インターフェイスなどの 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>

asp.net WeChat でメッセージ応答を開発するためのヒント

画像メッセージ

りー

asp.net WeChat でメッセージ応答を開発するためのヒント

音声メッセージ

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

asp.net WeChat でメッセージ応答を開発するためのヒント

音声認識を有効にした後、ユーザーが公式アカウントに音声を送信するたびに、 、WeChatは、音声メッセージ XML データ パケットに、認識フィールドを追加します (注: クライアント キャッシュのため、開発者は音声認識機能をオンまたはオフにします。この機能は、新しいフォロワーにはすぐに有効になりますが、すでにフォローしているユーザーには 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>
<MsgId>1234567890123456</MsgId>
</xml>

追加フィールドの Format は音声形式 (通常は amr)、Recognition は UTF8 エンコーディングを使用した音声認識結果です。

ビデオメッセージ

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

小さなビデオメッセージasp.net WeChat でメッセージ応答を開発するためのヒント


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

asp.net WeChat でメッセージ応答を開発するためのヒント 位置メッセージ


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

asp.net WeChat でメッセージ応答を開発するためのヒントリンクメッセージ


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

asp.net WeChat でメッセージ応答を開発するためのヒント

前回の記事に引き続き、メソッドは次のとおりですasp.net WeChat でメッセージ応答を開発するためのヒント


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

;

音声認識機能は次のようにオンになります:

 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。