ReplayPassiveMessageAPI.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. /*--------------------------------------------------------------------------
  2. * ReplayPassiveMessageAPI.cs
  3. *Auth:deepleo
  4. * Date:2015.01.15
  5. * Email:2586662969@qq.com
  6. * Website:http://www.weixinsdk.net
  7. *--------------------------------------------------------------------------*/
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text;
  12. using LYFZ.Weixin.SDK.Entities;
  13. using LYFZ.Weixin.SDK.Helpers;
  14. namespace LYFZ.Weixin.SDK
  15. {
  16. /// <summary>
  17. /// 发送被动响应消息
  18. /// 注意:
  19. /// 1.回复图片等多媒体消息时需要预先上传多媒体文件到微信服务器,只支持认证服务号。
  20. /// 2.微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次,如果在调试中,发现用户无法收到响应的消息,可以检查是否消息处理超时。
  21. /// 3.假如服务器无法保证在五秒内处理并回复,必须直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。。这种情况下,可以使用客服消息接口进行异步回复。
  22. /// http://mp.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E9%80%81%E8%A2%AB%E5%8A%A8%E5%93%8D%E5%BA%94%E6%B6%88%E6%81%AF
  23. /// </summary>
  24. public class ReplayPassiveMessageAPI
  25. {
  26. /// <summary>
  27. /// 回复转到多客服消息
  28. /// </summary>
  29. /// <param name="toUserName"></param>
  30. /// <param name="fromUserName"></param>
  31. /// <returns></returns>
  32. public static string TransmitService(string toUserName, string fromUserName)
  33. {
  34. return string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName>" +
  35. "<FromUserName><![CDATA[{1}]]></FromUserName>" +
  36. "<CreateTime>{2}</CreateTime>" +
  37. "<MsgType><![CDATA[transfer_customer_service]]></MsgType></xml>",
  38. toUserName, fromUserName, Util.CreateTimestamp());
  39. }
  40. /// <summary>
  41. /// 回复文本消息
  42. /// </summary>
  43. /// <param name="toUserName"></param>
  44. /// <param name="fromUserName"></param>
  45. /// <param name="content"></param>
  46. /// <returns></returns>
  47. public static string RepayText(string toUserName, string fromUserName, string content)
  48. {
  49. return string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName>" +
  50. "<FromUserName><![CDATA[{1}]]></FromUserName>" +
  51. "<CreateTime>{2}</CreateTime>" +
  52. "<MsgType><![CDATA[text]]></MsgType>" +
  53. "<Content><![CDATA[{3}]]></Content></xml>",
  54. toUserName, fromUserName, Util.CreateTimestamp(), content);
  55. }
  56. /// <summary>
  57. /// 回复单图文消息
  58. /// </summary>
  59. /// <param name="toUserName"></param>
  60. /// <param name="fromUserName"></param>
  61. /// <param name="news"></param>
  62. /// <returns></returns>
  63. public static string RepayNews(string toUserName, string fromUserName, WeixinNews news)
  64. {
  65. var builder = new StringBuilder();
  66. builder.Append(string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName>" +
  67. "<FromUserName><![CDATA[{1}]]></FromUserName>" +
  68. "<CreateTime>{2}</CreateTime>" +
  69. "<MsgType><![CDATA[news]]></MsgType>" +
  70. "<ArticleCount>{3}</ArticleCount><Articles>",
  71. toUserName, fromUserName,
  72. Util.CreateTimestamp(),
  73. 1));
  74. builder.Append(string.Format("<item><Title><![CDATA[{0}]]></Title>" +
  75. "<Description><![CDATA[{1}]]></Description>" +
  76. "<PicUrl><![CDATA[{2}]]></PicUrl>" +
  77. "<Url><![CDATA[{3}]]></Url>" +
  78. "</item>",
  79. news.title, news.description, news.picurl, news.url
  80. ));
  81. builder.Append("</Articles></xml>");
  82. return builder.ToString();
  83. }
  84. /// <summary>
  85. /// 回复多图文消息
  86. /// </summary>
  87. /// <param name="toUserName"></param>
  88. /// <param name="fromUserName"></param>
  89. /// <param name="news"></param>
  90. /// <returns></returns>
  91. public static string RepayNews(string toUserName, string fromUserName, List<WeixinNews> news)
  92. {
  93. var builder = new StringBuilder();
  94. builder.Append(string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName>" +
  95. "<FromUserName><![CDATA[{1}]]></FromUserName>" +
  96. "<CreateTime>{2}</CreateTime>" +
  97. "<MsgType><![CDATA[news]]></MsgType>" +
  98. "<ArticleCount>{3}</ArticleCount><Articles>",
  99. toUserName, fromUserName,
  100. Util.CreateTimestamp(),
  101. news.Count
  102. ));
  103. foreach (var c in news)
  104. {
  105. builder.Append(string.Format("<item><Title><![CDATA[{0}]]></Title>" +
  106. "<Description><![CDATA[{1}]]></Description>" +
  107. "<PicUrl><![CDATA[{2}]]></PicUrl>" +
  108. "<Url><![CDATA[{3}]]></Url>" +
  109. "</item>",
  110. c.title, c.description, c.picurl, c.url
  111. ));
  112. }
  113. builder.Append("</Articles></xml>");
  114. return builder.ToString();
  115. }
  116. /// <summary>
  117. /// 回复图片消息
  118. /// </summary>
  119. /// <param name="toUserName"></param>
  120. /// <param name="fromUserName"></param>
  121. /// <param name="media_id">已经上传到微信服务器的图片media_id</param>
  122. /// <returns></returns>
  123. public static string ReplayImage(string toUserName, string fromUserName, string media_id)
  124. {
  125. return string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName>" +
  126. "<FromUserName><![CDATA[{1}]]></FromUserName>" +
  127. "<CreateTime>{2}</CreateTime>" +
  128. "<MsgType><![CDATA[image]]></MsgType>" +
  129. "<Image><MediaId><![CDATA[{3}]]></MediaId></Image></xml>",
  130. toUserName, fromUserName, Util.CreateTimestamp(), media_id);
  131. }
  132. /// <summary>
  133. /// 回复语音消息
  134. /// </summary>
  135. /// <param name="toUserName"></param>
  136. /// <param name="fromUserName"></param>
  137. /// <param name="media_id">已经上传到微信服务器的语音media_id</param>
  138. /// <returns></returns>
  139. public static string ReplayVoice(string toUserName, string fromUserName, string media_id)
  140. {
  141. return string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName>" +
  142. "<FromUserName><![CDATA[{1}]]></FromUserName>" +
  143. "<CreateTime>{2}</CreateTime>" +
  144. "<MsgType><![CDATA[voice]]></MsgType>" +
  145. "<Voice><MediaId><![CDATA[{3}]]></MediaId></Voice></xml>",
  146. toUserName, fromUserName, Util.CreateTimestamp(), media_id);
  147. }
  148. /// <summary>
  149. /// 回复视频消息
  150. /// </summary>
  151. /// <param name="toUserName"></param>
  152. /// <param name="fromUserName"></param>
  153. /// <param name="media_id">已经上传到微信服务器的视频media_id</param>
  154. /// <param name="title">视频标题</param>
  155. /// <param name="description">视频文字说明</param>
  156. /// <returns></returns>
  157. public static string ReplayVedio(string toUserName, string fromUserName, string media_id, string title, string description)
  158. {
  159. return string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName>" +
  160. "<FromUserName><![CDATA[{1}]]></FromUserName>" +
  161. "<CreateTime>{2}</CreateTime>" +
  162. "<MsgType><![CDATA[video]]></MsgType>" +
  163. "<Video><MediaId><![CDATA[{3}]]></MediaId>" +
  164. "<Title><![CDATA[{4}]]></Title>" +
  165. "<Description><![CDATA[{5}]]></Description></Video></xml>",
  166. toUserName, fromUserName, Util.CreateTimestamp(), media_id, title, description);
  167. }
  168. /// <summary>
  169. /// 回复音乐消息
  170. /// </summary>
  171. /// <param name="toUserName"></param>
  172. /// <param name="fromUserName"></param>
  173. /// <param name="title">音乐标题</param>
  174. /// <param name="description">音乐描述</param>
  175. /// <param name="musicUrl">音乐链接</param>
  176. /// <param name="hqMusicUrl">高质量音乐链接,WIFI环境优先使用该链接播放音乐</param>
  177. /// <param name="thumb_media_id">缩略图的媒体id,通过上传多媒体文件,得到的id</param>
  178. /// <returns></returns>
  179. public static string ReplayMusic(string toUserName, string fromUserName, string title, string description, string musicUrl, string hqMusicUrl, string thumb_media_id)
  180. {
  181. return string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName>" +
  182. "<FromUserName><![CDATA[{1}]]></FromUserName>" +
  183. "<CreateTime>{2}</CreateTime>" +
  184. "<MsgType><![CDATA[music]]></MsgType>" +
  185. "<Music>" +
  186. "<Title><![CDATA[{3}]]></Title>" +
  187. "<Description><![CDATA[{4}]]></Description>" +
  188. "<MusicUrl><![CDATA[{5}]]></MusicUrl>" +
  189. "<HQMusicUrl><![CDATA[{6}]]></HQMusicUrl>" +
  190. "<ThumbMediaId><![CDATA[{7}]]></ThumbMediaId>" +
  191. "</Music></xml>",
  192. toUserName, fromUserName, Util.CreateTimestamp(), title, description, musicUrl, hqMusicUrl, thumb_media_id);
  193. }
  194. }
  195. }