PageRenderTime 50ms CodeModel.GetById 23ms RepoModel.GetById 1ms app.codeStats 0ms

/Senparc.Weixin.MP.Sample/Senparc.Weixin.MP.Sample/Controllers/WeixinController_OldPost.cs

https://github.com/mjhuangzk/WeiXinMPSDK
C# | 136 lines | 117 code | 6 blank | 13 comment | 4 complexity | 0de22d7e46c66d5b0565bfe9d1e19609 MD5 | raw file
Possible License(s): BSD-2-Clause, BSD-3-Clause
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Web;
  7. using System.Web.Mvc;
  8. using System.Xml.Linq;
  9. using Senparc.Weixin.MP.MessageHandlers;
  10. using Senparc.Weixin.MP.Sample.CommonService;
  11. namespace Senparc.Weixin.MP.Sample.Controllers
  12. {
  13. using Senparc.Weixin.MP.Entities;
  14. using Senparc.Weixin.MP.Helpers;
  15. //using Senparc.Weixin.MP.Sample.Service;
  16. //using Senparc.Weixin.MP.Sample.CustomerMessageHandler;
  17. public partial class WeixinController : Controller
  18. {
  19. /// <summary>
  20. /// 用户发送消息后,微信平台自动Post一个请求到这里,并等待响应XML
  21. /// PS:此方法为常规switch判断方法,从v0.3.3版本起,此Demo不再更新
  22. /// </summary>
  23. [HttpPost]
  24. [ActionName("OldIndex")]
  25. public ActionResult OldPost(string signature, string timestamp, string nonce, string echostr)
  26. {
  27. LocationService locationService=new LocationService();
  28. EventService eventService= new EventService();
  29. if (!CheckSignature.Check(signature, timestamp, nonce, Token))
  30. {
  31. return Content("参数错误!");
  32. }
  33. XDocument requestDoc = null;
  34. try
  35. {
  36. requestDoc = XDocument.Load(Request.InputStream);
  37. var requestMessage = RequestMessageFactory.GetRequestEntity(requestDoc);
  38. //如果不需要记录requestDoc,只需要:
  39. //var requestMessage = RequestMessageFactory.GetRequestEntity(Request.InputStream);
  40. requestDoc.Save(Server.MapPath("~/App_Data/" + DateTime.Now.Ticks + "_Request_" + requestMessage.FromUserName + ".txt"));//测试时可开启,帮助跟踪数据
  41. ResponseMessageBase responseMessage = null;
  42. switch (requestMessage.MsgType)
  43. {
  44. case RequestMsgType.Text://文字
  45. {
  46. //TODO:交给Service处理具体信息,参考/Service/EventSercice.cs 及 /Service/LocationSercice.cs
  47. var strongRequestMessage = requestMessage as RequestMessageText;
  48. var strongresponseMessage =
  49. ResponseMessageBase.CreateFromRequestMessage(requestMessage, ResponseMsgType.Text) as
  50. ResponseMessageText;
  51. strongresponseMessage.Content =
  52. string.Format(
  53. "您刚才发送了文字信息:{0}\r\n您还可以发送【位置】【图片】【语音】等类型的信息,查看不同格式的回复。\r\nSDK官方地址:http://weixin.senparc.com",
  54. strongRequestMessage.Content);
  55. responseMessage = strongresponseMessage;
  56. break;
  57. }
  58. case RequestMsgType.Location://位置
  59. {
  60. responseMessage = locationService.GetResponseMessage(requestMessage as RequestMessageLocation);
  61. break;
  62. }
  63. case RequestMsgType.Image://图片
  64. {
  65. //TODO:交给Service处理具体信息
  66. var strongRequestMessage = requestMessage as RequestMessageImage;
  67. var strongresponseMessage =
  68. ResponseMessageBase.CreateFromRequestMessage(requestMessage, ResponseMsgType.News) as
  69. ResponseMessageNews;
  70. strongresponseMessage.Articles.Add(new Article()
  71. {
  72. Title = "您刚才发送了图片信息",
  73. Description = "您发送的图片将会显示在边上",
  74. PicUrl = strongRequestMessage.PicUrl,
  75. Url = "http://weixin.senparc.com"
  76. });
  77. strongresponseMessage.Articles.Add(new Article()
  78. {
  79. Title = "第二条",
  80. Description = "第二条带连接的内容",
  81. PicUrl = strongRequestMessage.PicUrl,
  82. Url = "http://weixin.senparc.com"
  83. });
  84. responseMessage = strongresponseMessage;
  85. break;
  86. }
  87. case RequestMsgType.Voice://语音
  88. {
  89. //TODO:交给Service处理具体信息
  90. var strongRequestMessage = requestMessage as RequestMessageVoice;
  91. var strongresponseMessage =
  92. ResponseMessageBase.CreateFromRequestMessage(requestMessage, ResponseMsgType.Music) as
  93. ResponseMessageMusic;
  94. strongresponseMessage.Music.MusicUrl = "http://weixin.senparc.com/Content/music1.mp3";
  95. responseMessage = strongresponseMessage;
  96. break;
  97. }
  98. case RequestMsgType.Event://事件
  99. {
  100. responseMessage = eventService.GetResponseMessage(requestMessage as RequestMessageEventBase);
  101. break;
  102. }
  103. default:
  104. throw new ArgumentOutOfRangeException();
  105. }
  106. var responseDoc = MP.Helpers.EntityHelper.ConvertEntityToXml(responseMessage);
  107. responseDoc.Save(Server.MapPath("~/App_Data/" + DateTime.Now.Ticks + "_Response_" + responseMessage.ToUserName + ".txt"));//测试时可开启,帮助跟踪数据
  108. return Content(responseDoc.ToString());
  109. //如果不需要记录responseDoc,只需要:
  110. //return Content(responseMessage.ConvertEntityToXmlString());
  111. }
  112. catch (Exception ex)
  113. {
  114. using (
  115. TextWriter tw = new StreamWriter(Server.MapPath("~/App_Data/Error_" + DateTime.Now.Ticks + ".txt")))
  116. {
  117. tw.WriteLine(ex.Message);
  118. tw.WriteLine(ex.InnerException.Message);
  119. if (requestDoc != null)
  120. {
  121. tw.WriteLine(requestDoc.ToString());
  122. }
  123. tw.Flush();
  124. tw.Close();
  125. }
  126. return Content("");
  127. }
  128. }
  129. }
  130. }