PageRenderTime 44ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/Senparc.Weixin.MP/Senparc.Weixin.MP/ResponseMessageFactory.cs

https://github.com/mjhuangzk/WeiXinMPSDK
C# | 72 lines | 46 code | 5 blank | 21 comment | 1 complexity | 371da8af9ee1e49174ee6cfab9b59a7d MD5 | raw file
Possible License(s): BSD-2-Clause, BSD-3-Clause
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Xml.Linq;
  6. namespace Senparc.Weixin.MP
  7. {
  8. using Senparc.Weixin.MP.Entities;
  9. using Senparc.Weixin.MP.Helpers;
  10. public static class ResponseMessageFactory
  11. {
  12. //<?xml version="1.0" encoding="utf-8"?>
  13. //<xml>
  14. // <ToUserName><![CDATA[olPjZjsXuQPJoV0HlruZkNzKc91E]]></ToUserName>
  15. // <FromUserName><![CDATA[gh_a96a4a619366]]></FromUserName>
  16. // <CreateTime>63497820384</CreateTime>
  17. // <MsgType>text</MsgType>
  18. // <Content><![CDATA[您刚才发送了文字信息:中文
  19. //您还可以发送【位置】【图片】【语音】信息,查看不同格式的回复。
  20. //SDK官方地址:http://weixin.senparc.com]]></Content>
  21. // <FuncFlag>0</FuncFlag>
  22. //</xml>
  23. /// <summary>
  24. /// 获取XDocument转换后的IResponseMessageBase实例(通常在反向读取日志的时候用到)。
  25. /// 如果MsgType不存在,抛出UnknownRequestMsgTypeException异常
  26. /// </summary>
  27. /// <returns></returns>
  28. public static IResponseMessageBase GetResponseEntity(XDocument doc)
  29. {
  30. ResponseMessageBase responseMessage = null;
  31. ResponseMsgType msgType;
  32. try
  33. {
  34. msgType = MsgTypeHelper.GetResponseMsgType(doc);
  35. switch (msgType)
  36. {
  37. case ResponseMsgType.Text:
  38. responseMessage=new ResponseMessageText();
  39. break;
  40. case ResponseMsgType.News:
  41. responseMessage=new ResponseMessageNews();
  42. break;
  43. case ResponseMsgType.Music:
  44. responseMessage=new ResponseMessageMusic();
  45. break;
  46. default:
  47. throw new UnknownRequestMsgTypeException(string.Format("MsgType:{0} 在ResponseMessageFactory中没有对应的处理程序!", msgType), new ArgumentOutOfRangeException());
  48. }
  49. EntityHelper.FillEntityWithXml(responseMessage, doc);
  50. }
  51. catch (ArgumentException ex)
  52. {
  53. throw new WeixinException(string.Format("ResponseMessage转换出错!可能是MsgType不存在!,XML:{0}", doc.ToString()), ex);
  54. }
  55. return responseMessage;
  56. }
  57. /// <summary>
  58. /// 获取XDocument转换后的IRequestMessageBase实例。
  59. /// 如果MsgType不存在,抛出UnknownRequestMsgTypeException异常
  60. /// </summary>
  61. /// <returns></returns>
  62. public static IResponseMessageBase GetResponseEntity(string xml)
  63. {
  64. return GetResponseEntity(XDocument.Parse(xml));
  65. }
  66. }
  67. }